@almadar/core 10.45.0 → 10.46.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 +1 @@
1
- {"version":3,"sources":["../../src/types/identity.ts","../../src/types/json.ts","../../src/types/field.ts","../../src/types/asset.ts","../../src/types/expression.ts","../../src/types/entity.ts","../../src/types/effect.ts","../../src/types/state-machine.ts","../../src/types/trait.ts","../../src/types/page.ts","../../src/types/domain.ts","../../src/types/service.ts","../../src/types/orbital.ts","../../src/types/schema.ts","../../src/types/bindings.ts","../../src/types/binding.ts","../../src/types/user.ts","../../src/types/agent.ts","../../src/types/plan.ts","../../src/types/interaction-model.ts","../../src/patterns/pattern-types.ts","../../src/types/pattern.ts","../../src/service-types.ts","../../src/types/ir.ts","../../src/types/validation.ts","../../src/types/living.ts"],"names":["z","ref"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Identity model (Almadar Rabit V4, Phase 1 — types only).\n *\n * Branded, prefix-tagged node ids + a workspace-scoped name ledger. Ids are\n * the durable edge keys of the identity-keyed schema graph; the ledger is the\n * sole name↔id map (names are display labels, one row per rename). This module\n * is pure: no I/O, no side effects. Minting is the only impurity (clock +\n * crypto randomness for the ULID suffix).\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Branded id types\n// ============================================================================\n\ntype Branded<K extends string> = string & { readonly __idBrand: K };\n\nexport type OrbitalId = Branded<'OrbitalId'>;\nexport type EntityId = Branded<'EntityId'>;\nexport type TraitId = Branded<'TraitId'>;\nexport type EventId = Branded<'EventId'>;\nexport type PageId = Branded<'PageId'>;\nexport type ServiceId = Branded<'ServiceId'>;\nexport type ThemeId = Branded<'ThemeId'>;\nexport type PaletteEntryId = Branded<'PaletteEntryId'>;\n\n/** Node kind ↔ id-prefix table. The single source of truth for every prefix. */\nconst ID_PREFIXES = {\n orbital: 'orb_',\n entity: 'ent_',\n trait: 'trt_',\n event: 'evt_',\n page: 'pag_',\n service: 'svc_',\n theme: 'thm_',\n palette: 'pal_',\n} as const;\n\nexport type IdKind = keyof typeof ID_PREFIXES;\n\n/** Compile-time map from kind to its branded id type. */\nexport interface IdForKind {\n orbital: OrbitalId;\n entity: EntityId;\n trait: TraitId;\n event: EventId;\n page: PageId;\n service: ServiceId;\n theme: ThemeId;\n palette: PaletteEntryId;\n}\n\n/**\n * The one controlled brand assertion in this module. A prefix-checked string\n * is asserted into its branded form here and nowhere else.\n */\nfunction brand<Id extends string>(value: string): Id {\n return value as Id;\n}\n\n// ============================================================================\n// Kind guards + constructors (one shared factory, eight kinds)\n// ============================================================================\n\ninterface IdKindApi<Id extends string> {\n readonly prefix: string;\n is(value: string): value is Id;\n as(value: string): Id;\n}\n\nfunction makeIdKind<Id extends string>(kind: IdKind): IdKindApi<Id> {\n const prefix = ID_PREFIXES[kind];\n const is = (value: string): value is Id =>\n value.startsWith(prefix) && value.length > prefix.length;\n const as = (value: string): Id => {\n if (!is(value)) {\n throw new Error(\n `Expected ${kind} id (prefix \"${prefix}\"), got: ${JSON.stringify(value)}`,\n );\n }\n return brand<Id>(value);\n };\n return { prefix, is, as };\n}\n\nconst orbitalKind = makeIdKind<OrbitalId>('orbital');\nconst entityKind = makeIdKind<EntityId>('entity');\nconst traitKind = makeIdKind<TraitId>('trait');\nconst eventKind = makeIdKind<EventId>('event');\nconst pageKind = makeIdKind<PageId>('page');\nconst serviceKind = makeIdKind<ServiceId>('service');\nconst themeKind = makeIdKind<ThemeId>('theme');\nconst paletteKind = makeIdKind<PaletteEntryId>('palette');\n\nexport const isOrbitalId = orbitalKind.is;\nexport const asOrbitalId = orbitalKind.as;\nexport const isEntityId = entityKind.is;\nexport const asEntityId = entityKind.as;\nexport const isTraitId = traitKind.is;\nexport const asTraitId = traitKind.as;\nexport const isEventId = eventKind.is;\nexport const asEventId = eventKind.as;\nexport const isPageId = pageKind.is;\nexport const asPageId = pageKind.as;\nexport const isServiceId = serviceKind.is;\nexport const asServiceId = serviceKind.as;\nexport const isThemeId = themeKind.is;\nexport const asThemeId = themeKind.as;\nexport const isPaletteEntryId = paletteKind.is;\nexport const asPaletteEntryId = paletteKind.as;\n\n/**\n * The id-prefix for a node kind (`'entity' → 'ent_'`). The JS mirror of the\n * Rust `IdKind::prefix`. Single source of truth is {@link ID_PREFIXES}.\n */\nexport function idPrefix(kind: IdKind): string {\n return ID_PREFIXES[kind];\n}\n\n/**\n * The node kind an id's prefix denotes, or `null` for an unrecognized /\n * bare-prefix string. The JS mirror of the Rust `id_kind_of`. Prefixes are\n * mutually non-overlapping, so match order is irrelevant.\n */\nexport function idKindOf(id: string): IdKind | null {\n for (const kind of Object.keys(ID_PREFIXES) as IdKind[]) {\n const prefix = ID_PREFIXES[kind];\n if (id.startsWith(prefix) && id.length > prefix.length) return kind;\n }\n return null;\n}\n\n// ============================================================================\n// Minting — prefix + ULID\n// ============================================================================\n\nconst CROCKFORD = '0123456789ABCDEFGHJKMNPQRSTVWXYZ';\nconst TIME_LEN = 10;\nconst RANDOM_LEN = 16;\n\nfunction randomBytes(len: number): Uint8Array {\n const g = globalThis as { crypto?: { getRandomValues?: (a: Uint8Array) => Uint8Array } };\n if (g.crypto?.getRandomValues) {\n return g.crypto.getRandomValues(new Uint8Array(len));\n }\n throw new Error('mintId: no crypto.getRandomValues available in this runtime');\n}\n\nfunction encodeTime(now: number): string {\n let value = now;\n let out = '';\n for (let i = 0; i < TIME_LEN; i++) {\n const mod = value % 32;\n out = CROCKFORD[mod] + out;\n value = (value - mod) / 32;\n }\n return out;\n}\n\nfunction encodeRandom(): string {\n const bytes = randomBytes(RANDOM_LEN);\n let out = '';\n for (let i = 0; i < RANDOM_LEN; i++) {\n out += CROCKFORD[bytes[i] & 31];\n }\n return out;\n}\n\n/** A 26-char Crockford-base32 ULID: 48-bit ms timestamp + 80 bits of randomness. */\nfunction ulid(): string {\n return encodeTime(Date.now()) + encodeRandom();\n}\n\n/** Mint a fresh, opaque, kind-tagged id: `<prefix><ULID>`. */\nexport function mintId<K extends IdKind>(kind: K): IdForKind[K] {\n return brand<IdForKind[K]>(ID_PREFIXES[kind] + ulid());\n}\n\n// ============================================================================\n// Identity ledger\n// ============================================================================\n\n/** Ledger row kind. `palette` entries are manifest ids, not name-ledger rows. */\nexport type LedgerKind =\n | 'orbital'\n | 'entity'\n | 'trait'\n | 'event'\n | 'page'\n | 'service'\n | 'theme';\n\n/**\n * One ledger row: the workspace's name history for a single node id.\n *\n * For kind `'event'` the row is minted per-(trait, declared event) per the\n * Phase-0 freeze — the owning trait is recorded in `parent`; a call-site event\n * rename is a one-row edit on this same id (the baked-vs-current key namespaces\n * collapse into `bakedName` vs `curName`).\n */\nexport interface LedgerEntry {\n id: string;\n kind: LedgerKind;\n bakedName: string;\n curName: string;\n renames: ReadonlyArray<{ from: string; to: string; at: string }>;\n owner: 'std' | 'io' | 'workspace';\n /** Owning trait for kind `'event'` (per-trait event-id namespace). */\n parent?: TraitId;\n}\n\nexport interface IdentityLedger {\n schemaVersion: 1;\n entries: Record<string, LedgerEntry>;\n}\n\n/** Resolve a name to its id via exact `curName` match within `kind`, else null. */\nexport function ledgerResolveName(\n ledger: IdentityLedger,\n kind: LedgerKind,\n name: string,\n): string | null {\n for (const [id, entry] of Object.entries(ledger.entries)) {\n if (entry.kind === kind && entry.curName === name) return id;\n }\n return null;\n}\n\n/** Immutable rename: returns a new ledger with the id's `curName` + `renames` updated. */\nexport function ledgerRename(\n ledger: IdentityLedger,\n id: string,\n to: string,\n at: string,\n): IdentityLedger {\n const entry = ledger.entries[id];\n if (entry === undefined) return ledger;\n const updated: LedgerEntry = {\n ...entry,\n curName: to,\n renames: [...entry.renames, { from: entry.curName, to, at }],\n };\n return { ...ledger, entries: { ...ledger.entries, [id]: updated } };\n}\n\n/** Current display name for an id, or null when the id is not in the ledger. */\nexport function ledgerCurName(ledger: IdentityLedger, id: string): string | null {\n return ledger.entries[id]?.curName ?? null;\n}\n\n// ============================================================================\n// Zod schemas — the `.orb` load-time activation surface (Rabit V4, Phase 4)\n// ============================================================================\n\n/**\n * Prefix-checked, kind-tagged id schemas. Each narrows a validated string to\n * its branded id type via the module's own kind guard, so a schema that reads\n * `TraitIdSchema.optional()` yields `TraitId | undefined` with no cast. The\n * guard is the single source of prefix truth (`ID_PREFIXES`); the schema is a\n * thin zod wrapper over it.\n */\nexport const OrbitalIdSchema = z\n .string()\n .refine(isOrbitalId, { message: `Expected an orbital id (prefix \"${ID_PREFIXES.orbital}\")` });\nexport const EntityIdSchema = z\n .string()\n .refine(isEntityId, { message: `Expected an entity id (prefix \"${ID_PREFIXES.entity}\")` });\nexport const TraitIdSchema = z\n .string()\n .refine(isTraitId, { message: `Expected a trait id (prefix \"${ID_PREFIXES.trait}\")` });\nexport const EventIdSchema = z\n .string()\n .refine(isEventId, { message: `Expected an event id (prefix \"${ID_PREFIXES.event}\")` });\nexport const PageIdSchema = z\n .string()\n .refine(isPageId, { message: `Expected a page id (prefix \"${ID_PREFIXES.page}\")` });\nexport const ServiceIdSchema = z\n .string()\n .refine(isServiceId, { message: `Expected a service id (prefix \"${ID_PREFIXES.service}\")` });\nexport const ThemeIdSchema = z\n .string()\n .refine(isThemeId, { message: `Expected a theme id (prefix \"${ID_PREFIXES.theme}\")` });\nexport const PaletteEntryIdSchema = z\n .string()\n .refine(isPaletteEntryId, { message: `Expected a palette-entry id (prefix \"${ID_PREFIXES.palette}\")` });\n\nexport const LedgerKindSchema = z.enum([\n 'orbital',\n 'entity',\n 'trait',\n 'event',\n 'page',\n 'service',\n 'theme',\n]);\n\nexport const LedgerEntrySchema = z.object({\n id: z.string(),\n kind: LedgerKindSchema,\n bakedName: z.string(),\n curName: z.string(),\n renames: z.array(\n z.object({ from: z.string(), to: z.string(), at: z.string() }),\n ),\n owner: z.enum(['std', 'io', 'workspace']),\n parent: TraitIdSchema.optional(),\n});\n\nexport const IdentityLedgerSchema = z.object({\n schemaVersion: z.literal(1),\n entries: z.record(LedgerEntrySchema),\n});\n","/**\n * JSON primitives — the universal \"data crossed a boundary\" type.\n *\n * Every value that arrives over the wire from an LLM (tool-call args),\n * from disk (workspace files), or from an HTTP body before\n * domain-specific validation is a `JsonValue`. Narrow with a typed\n * predicate (`is`-guard) at the boundary; don't widen back to `unknown`.\n *\n * `JsonObject` and `ToolArgs` are aliases for the common\n * `Record<string, JsonValue>` shape. `ToolArgs` is the name the\n * agent surface uses for LLM-emitted tool-call arguments; `JsonObject`\n * is the general-purpose alias. They are the same type — the alias\n * exists so call sites read at the right semantic level.\n *\n * Why not `Record<string, unknown>`? Two reasons. (1) `unknown` widens\n * back to anything, which defeats the purpose of typing the boundary.\n * (2) The `@almadar/eslint-plugin/no-record-string-unknown` rule blocks\n * the wider form — `JsonValue`-based records are the typed answer.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n/**\n * Recursive JSON value union — every shape JSON can carry.\n */\nexport type JsonValue =\n | string\n | number\n | boolean\n | null\n | JsonValue[]\n | { [key: string]: JsonValue };\n\n/**\n * JSON object — keyed string→JsonValue. The wire form of arbitrary\n * structured data. Replaces `Record<string, unknown>` at typed\n * boundaries (LLM emits, file reads, HTTP bodies).\n */\nexport type JsonObject = { [key: string]: JsonValue };\n\n/** Zod schema for JsonValue — the one boundary validator for parsed-JSON slots. */\nexport const JsonValueSchema: z.ZodType<JsonValue> = z.lazy(() =>\n z.union([z.string(), z.number(), z.boolean(), z.null(), z.array(JsonValueSchema), z.record(JsonValueSchema)]),\n);\n\n/**\n * LLM tool-call arguments — same shape as `JsonObject`, named for the\n * agent-surface call site. Each tool's `execute(args: ToolArgs)`\n * receives this and narrows via an `is`-guard predicate before any\n * field access.\n */\nexport type ToolArgs = JsonObject;\n\n/**\n * Universal type-guard input — every runtime value shape a predicate can\n * be handed, enumerated instead of `unknown` (the repo bans `unknown`\n * even at guard boundaries). Primitives cover every `typeof` result;\n * `object` covers arrays, records, class instances, and functions.\n */\nexport type RuntimeValue =\n | string\n | number\n | bigint\n | boolean\n | symbol\n | Date\n | null\n | undefined\n | object;\n\n/**\n * Type guard: is the given value a JSON primitive (non-array,\n * non-object)? Used by walkers that decide whether to recurse.\n */\nexport function isJsonPrimitive(\n value: JsonValue,\n): value is string | number | boolean | null {\n return (\n value === null\n || typeof value === 'string'\n || typeof value === 'number'\n || typeof value === 'boolean'\n );\n}\n\n/**\n * Type guard: is the given value a JSON object (non-array, non-null)?\n */\nexport function isJsonObject(value: JsonValue): value is JsonObject {\n return (\n value !== null\n && typeof value === 'object'\n && !Array.isArray(value)\n );\n}\n\n/**\n * Type guard: is the given value a JSON array?\n */\nexport function isJsonArray(value: JsonValue): value is JsonValue[] {\n return Array.isArray(value);\n}\n","/**\n * Field Types for Orbital Units\n *\n * Extracted from schema/data-entities.ts for the orbitals module.\n * These types define the field structure within orbital entities.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\nimport type { EntityId } from './identity.js';\nimport { EntityIdSchema } from './identity.js';\nimport type { JsonValue, RuntimeValue } from './json.js';\nimport { JsonValueSchema } from './json.js';\n\n// ============================================================================\n// Field Types\n// ============================================================================\n\n/**\n * Supported field types for entity fields.\n *\n * @example\n * { name: 'status', type: 'enum', values: ['draft', 'published'] }\n * { name: 'authorId', type: 'relation', relation: { entity: 'User', cardinality: 'one' } }\n */\nexport type FieldType =\n | 'string'\n | 'number'\n | 'boolean'\n | 'date'\n | 'timestamp'\n | 'datetime'\n // Semantic string domains. `.lolo` already types `date`/`datetime` rather\n // than annotating them, so these belong in the type system for the same\n // reason: a field's domain is a declared fact, not a decoration. They\n // replaced the optional `format` property, which had zero producers.\n | 'email'\n | 'url'\n | 'phone'\n | 'uuid'\n | 'image'\n | 'array'\n | 'object'\n | 'enum'\n | 'relation'\n | 'trait'\n | 'slot'\n | 'pattern';\n\n/** Every `FieldType`, as a runtime array. Downstream imports this instead of\n * re-listing the union — five copies had already drifted apart. */\nexport const FIELD_TYPES = [\n 'string',\n 'number',\n 'boolean',\n 'date',\n 'timestamp',\n 'datetime',\n 'email',\n 'url',\n 'phone',\n 'uuid',\n 'image',\n 'array',\n 'object',\n 'enum',\n 'relation',\n 'trait',\n 'slot',\n 'pattern',\n] as const satisfies readonly FieldType[];\n\n/** The semantic string domains — constrained strings, validatable by value. */\nexport const SEMANTIC_STRING_TYPES = ['email', 'url', 'phone', 'uuid', 'image'] as const;\n\nexport type SemanticStringType = (typeof SEMANTIC_STRING_TYPES)[number];\n\n/** Is this a semantic string domain (as opposed to a bare `string`)? */\nexport function isSemanticStringType(type: FieldType): type is SemanticStringType {\n return (SEMANTIC_STRING_TYPES as readonly string[]).includes(type);\n}\n\nexport const FieldTypeSchema = z.enum(FIELD_TYPES);\n\n// ============================================================================\n// Relation Configuration\n// ============================================================================\n\n/**\n * Cardinality for relation fields.\n * Matches Rust compiler's Cardinality enum.\n */\nexport type RelationCardinality = \n | 'one' \n | 'many' \n | 'one-to-many' \n | 'many-to-one' \n | 'many-to-many';\n\nexport const RelationCardinalitySchema = z.enum([\n 'one',\n 'many',\n 'one-to-many',\n 'many-to-one',\n 'many-to-many',\n]);\n\n/**\n * Configuration for relation fields (foreign keys).\n * Matches Rust compiler's RelationDefinition format.\n */\nexport type RelationConfig = {\n /** Target entity name (e.g., 'User', 'Task') - matches Rust's `entity` field */\n entity: string;\n /** V4 dual-carry id sibling of `entity` — optional until the Phase-7 flip. */\n entityId?: EntityId;\n /** Field on target entity (defaults to 'id') */\n field?: string;\n /** \n * Cardinality: one, many, one-to-many, many-to-one, many-to-many\n * Matches Rust compiler's cardinality format\n */\n cardinality?: RelationCardinality;\n /** Delete behavior */\n onDelete?: 'cascade' | 'nullify' | 'restrict';\n /** \n * Foreign key field name (for legacy compatibility).\n * @deprecated Use field instead\n */\n foreignKey?: string;\n /**\n * Target entity name (for legacy compatibility).\n * @deprecated Use entity instead\n */\n target?: string;\n /**\n * Cardinality type alias (for legacy compatibility).\n * @deprecated Use cardinality instead\n */\n type?: RelationCardinality;\n};\n\nexport const RelationConfigSchema = z.object({\n entity: z.string().min(1, 'Target entity is required'),\n entityId: EntityIdSchema.optional(),\n field: z.string().optional(),\n cardinality: RelationCardinalitySchema.optional(),\n onDelete: z.enum(['cascade', 'nullify', 'restrict']).optional(),\n // Legacy compatibility fields\n foreignKey: z.string().optional(),\n target: z.string().optional(),\n type: RelationCardinalitySchema.optional(),\n}).transform((data) => {\n // Normalize legacy format to standard format\n const normalized: RelationConfig = {\n entity: data.entity || data.target || '',\n entityId: data.entityId,\n cardinality: data.cardinality || data.type,\n field: data.field,\n onDelete: data.onDelete,\n };\n return normalized;\n});\n\nexport type RelationConfigInput = z.input<typeof RelationConfigSchema>;\n\n// ============================================================================\n// Field Format\n// ============================================================================\n\n/**\n * Value rules for the semantic string domains — one owner, so the seeders, the\n * validators and the verifiers cannot drift apart on what counts as valid.\n *\n * These replaced the old optional `format` property, which had zero producers\n * anywhere in the repo and no Rust counterpart at all: `format` was unreachable\n * from `.lolo`, so every consumer fell back to guessing from field names.\n */\nconst EMAIL_RE = /^[^\\s@]+@[^\\s@.]+\\.[^\\s@]+$/;\nconst URL_RE = /^https?:\\/\\/[^\\s]+$/;\nconst PHONE_RE = /^[+]?[\\d\\s().-]{7,}$/;\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nexport function isEmailValue(value: string): boolean {\n return EMAIL_RE.test(value);\n}\n\nexport function isUrlValue(value: string): boolean {\n return URL_RE.test(value);\n}\n\nexport function isPhoneValue(value: string): boolean {\n return PHONE_RE.test(value);\n}\n\nexport function isUuidValue(value: string): boolean {\n return UUID_RE.test(value);\n}\n\n/** Does `value` satisfy the declared semantic domain? `image` is a URL. */\nexport function isSemanticStringValue(type: SemanticStringType, value: string): boolean {\n switch (type) {\n case 'email':\n return isEmailValue(value);\n case 'url':\n case 'image':\n return isUrlValue(value);\n case 'phone':\n return isPhoneValue(value);\n case 'uuid':\n return isUuidValue(value);\n }\n}\n\n// ============================================================================\n// Entity Field — discriminated union by `type`\n// ============================================================================\n\n/**\n * Field-type tags that don't carry a type-dependent payload. The base\n * `EntityField` shape applies as-is.\n */\ntype ScalarFieldType =\n | 'string'\n | 'number'\n | 'boolean'\n | 'date'\n | 'timestamp'\n | 'datetime'\n | 'email'\n | 'url'\n | 'phone'\n | 'uuid'\n | 'image'\n | 'trait'\n | 'slot'\n | 'pattern';\n\n/** Fields shared across every variant. */\ntype EntityFieldBase = {\n /**\n * Field name (camelCase). Optional for nested item/property descriptors\n * where the name is implied by the parent (`items`, `properties[k]`).\n * Mirrors Rust's `FieldDefinition.name: Option<String>`.\n */\n name?: string;\n /** Whether the field is required */\n required?: boolean;\n /** Default value — parsed from `.orb`, always JSON-shaped. */\n default?: JsonValue;\n /** Minimum value (for number) or length (for string) */\n min?: number;\n /** Maximum value or length */\n max?: number;\n /** Object property schemas keyed by property name (for object type).\n * Mirrors Rust's `FieldDefinition.properties: Option<HashMap<String,\n * FieldDefinition>>`. Populated by the lolo lowerer when a field /\n * config slot's type expression resolves to a struct shape\n * (`TypeExpr::Object`), including named-type aliases like `[MetricSpec]`. */\n properties?: Record<string, EntityField>;\n /** Runtime-managed widget state (authored `@intrinsic` in `.lolo`). Exempt\n * from the explicit-binding rule and never a domain-data bind target. */\n intrinsic?: boolean;\n /** Human/semantic description (authored `@description \"...\"` in `.lolo`).\n * Authoring/build-time metadata — factory-signature catalog, embeddings,\n * curation field-matching; the runtime ignores it. */\n description?: string;\n /** User-vocabulary synonyms (authored `@synonyms \"...\"` in `.lolo`).\n * Free text feeding catalog search / curation field-matching. */\n synonyms?: string;\n};\n\n/**\n * Scalar / structural fields — no type-dependent payload required.\n * `values?` is permitted as an OPTIONAL UI/validation hint (e.g. lolo's\n * `'a' | 'b' | 'c'` string-union sugar lowers to `type: 'string', values:\n * [...]`). Only `EnumEntityField` MANDATES values.\n */\nexport type ScalarEntityField = EntityFieldBase & {\n type: ScalarFieldType;\n /** Optional vocabulary hint for scalar fields (e.g. string unions\n * authored as `'a'|'b'|'c'` in lolo). Not required at this variant. */\n values?: string[];\n};\n\n/** `type: 'enum'` REQUIRES the closed vocabulary in `values`. */\nexport type EnumEntityField = EntityFieldBase & {\n type: 'enum';\n /** Closed string vocabulary the field accepts. */\n values: string[];\n};\n\n/** `type: 'relation'` REQUIRES the relation target binding. */\nexport type RelationEntityField = EntityFieldBase & {\n type: 'relation';\n /** Relation target binding (entity + cardinality). */\n relation: RelationConfig;\n};\n\n/** `type: 'array'` — element schema in `items` strongly preferred but\n * optional for legacy compatibility with codegen-emitted scalar-array\n * fields (e.g. `{type: 'array', default: []}`). The lolo lowerer + Rust\n * validator catch typed-element-required cases downstream. */\nexport type ArrayEntityField = EntityFieldBase & {\n type: 'array';\n /** Element schema for the array. */\n items?: EntityField;\n};\n\n/**\n * `type: 'object'` — a fixed-key struct (fields in `properties`) OR a\n * dynamic-key map (`Map K V` in `.lolo`; the uniform value schema lives in\n * `items`, mirroring an array's element schema). A distinct variant so `items`\n * is statically allowed only on object/array fields, never on scalars.\n */\nexport type ObjectEntityField = EntityFieldBase & {\n type: 'object';\n /** Uniform value schema for a dynamic-key map (`Map K V`). */\n items?: EntityField;\n};\n\n/**\n * Entity field definition — discriminated union by `type`. Each variant\n * statically enforces its dependent payload (`values` for enum,\n * `relation` for relation, `items` for array) so TS / Zod / JSON Schema\n * consumers all agree on the dependency, not just the Rust validator.\n *\n * @example\n * { name: 'status', type: 'enum', values: ['draft', 'published'] }\n * { name: 'authorId', type: 'relation', relation: { entity: 'User', cardinality: 'one' } }\n * { name: 'tags', type: 'array', items: { type: 'string' } }\n */\nexport type EntityField =\n | ScalarEntityField\n | EnumEntityField\n | RelationEntityField\n | ArrayEntityField\n | ObjectEntityField;\n\n/**\n * Alias map for legacy/loose field-type spellings. Preprocessed into the\n * canonical `FieldType` enum before zod validates. Without this, agent-produced\n * schemas using `text`/`int`/`float`/`ts` were rejected at parse time — this\n * normalizes them so the rest of the pipeline sees only canonical types.\n */\nconst FIELD_TYPE_ALIASES: Record<string, FieldType> = {\n text: 'string',\n int: 'number',\n float: 'number',\n ts: 'timestamp',\n};\n\n/**\n * Zod schema for `EntityField`. Preprocess normalizes:\n * - legacy `type` aliases (text → string, int → number, etc.)\n * - legacy `enum: string[]` alias → `values: string[]`\n *\n * Branches on `type` so TS narrows the parsed output to the matching\n * discriminated-union variant.\n */\n// The third type param stays `unknown`: zod v3 bakes `unknown` into\n// `z.preprocess`'s input type, and the recursion needs the explicit annotation.\nexport const EntityFieldSchema: z.ZodType<EntityField, z.ZodTypeDef, unknown> = z.lazy(() => {\n const baseFieldShape = {\n name: z.string().min(1, 'Field name is required').optional(),\n required: z.boolean().optional(),\n default: JsonValueSchema.optional(),\n min: z.number().optional(),\n max: z.number().optional(),\n properties: z.record(EntityFieldSchema).optional(),\n intrinsic: z.boolean().optional(),\n description: z.string().optional(),\n synonyms: z.string().optional(),\n };\n\n /** Build a scalar variant schema. `values?` is permitted as a hint;\n * only the enum variant mandates a non-empty values array. */\n function scalarVariant<T extends ScalarFieldType>(t: T) {\n return z.object({\n ...baseFieldShape,\n type: z.literal(t),\n values: z.array(z.string()).optional(),\n });\n }\n\n return z.preprocess(\n (input) => {\n if (\n input === null ||\n typeof input !== 'object' ||\n !('type' in input) ||\n typeof (input as { type?: RuntimeValue }).type !== 'string'\n ) {\n return input;\n }\n const obj = input as { type: string; enum?: RuntimeValue; values?: RuntimeValue };\n const next: { type: string; enum?: RuntimeValue; values?: RuntimeValue } = { ...obj };\n const aliased = FIELD_TYPE_ALIASES[obj.type];\n if (aliased !== undefined) next.type = aliased;\n // Fold legacy `enum: string[]` into `values: string[]`.\n if (next.enum !== undefined && next.values === undefined) {\n next.values = next.enum;\n }\n delete next.enum;\n return next;\n },\n z.discriminatedUnion('type', [\n scalarVariant('string'),\n scalarVariant('number'),\n scalarVariant('boolean'),\n scalarVariant('date'),\n scalarVariant('timestamp'),\n scalarVariant('datetime'),\n scalarVariant('email'),\n scalarVariant('url'),\n scalarVariant('phone'),\n scalarVariant('uuid'),\n scalarVariant('image'),\n scalarVariant('trait'),\n scalarVariant('slot'),\n scalarVariant('pattern'),\n // Enum variant — REQUIRES non-empty values.\n z.object({\n ...baseFieldShape,\n type: z.literal('enum'),\n values: z.array(z.string()).min(1, 'Enum field requires a non-empty `values` array'),\n }),\n // Relation variant — REQUIRES relation config.\n z.object({\n ...baseFieldShape,\n type: z.literal('relation'),\n relation: RelationConfigSchema,\n }),\n // Array variant — items optional to match relaxed TS shape.\n z.object({\n ...baseFieldShape,\n type: z.literal('array'),\n items: EntityFieldSchema.optional(),\n }),\n // Object variant — fixed-key struct (`properties`) or dynamic-key\n // map (`Map K V`, uniform value schema in `items`).\n z.object({\n ...baseFieldShape,\n type: z.literal('object'),\n items: EntityFieldSchema.optional(),\n values: z.array(z.string()).optional(),\n }),\n ]),\n );\n});\n\nexport type EntityFieldInput = z.input<typeof EntityFieldSchema>;\n\n// ============================================================================\n// Type Aliases (for cleaner imports)\n// ============================================================================\n\n/** Alias for EntityField - preferred name */\nexport type Field = EntityField;\n\n/** Alias for EntityFieldSchema - preferred name */\nexport const FieldSchema = EntityFieldSchema;\n","/**\n * Asset Types for Semantic Asset References\n *\n * Defines types for abstracting asset paths into semantic references.\n * Assets are resolved from SemanticAssetRef to actual paths at compile time.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Entity Roles\n// ============================================================================\n\n/**\n * Entity roles in game contexts\n */\nexport const ENTITY_ROLES = [\n 'player',\n 'enemy',\n 'npc',\n 'item',\n 'tile',\n 'projectile',\n 'effect',\n 'ui',\n 'decoration',\n 'vehicle',\n] as const;\n\nexport type EntityRole = (typeof ENTITY_ROLES)[number];\n\nexport const EntityRoleSchema = z.enum(ENTITY_ROLES);\n\n// ============================================================================\n// Visual Styles\n// ============================================================================\n\n/**\n * Visual art styles for games\n */\nexport const VISUAL_STYLES = ['pixel', 'vector', 'hd', '1-bit', 'isometric'] as const;\n\nexport type VisualStyle = (typeof VISUAL_STYLES)[number];\n\nexport const VisualStyleSchema = z.enum(VISUAL_STYLES);\n\n// ============================================================================\n// Asset Dimension + Aspect (render metadata carried with the asset / the need)\n// ============================================================================\n\n/**\n * Whether the asset is a 2D sprite/image or a 3D model. Set by the consuming\n * canvas: the same entity role is a 2D sprite-sheet on a tile board and a 3D\n * rigged model on a 3D board.\n */\nexport const ASSET_DIMENSIONS = ['2d', '3d'] as const;\n\nexport type AssetDimension = (typeof ASSET_DIMENSIONS)[number];\n\nexport const AssetDimensionSchema = z.enum(ASSET_DIMENSIONS);\n\n/**\n * Rendering aspect ratio of an asset: square (tiles/sprites/portraits/icons),\n * 16:9 (scene backdrops), 5:7 (cards), 8:1 (effect frame strips).\n */\nexport const ASSET_ASPECTS = ['1:1', '16:9', '5:7', '8:1'] as const;\n\nexport type AssetAspect = (typeof ASSET_ASPECTS)[number];\n\nexport const AssetAspectSchema = z.enum(ASSET_ASPECTS);\n\n// ============================================================================\n// Animation Name + Sheet Direction\n// ============================================================================\n\n/**\n * Animation names matching a sprite sheet's row layout. Canonical home for\n * this vocabulary — `@almadar/ui`'s `spriteAnimationTypes.ts` re-exports it\n * rather than redeclaring, so board `.lolo` config and the render library\n * agree on one enum.\n */\nexport const ANIMATION_NAMES = ['idle', 'walk', 'attack', 'hit', 'death'] as const;\n\nexport type AnimationName = (typeof ANIMATION_NAMES)[number];\n\nexport const AnimationNameSchema = z.enum(ANIMATION_NAMES);\n\n/** Sheet file directions (physical PNG files a sprite sheet ships as). */\nexport const SPRITE_DIRECTIONS = ['se', 'sw'] as const;\n\nexport type SpriteDirection = (typeof SPRITE_DIRECTIONS)[number];\n\nexport const SpriteDirectionSchema = z.enum(SPRITE_DIRECTIONS);\n\n// ============================================================================\n// Animation Definition\n// ============================================================================\n\n/**\n * Definition for a single named animation within a sprite sheet: which row\n * it occupies, how many frames it has, and its playback rate. This is the\n * shape actually consumed by `@almadar/ui`'s sprite-sheet renderer\n * (`spriteAnimation.ts`'s `frameRect`/`getCurrentFrameFromDef`) — moved here\n * verbatim rather than reconciled with a differently-shaped guess, since\n * `@almadar/ui`'s version is the one with real production consumers.\n */\nexport interface AnimationDef {\n /** Row index in the sprite sheet (0-based; each animation occupies one row). */\n row: number;\n /** Number of frames in this animation. */\n frames: number;\n /** Frames per second. */\n frameRate: number;\n /** Whether the animation loops. */\n loop: boolean;\n}\n\nexport const AnimationDefSchema = z.object({\n row: z.number().int().nonnegative(),\n frames: z.number().int().positive(),\n frameRate: z.number().positive(),\n loop: z.boolean(),\n});\n\n// ============================================================================\n// Sprite Sheet Atlas\n// ============================================================================\n\n/**\n * Parsed sprite-sheet atlas JSON — the contract a `spriteSheet`-role `Asset.url`\n * resolves to when fetched (see `Asset.url` usage in `@almadar/ui`'s\n * `useUnitSpriteAtlas`). A unit's `sprite?: Asset` stays the static single-pose\n * image; `spriteSheet?: Asset` is a SEPARATE reference whose URL points at a\n * `SpriteSheetAtlas`-shaped JSON manifest (e.g. `.../guardian-sprite-sheet.json`),\n * not a PNG. Frame-cutting geometry lives here, not inlined onto `Asset` — an\n * `Asset` traveling through `render-ui` every tick stays small.\n */\nexport interface SpriteSheetAtlas {\n /** Unit archetype key. */\n unit?: string;\n /** Visual type key. */\n type?: string;\n /** Width of a single frame in pixels. */\n frameWidth: number;\n /** Height of a single frame in pixels. */\n frameHeight: number;\n /** Number of columns (frames per row). */\n columns: number;\n /** Number of rows (animations). */\n rows: number;\n /** Directions present as physical PNG files. */\n directions: SpriteDirection[];\n /** Relative PNG sheet paths per direction. */\n sheets: Partial<Record<SpriteDirection, string>>;\n /** Animation row layout keyed by animation name. */\n animations: Partial<Record<AnimationName, AnimationDef>>;\n}\n\nexport const SpriteSheetAtlasSchema = z.object({\n unit: z.string().optional(),\n type: z.string().optional(),\n frameWidth: z.number().positive(),\n frameHeight: z.number().positive(),\n columns: z.number().int().positive(),\n rows: z.number().int().positive(),\n directions: z.array(SpriteDirectionSchema),\n sheets: z.record(SpriteDirectionSchema, z.string()),\n animations: z.record(AnimationNameSchema, AnimationDefSchema),\n});\n\n// ============================================================================\n// Texture Atlas — named-subrect packed sheet (the industry standard)\n// ============================================================================\n\n/**\n * One named sub-rectangle inside a packed sheet. Mirrors the ShoeBox /\n * TexturePacker `<SubTexture>` element every Kenney `Spritesheet/*.xml` ships\n * (`x`/`y`/`width`/`height` = the rect in the sheet PNG; `frameX`/`frameY`/\n * `frameWidth`/`frameHeight` = the trim/pad offsets for sprites packed with\n * transparent edges removed — optional, present only on trimmed atlases).\n */\nexport interface SubTexture {\n x: number;\n y: number;\n width: number;\n height: number;\n frameX?: number;\n frameY?: number;\n frameWidth?: number;\n frameHeight?: number;\n}\n\nexport const SubTextureSchema = z.object({\n x: z.number().nonnegative(),\n y: z.number().nonnegative(),\n width: z.number().positive(),\n height: z.number().positive(),\n frameX: z.number().optional(),\n frameY: z.number().optional(),\n frameWidth: z.number().positive().optional(),\n frameHeight: z.number().positive().optional(),\n});\n\n/**\n * A packed sheet + its named sub-rectangles — the canonical parse target for a\n * Kenney `Spritesheet/*.xml` atlas. A STATIC tile/prop/UI Asset references one\n * of these: `{ url: <sheet.png>, atlas: <this.json>, sprite: \"grass.png\" }` →\n * the renderer fetches the sheet + atlas ONCE and blits the named sub-rect,\n * instead of loading N individual PNGs. (Animated actors use `SpriteSheetAtlas`\n * instead; a uniform-grid tile page uses `Tilesheet`.)\n */\nexport interface TextureAtlas {\n /** Relative path to the sheet PNG the sub-rects index into (the atlas's own `imagePath`). */\n imagePath: string;\n /** Sub-rectangles keyed by their atlas name (e.g. `\"grass.png\"`). */\n subTextures: Record<string, SubTexture>;\n}\n\nexport const TextureAtlasSchema = z.object({\n imagePath: z.string(),\n subTextures: z.record(z.string(), SubTextureSchema),\n});\n\n// ============================================================================\n// Tilesheet — uniform-grid packed page (cut by index)\n// ============================================================================\n\n/**\n * A uniform-grid tile page — the shape a Kenney `Tilesheet/` sheet takes (e.g.\n * Pirate Pack: \"each tile is 64×64, no margin\"). Tiles are cut by `(col,row)`\n * index rather than by named rect. `names` is present only when a sibling\n * `.xml`/`.txt` supplies an index→name list; otherwise a tile is addressed by\n * its `\"col,row\"` (or flat index) via `Asset.sprite`.\n */\nexport interface Tilesheet {\n /** Relative path to the tile sheet PNG. */\n imagePath: string;\n /** Width of one tile cell in pixels. */\n tileWidth: number;\n /** Height of one tile cell in pixels. */\n tileHeight: number;\n /** Number of columns in the grid. */\n columns: number;\n /** Number of rows in the grid. */\n rows: number;\n /** Outer margin before the first tile, in pixels (default 0). */\n margin?: number;\n /** Gap between adjacent tiles, in pixels (default 0). */\n spacing?: number;\n /** Optional index→name labels when a descriptor supplies them. */\n names?: string[];\n}\n\nexport const TilesheetSchema = z.object({\n imagePath: z.string(),\n tileWidth: z.number().positive(),\n tileHeight: z.number().positive(),\n columns: z.number().int().positive(),\n rows: z.number().int().positive(),\n margin: z.number().nonnegative().optional(),\n spacing: z.number().nonnegative().optional(),\n names: z.array(z.string()).optional(),\n});\n\n// ============================================================================\n// Semantic Asset Reference\n// ============================================================================\n\n/**\n * Semantic reference to an asset (not a hardcoded path).\n * Resolved to actual paths at compile time via asset maps.\n */\nexport type SemanticAssetRef = {\n /**\n * Entity role — a free string. Core no longer constrains the vocabulary to\n * `EntityRole` (that enum stays an exported shared reference for the asset\n * tool + renderer); genre boards may use their own roles (`boss`, `tower`, …).\n */\n role: string;\n /** Sub-category within role (hero, slime, coin, etc.) */\n category: string;\n /** Required animations for this entity */\n animations?: string[];\n /** Visual style preference */\n style?: VisualStyle;\n /** Variant identifier (for multiple versions) */\n variant?: string;\n /** 2D sprite vs 3D model — the rendering dimension the consuming canvas needs. */\n dimension?: AssetDimension;\n /** Rendering aspect ratio (square sprite/portrait/tile, 16:9 backdrop, 5:7 card, 8:1 fx-strip). */\n aspect?: AssetAspect;\n};\n\nexport const SemanticAssetRefSchema = z.object({\n role: z.string().min(1),\n category: z.string().min(1),\n animations: z.array(z.string()).optional(),\n style: VisualStyleSchema.optional(),\n variant: z.string().optional(),\n dimension: AssetDimensionSchema.optional(),\n aspect: AssetAspectSchema.optional(),\n});\n\n// ============================================================================\n// Asset — the UNIFIED asset type\n// ============================================================================\n\n/**\n * The single asset type: a `SemanticAssetRef` (role/dimension/animations/aspect/style)\n * WITH its resolved URL folded in. Used everywhere an asset is referenced — a lolo\n * board `assetManifest` (`Map string Asset`), every `@almadar/ui` game prop, the\n * asset-workflow's resolved/pool assets, and the inspector picker. Replaces the bare\n * `AssetUrl`-string asset field so the render metadata travels WITH the asset (no\n * pixel-dimension or filename heuristics needed to know sheet-vs-frame / 2d-vs-3d).\n */\nexport interface Asset extends SemanticAssetRef {\n /** The resolved asset URL. When `atlas`/`sprite` are set this is the SHEET png; otherwise a standalone image. */\n url: AssetUrl;\n /**\n * Optional atlas JSON (a `TextureAtlas` or `Tilesheet`) that slices `url`.\n * When present with `sprite`, the renderer fetches sheet + atlas once and\n * blits one sub-rect instead of loading a standalone PNG. Absent → `url` is\n * a plain whole-image asset (the existing, non-atlas path).\n */\n atlas?: AssetUrl;\n /**\n * The sub-texture selector within `atlas`: a `SubTexture` name for a\n * `TextureAtlas` (e.g. `\"grass.png\"`), or a `\"col,row\"`/flat index for a\n * `Tilesheet`. Only meaningful alongside `atlas`.\n */\n sprite?: string;\n /** Optional display name (inspector picker). */\n name?: string;\n /** Optional thumbnail URL (inspector picker grid). */\n thumbnailUrl?: string;\n}\n\nexport const AssetSchema = SemanticAssetRefSchema.extend({\n url: z.string(),\n atlas: z.string().optional(),\n sprite: z.string().optional(),\n name: z.string().optional(),\n thumbnailUrl: z.string().optional(),\n});\n\n// ============================================================================\n// Asset Catalog\n// ============================================================================\n\n/**\n * Single browsable asset in the inspector picker catalog.\n * Backs the asset/icon pickers — a flat list the inspector renders for\n * the user to choose from when a config field's type is `'asset'`.\n */\nexport interface AssetCatalogEntry {\n /** Resolvable URL to the asset. */\n url: string;\n /** Display name for the asset. */\n name: string;\n /** Grouping category within the catalog. */\n category: string;\n /** Asset kind the picker dispatches on. */\n kind: 'image' | 'spritesheet' | 'audio' | 'scene' | 'portrait' | 'model' | 'other';\n /** Optional thumbnail URL for grid previews. */\n thumbnailUrl?: string;\n /** 2D sprite vs 3D model — the asset's actual rendering dimension. */\n dimension?: AssetDimension;\n /** The asset's actual rendering aspect ratio. */\n aspect?: AssetAspect;\n}\n\nexport const AssetCatalogEntrySchema = z.object({\n url: z.string(),\n name: z.string(),\n category: z.string(),\n kind: z.enum(['image', 'spritesheet', 'audio', 'scene', 'portrait', 'model', 'other']),\n thumbnailUrl: z.string().optional(),\n dimension: AssetDimensionSchema.optional(),\n aspect: AssetAspectSchema.optional(),\n});\n\n/**\n * Flat list of browsable assets surfaced by the inspector pickers.\n */\nexport type AssetCatalog = AssetCatalogEntry[];\n\nexport const AssetCatalogSchema = z.array(AssetCatalogEntrySchema);\n\n/**\n * Asset-reference URL marker. A plain alias over `string` — the value is a\n * resolvable asset URL — but the named type lets the pattern-sync tool\n * (`tools/almadar-pattern-sync/parser.ts`) detect a component prop as an asset\n * field (tagged `asset`) the same way `EventKey`/`LucideIcon` are detected by\n * type identity. Components annotate image/url props as `AssetUrl` (`src`,\n * `backgroundImage`, `avatar`, …); the generator emits a `string` config knob\n * declared as the `asset` config type, which the property inspector dispatches\n * an AssetPicker on. Not branded — asset urls originate from user data, so cast\n * friction would buy nothing; the value is the marker the tool finds.\n */\nexport type AssetUrl = string;\n\n// ============================================================================\n// ScenePos — neutral scene coordinate\n// ============================================================================\n\n/**\n * A neutral position in scene space: 2D (`x`,`y`) or optionally 3D (`x`,`y`,`z`).\n * The single coordinate type shared by every drawable descriptor and camera pose\n * across the 2D and 3D canvas hosts, so a scene composes from the same `{x,y,z?}`\n * regardless of projection or painter. Logical, not pixel — the host's projector\n * maps a `ScenePos` to screen space.\n */\nexport interface ScenePos {\n x: number;\n y: number;\n z?: number;\n}\n\nexport const ScenePosSchema = z.object({\n x: z.number(),\n y: z.number(),\n z: z.number().optional(),\n});\n\n// ============================================================================\n// Camera — neutral camera pose shared by the 2D and 3D canvas hosts\n// ============================================================================\n\n/**\n * Camera behaviors, unifying the former per-host vocab (2D `camera` string +\n * 3D `cameraMode`). `isometric`/`top-down` are fixed framings; `follow`/`chase`\n * track a target; `perspective` is the 3D dramatic framing.\n */\nexport const CAMERA_MODES = ['isometric', 'perspective', 'top-down', 'follow', 'chase'] as const;\n\nexport type CameraMode = (typeof CAMERA_MODES)[number];\n\nexport const CameraModeSchema = z.enum(CAMERA_MODES);\n\n/**\n * A neutral camera pose shared by the 2D and 3D canvas hosts, so `type: canvas`\n * carries one camera object regardless of painter. `pos`/`target` are `ScenePos`\n * (logical scene space, not pixels); `zoom` scales the view (the former `scale`);\n * `fov` is the 3D field of view; `mode` selects the framing/tracking behavior.\n * Every field is optional — an omitted camera means the host's default framing.\n */\nexport interface Camera {\n pos?: ScenePos;\n target?: ScenePos;\n zoom?: number;\n fov?: number;\n mode?: CameraMode;\n}\n\nexport const CameraSchema = z.object({\n pos: ScenePosSchema.optional(),\n target: ScenePosSchema.optional(),\n zoom: z.number().optional(),\n fov: z.number().optional(),\n mode: CameraModeSchema.optional(),\n});\n\n// ============================================================================\n// Type Exports\n// ============================================================================\n\nexport type SemanticAssetRefInput = z.input<typeof SemanticAssetRefSchema>;\nexport type AnimationDefInput = z.input<typeof AnimationDefSchema>;\nexport type AssetCatalogEntryInput = z.input<typeof AssetCatalogEntrySchema>;\nexport type SpriteSheetAtlasInput = z.input<typeof SpriteSheetAtlasSchema>;\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Creates a semantic asset key from role and category.\n * \n * Generates a unique asset identifier by combining role and category\n * with a colon separator. Used for asset management and lookup.\n * \n * @param {EntityRole} role - Entity role (e.g., 'player', 'enemy')\n * @param {string} category - Asset category (e.g., 'sprite', 'animation')\n * @returns {string} Asset key in format 'role:category'\n * \n * @example\n * createAssetKey('player', 'sprite'); // returns 'player:sprite'\n * createAssetKey('enemy', 'animation'); // returns 'enemy:animation'\n */\nexport function createAssetKey(role: EntityRole, category: string): string {\n return `${role}:${category}`;\n}\n\n/**\n * Parses an asset key into role and category components.\n * \n * Deconstructs an asset key string (format 'role:category') into its\n * constituent parts. Returns null if the key format is invalid.\n * \n * @param {string} key - Asset key in format 'role:category'\n * @returns {{ role: string; category: string } | null} Parsed components or null\n * \n * @example\n * parseAssetKey('player:sprite'); // returns { role: 'player', category: 'sprite' }\n * parseAssetKey('enemy:animation'); // returns { role: 'enemy', category: 'animation' }\n * parseAssetKey('invalid'); // returns null\n */\nexport function parseAssetKey(key: string): { role: string; category: string } | null {\n const parts = key.split(':');\n if (parts.length !== 2) return null;\n return { role: parts[0], category: parts[1] };\n}\n\n/**\n * Gets common animations for an entity role.\n * \n * Returns an array of default animation names appropriate for the\n * specified entity role. Used for asset configuration and validation.\n * \n * @param {EntityRole} role - Entity role\n * @returns {string[]} Array of default animation names\n * \n * @example\n * getDefaultAnimationsForRole('player'); // returns ['idle', 'run', 'jump', 'fall', 'attack', 'hurt', 'die']\n * getDefaultAnimationsForRole('enemy'); // returns ['idle', 'walk', 'attack', 'hurt', 'die']\n */\nexport function getDefaultAnimationsForRole(role: EntityRole): string[] {\n switch (role) {\n case 'player':\n return ['idle', 'run', 'jump', 'fall', 'attack', 'hurt', 'die'];\n case 'enemy':\n return ['idle', 'walk', 'attack', 'hurt', 'die'];\n case 'npc':\n return ['idle', 'walk', 'talk'];\n case 'item':\n return ['idle', 'collected'];\n case 'tile':\n return ['static'];\n case 'projectile':\n return ['fly', 'hit', 'expire'];\n case 'effect':\n return ['play'];\n case 'ui':\n return ['normal', 'hover', 'pressed', 'disabled'];\n case 'decoration':\n return ['idle'];\n case 'vehicle':\n return ['idle', 'move', 'brake'];\n default:\n return ['idle'];\n }\n}\n\n/**\n * Validates that an asset reference has required animations.\n * \n * Checks if an asset reference contains all required animations.\n * Returns an error message if validation fails, or null if valid.\n * \n * @param {SemanticAssetRef} assetRef - Asset reference to validate\n * @param {string[]} requiredAnimations - Required animation names\n * @returns {string | null} Error message or null if valid\n * \n * @example\n * validateAssetAnimations(assetRef, ['idle', 'run']); // returns null if valid\n * validateAssetAnimations(assetRef, ['missing-animation']); // returns error message\n */\nexport function validateAssetAnimations(\n assetRef: SemanticAssetRef,\n requiredAnimations: string[]\n): { valid: boolean; missing: string[] } {\n const provided = assetRef.animations || [];\n const missing = requiredAnimations.filter((anim) => !provided.includes(anim));\n return { valid: missing.length === 0, missing };\n}\n","/**\n * S-Expression Types\n *\n * Defines the S-Expression type system for guards, effects, and computed values.\n * S-expressions are JSON arrays where the first element is an operator string.\n *\n * @example\n * // Guard: health > 0\n * [\">\", \"@entity.health\", 0]\n *\n * // Effect: set x to x + vx\n * [\"set\", \"@entity.x\", [\"+\", \"@entity.x\", \"@entity.vx\"]]\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\nimport type { RuntimeValue } from './json.js';\n\n// ============================================================================\n// S-Expression Type\n// ============================================================================\n\n/**\n * S-Expression type - recursive structure representing expressions.\n *\n * An S-expression is either:\n * - A literal value (string, number, boolean, null)\n * - An object literal (for payload data, props, etc.)\n * - A binding reference (string starting with @)\n * - A call expression (array with operator as first element)\n */\n/** Object literal branch of an S-expression atom (payload data, props, etc.). */\nexport interface SExprObject {\n [key: string]: SExpr;\n}\nexport type SExprAtom = string | number | boolean | null | SExprObject;\nexport type SExpr = SExprAtom | SExpr[];\n\n/**\n * Expression type - S-expressions only.\n * Used for guards, computed values, and effect expressions.\n *\n * NOTE: Legacy string format is no longer supported.\n * All expressions must be S-expression arrays.\n */\nexport type Expression = SExpr;\n\n// ============================================================================\n// S-Expression Schema (Zod)\n// ============================================================================\n\n/**\n * Recursive schema for s-expr-shaped DATA in literal positions (object\n * values, effect arguments). Unlike `SExprSchema`, arrays may be empty or\n * non-operator-headed — literal data lists (`children: []`, `tiles: [...]`)\n * are valid here; only call positions get the operator-head refine.\n */\nexport const SExprDataSchema: z.ZodType<SExpr> = z.lazy(() =>\n z.union([SExprAtomSchema, z.array(SExprDataSchema)]),\n);\n\n/**\n * Schema for atomic S-expression values (non-array)\n * Includes objects for payload data, props, etc.\n */\nexport const SExprAtomSchema: z.ZodType<SExprAtom> = z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.record(SExprDataSchema), // Objects for payload data\n]);\n\n/**\n * Recursive schema for S-expressions.\n * Validates that arrays have at least one element and first element is a string (operator).\n */\nexport const SExprSchema: z.ZodType<SExpr> = z.lazy(() =>\n z.union([\n SExprAtomSchema,\n z\n .array(z.lazy(() => SExprSchema))\n .min(1)\n .refine(\n (arr) => typeof arr[0] === 'string',\n { message: 'S-expression array must have a string operator as first element' }\n ),\n ])\n);\n\n/**\n * Schema for Expression type - S-expressions only.\n * S-expressions are arrays with operator as first element.\n *\n * NOTE: Legacy string format is no longer supported.\n */\nexport const ExpressionSchema: z.ZodType<Expression> = SExprSchema;\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\n/**\n * Type guard for S-expression detection.\n * 100% reliable - structural check, no regex or keyword matching.\n *\n * @param value - Value to check\n * @returns true if value is an S-expression (array with string operator)\n */\nexport function isSExpr(value: RuntimeValue): value is SExpr[] {\n return (\n Array.isArray(value) &&\n value.length > 0 &&\n typeof value[0] === 'string'\n );\n}\n\n/**\n * Type guard for S-expression atoms (non-array values).\n * \n * Validates that a value is an S-expression atom (literal value).\n * Includes null, strings, numbers, booleans, and objects. Used to\n * distinguish atomic values from S-expression calls (arrays).\n * \n * @param {RuntimeValue} value - Value to check\n * @returns {boolean} True if value is an S-expression atom, false otherwise\n *\n * @example\n * isSExprAtom('hello'); // returns true\n * isSExprAtom(42); // returns true\n * isSExprAtom(null); // returns true\n * isSExprAtom({ key: 'value' }); // returns true\n * isSExprAtom(['+', 1, 2]); // returns false\n */\nexport function isSExprAtom(value: RuntimeValue): value is SExprAtom {\n if (value === null) return true;\n if (Array.isArray(value)) return false;\n const type = typeof value;\n return type === 'string' || type === 'number' || type === 'boolean' || type === 'object';\n}\n\n/**\n * Checks if a value is a binding reference.\n * \n * Validates that a string is a binding reference (starts with @).\n * Bindings reference runtime values like @entity.health, @payload.amount, @now.\n * Used for identifying bindings in S-expressions and validation.\n * \n * @param {RuntimeValue} value - Value to check\n * @returns {boolean} True if value is a binding reference, false otherwise\n *\n * @example\n * isBinding('@entity.health'); // returns true\n * isBinding('@payload.amount'); // returns true\n * isBinding('not-a-binding'); // returns false\n * isBinding(123); // returns false\n */\nexport function isBinding(value: RuntimeValue): value is string {\n return typeof value === 'string' && value.startsWith('@');\n}\n\n/**\n * Checks if a value is a valid S-expression call (array with operator).\n * \n * Alias for isSExpr() - validates S-expression call structure.\n * Used to distinguish between S-expression calls and atom values.\n * \n * @param {RuntimeValue} value - Value to check\n * @returns {boolean} True if value is a valid S-expression call, false otherwise\n *\n * @example\n * isSExprCall(['+', 1, 2]); // returns true\n * isSExprCall(['set', '@entity.health', 100]); // returns true\n * isSExprCall('not-a-call'); // returns false\n */\nexport function isSExprCall(value: RuntimeValue): value is SExpr[] {\n return isSExpr(value);\n}\n\n// ============================================================================\n// Binding Parsing\n// ============================================================================\n\n/**\n * Parsed binding reference\n */\nexport interface ParsedBinding {\n /** Type of binding: core (@entity, @payload, @state, @now) or entity (@EntityName) */\n type: 'core' | 'entity';\n /** The root binding name (entity, payload, state, now, or EntityName) */\n root: string;\n /** Path segments after the root (e.g., ['health'] for @entity.health) */\n path: string[];\n /** Full original binding string */\n original: string;\n}\n\n/**\n * Core bindings that are always available.\n * Phase 4.5 adds: config, computed, trait (for behavior support).\n * `user` is the authenticated user / agent context (see binding.ts) and is\n * read-only in guards/effects/ticks — atoms reference `@user.id` and\n * `@user.role` for ownership / role-based gating.\n * `callsitePayload` is the call-site-captured event payload emitted by the\n * compiler's inline-trait hoisting; the runtime BindingResolver resolves it\n * at the composing effect.\n */\nexport const CORE_BINDINGS = ['entity', 'payload', 'state', 'now', 'config', 'computed', 'trait', 'user', 'callsitePayload'] as const;\nexport type CoreBinding = (typeof CORE_BINDINGS)[number];\n\n/**\n * Parses a binding reference into its components.\n * \n * Deconstructs a binding string (e.g., '@entity.health') into its constituent\n * parts: type, root, path, and original string. Does NOT use regex - uses\n * structured string operations for reliability and maintainability.\n * \n * @param {string} binding - Binding string starting with @\n * @returns {ParsedBinding | null} Parsed binding object or null if invalid\n * \n * @example\n * parseBinding('@entity.health'); // returns { type: 'core', root: 'entity', path: ['health'], original: '@entity.health' }\n * parseBinding('@User.name'); // returns { type: 'entity', root: 'User', path: ['name'], original: '@User.name' }\n * parseBinding('not-a-binding'); // returns null\n */\nexport function parseBinding(binding: string): ParsedBinding | null {\n if (!binding.startsWith('@')) {\n return null;\n }\n\n // Remove @ prefix\n const withoutPrefix = binding.slice(1);\n\n // Split by dots\n const parts = withoutPrefix.split('.');\n\n if (parts.length === 0 || parts[0] === '') {\n return null;\n }\n\n const root = parts[0];\n const path = parts.slice(1);\n\n // Determine if core binding or entity reference\n const isCore = (CORE_BINDINGS as readonly string[]).includes(root);\n\n return {\n type: isCore ? 'core' : 'entity',\n root,\n path,\n original: binding,\n };\n}\n\n/**\n * Validate a binding reference format.\n *\n * @param binding - Binding string to validate\n * @returns true if valid binding format\n */\nexport function isValidBinding(binding: string): boolean {\n const parsed = parseBinding(binding);\n if (!parsed) return false;\n\n // Core bindings: @entity, @payload, @state, @now (optionally with path)\n // @state and @now don't have paths\n if (parsed.type === 'core') {\n if (parsed.root === 'state' || parsed.root === 'now') {\n return parsed.path.length === 0;\n }\n // @entity and @payload can have paths\n return true;\n }\n\n // Entity bindings: @EntityName.field - must have at least one path segment\n return parsed.path.length > 0;\n}\n\n// ============================================================================\n// S-Expression Utilities\n// ============================================================================\n\n/**\n * Get the operator from an S-expression call.\n *\n * @param expr - S-expression array\n * @returns The operator string or null if not a valid call\n */\nexport function getOperator(expr: SExpr): string | null {\n if (!isSExpr(expr)) return null;\n return expr[0] as string;\n}\n\n/**\n * Get the arguments from an S-expression call.\n *\n * @param expr - S-expression array\n * @returns Array of arguments (empty if not a valid call)\n */\nexport function getArgs(expr: SExpr): SExpr[] {\n if (!isSExpr(expr)) return [];\n return expr.slice(1);\n}\n\n/**\n * Create an S-expression call.\n *\n * @param operator - The operator string\n * @param args - Arguments to the operator\n * @returns S-expression array\n */\nexport function sexpr(operator: string, ...args: SExpr[]): SExpr[] {\n return [operator, ...args];\n}\n\n/**\n * Walk an S-expression tree and apply a visitor function to each node.\n *\n * @param expr - S-expression to walk\n * @param visitor - Function to call on each node\n */\nexport function walkSExpr(\n expr: SExpr,\n visitor: (node: SExpr, parent: SExpr[] | null, index: number) => void,\n parent: SExpr[] | null = null,\n index: number = 0\n): void {\n visitor(expr, parent, index);\n\n if (isSExpr(expr)) {\n for (let i = 0; i < expr.length; i++) {\n walkSExpr(expr[i], visitor, expr, i);\n }\n }\n}\n\n/**\n * Collect all bindings referenced in an S-expression.\n *\n * @param expr - S-expression to analyze\n * @returns Array of binding strings found\n */\nexport function collectBindings(expr: SExpr): string[] {\n const bindings: string[] = [];\n\n walkSExpr(expr, (node) => {\n if (isBinding(node)) {\n bindings.push(node);\n }\n });\n\n return bindings;\n}\n\n// ============================================================================\n// Type Exports\n// ============================================================================\n\nexport type SExprInput = z.input<typeof SExprSchema>;\nexport type ExpressionInput = z.input<typeof ExpressionSchema>;\n\n// ============================================================================\n// Runtime Evaluation Types\n// ============================================================================\n\n/** Evaluation context for guards and s-expressions. Recursive. */\nexport interface EvalContext {\n [key: string]: string | number | boolean | Date | null | string[] | EvalContext | undefined;\n}\n\n/**\n * A single value carried by an event payload field. The top-level payload\n * is always an object; the VALUES in that object can be primitives, nested\n * objects, or arrays of the same. Arrays are allowed so real-world emits\n * like `{ files: [{ name, size, type }, ...] }` or `{ selected: string[] }`\n * are typed natively instead of forcing consumers to wrap at every call.\n *\n * `Date` is included so `EntityRow` (whose values are `FieldValue`, which\n * includes `Date`) is assignable to a payload field without a cast —\n * emitted entity rows flow through the bus without boundary widening.\n */\nexport type EventPayloadValue =\n | string\n | number\n | boolean\n | Date\n | null\n | undefined\n | EventPayload\n | readonly EventPayloadValue[];\n\n/**\n * Typed event payload. Object-shaped so it's assignable to the bus's\n * `EventPayload` parameter without casts.\n */\nexport interface EventPayload {\n [key: string]: EventPayloadValue;\n}\n\n/**\n * Runtime guard for `EventPayloadValue` — narrows interpreter-produced\n * `unknown` values at typed substrate boundaries (e.g. `TraceContext.emit`).\n */\nexport function isEventPayloadValue(value: RuntimeValue): value is EventPayloadValue {\n if (value === null || value === undefined) return true;\n const kind = typeof value;\n if (kind === 'string' || kind === 'number' || kind === 'boolean') return true;\n if (value instanceof Date) return true;\n if (Array.isArray(value)) return value.every((item: RuntimeValue) => isEventPayloadValue(item));\n if (kind === 'object' && value !== null && typeof value === 'object') {\n return Object.values(value).every((item: RuntimeValue) => isEventPayloadValue(item));\n }\n return false;\n}\n\n/**\n * Allowed leaf value for `LogMeta`. Mirrors `EventPayloadValue` shape so\n * the same row/list data flows through logs without manual flattening,\n * with `Error` added since structured logs carry exception detail.\n */\nexport type LogMetaValue =\n | string\n | number\n | boolean\n | Date\n | null\n | undefined\n | Error\n | LogMeta\n | readonly LogMetaValue[];\n\n/** Structured log/event metadata. Recursive to support nested log data. */\nexport interface LogMeta {\n [key: string]: LogMetaValue;\n}\n","/**\n * Entity Types for Orbital Units\n *\n * Defines the OrbitalEntity type - the nucleus of an Orbital Unit.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\nimport type { EntityId } from './identity.js';\nimport { EntityFieldSchema, type EntityField } from './field.js';\nimport { SemanticAssetRefSchema, type SemanticAssetRef } from './asset.js';\nimport { JsonValueSchema, type RuntimeValue } from './json.js';\nimport { SExprSchema, type SExpr } from './expression.js';\n\n// ============================================================================\n// Entity Persistence\n// ============================================================================\n\n/**\n * Entity persistence types.\n *\n * - persistent: Stored in database (has collection)\n * - runtime: Exists only at runtime (not persisted)\n */\nexport type EntityPersistence = 'persistent' | 'runtime';\n\nexport const EntityPersistenceSchema = z.enum([\n 'persistent',\n 'runtime',\n]);\n\n// ============================================================================\n// Orbital Entity\n// ============================================================================\n\n/**\n * OrbitalEntity - the nucleus of an Orbital Unit.\n *\n * This is a simplified entity definition optimized for orbital composition.\n * Collection names are derived automatically from persistence type if not provided.\n */\nexport type OrbitalEntity = {\n /** V4 dual-carry id sibling of `name` — optional until the Phase-7 flip. */\n id?: EntityId;\n\n /** Entity name (PascalCase, e.g., \"Task\", \"User\") */\n name: string;\n\n /** Entity persistence type (defaults to 'persistent' if not specified) */\n persistence?: EntityPersistence;\n\n /** Whether this entity's state is shared across all bound traits (vs per-trait copy). Orthogonal to persistence. */\n shared?: boolean;\n\n /**\n * Whether this entity types the ambient `@user` viewer. Orthogonal to both\n * `persistence` and `shared`: `[persistent: people, identity]` is an\n * app-owned user directory, `[runtime, identity]` the provider-supplied\n * current viewer. At most one per composed program.\n */\n identity?: boolean;\n\n /**\n * `@read` — a per-row predicate (`@entity` = candidate row, `@user` =\n * viewer) ANDed with any call-site `filter:`. The un-bypassable twin of\n * `filter:`, enforced once for every trait that fetches this entity.\n */\n read_policy?: SExpr;\n\n /** `@create` — `@entity` binds the incoming data about to become a row. */\n create_policy?: SExpr;\n\n /** `@update` — `@entity` binds the existing row before mutation. */\n update_policy?: SExpr;\n\n /** `@delete` — same binding shape as `@update`. */\n delete_policy?: SExpr;\n\n /** Collection name (auto-derived if not provided for persistent entities) */\n collection?: string;\n\n /** Entity fields */\n fields: EntityField[];\n\n /** Pre-authored instances (seed data or static reference data) */\n instances?: EntityRow[];\n\n /** Auto-add createdAt/updatedAt timestamps */\n timestamps?: boolean;\n\n /** Soft delete support */\n softDelete?: boolean;\n\n /** Human-readable description */\n description?: string;\n\n /** Visual prompt for AI generation */\n visual_prompt?: string;\n\n /** Semantic asset reference for visual representation (games) */\n assetRef?: SemanticAssetRef;\n};\n\nexport const OrbitalEntitySchema = z.object({\n name: z.string().min(1, 'Entity name is required'),\n persistence: EntityPersistenceSchema.default('persistent'),\n shared: z.boolean().optional(),\n // Must stay in step with the Rust serde field (`EntityDefinition.identity`,\n // orbital-core/src/schema/types.rs). `z.object()` STRIPS unknown keys rather\n // than rejecting them, so a Rust-only field works on the compiled path and\n // silently vanishes on the interpreter path.\n identity: z.boolean().optional(),\n // Same \"must stay in step with Rust serde\" hazard as `identity` above —\n // these four mirror `EntityDefinition.{read,create,update,delete}_policy`.\n // Rust has no `rename_all` on this struct, so the wire key IS snake_case\n // (unlike this file's other camelCase fields, which are Rust-side-absent\n // and so never hit this cross-language constraint — see `visual_prompt`\n // just below for the existing precedent).\n read_policy: SExprSchema.optional(),\n create_policy: SExprSchema.optional(),\n update_policy: SExprSchema.optional(),\n delete_policy: SExprSchema.optional(),\n collection: z.string().optional(),\n fields: z.array(EntityFieldSchema).min(1, 'At least one field is required'),\n instances: z.array(z.record(JsonValueSchema)).optional(),\n timestamps: z.boolean().optional(),\n softDelete: z.boolean().optional(),\n description: z.string().optional(),\n visual_prompt: z.string().optional(),\n assetRef: SemanticAssetRefSchema.optional(),\n});\n\nexport type OrbitalEntityInput = z.input<typeof OrbitalEntitySchema>;\n\n// ============================================================================\n// Type Aliases (for cleaner imports)\n// ============================================================================\n\n/** Alias for OrbitalEntity - preferred name */\nexport type Entity = OrbitalEntity;\n\n/** Alias for OrbitalEntitySchema - preferred name */\nexport const EntitySchema = OrbitalEntitySchema;\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Derives the collection name for a persistent entity.\n * \n * Generates the database collection name by converting the entity name\n * to lowercase and adding an 's' suffix (simple pluralization).\n * Returns undefined for non-persistent (runtime) entities.\n * \n * @param {OrbitalEntity} entity - Entity to derive collection name for\n * @returns {string | undefined} Collection name or undefined for non-persistent entities\n * \n * @example\n * deriveCollection({ name: 'User', persistence: 'persistent' }); // returns 'users'\n * deriveCollection({ name: 'Task', persistence: 'runtime' }); // returns undefined\n */\nexport function deriveCollection(entity: OrbitalEntity): string | undefined {\n if (entity.persistence !== 'persistent') {\n return undefined;\n }\n // Lowercase + 's' suffix (simple pluralization)\n return entity.name.toLowerCase() + 's';\n}\n\n/**\n * Checks if an entity is runtime-only (not persisted).\n * \n * Type guard to determine if an entity exists only at runtime\n * and is not stored in the database.\n * \n * @param {OrbitalEntity} entity - Entity to check\n * @returns {boolean} True if entity is runtime-only, false otherwise\n * \n * @example\n * isRuntimeEntity({ persistence: 'runtime' }); // returns true\n * isRuntimeEntity({ persistence: 'persistent' }); // returns false\n */\nexport function isRuntimeEntity(entity: OrbitalEntity): boolean {\n return entity.persistence === 'runtime';\n}\n\n/**\n * Checks whether an entity's persistence mode allows `persistence` /\n * `collection` overrides at the factory call site.\n *\n * Only `persistent` entities (explicit or default) support these overrides.\n * Runtime entities are fixed; callers must not expose `persistence` or\n * `collection` params for them.\n *\n * @param persistence - The entity persistence mode (undefined = default persistent)\n * @returns True when overrides are allowed, false otherwise\n *\n * @example\n * persistenceModeAllowsOverrides('persistent'); // returns true\n * persistenceModeAllowsOverrides('runtime'); // returns false\n * persistenceModeAllowsOverrides(undefined); // returns true (default persistent)\n */\nexport function persistenceModeAllowsOverrides(\n persistence: EntityPersistence | undefined,\n): boolean {\n return persistence === 'persistent' || persistence === undefined;\n}\n\n// ============================================================================\n// Entity Instance Data (Runtime)\n// ============================================================================\n\n/**\n * A single field value at runtime.\n * Union of all possible types from FieldType: string, number, boolean, date, array, nested.\n * The nested-record branch's index signature tolerates `undefined` so that\n * TypeScript optional properties (`x?: string`, carrying `string | undefined`)\n * on EntityRow extenders typecheck without ceremony. At JSON serialization\n * time `undefined` is equivalent to \"key absent\" and never appears on the\n * wire; the inclusion here is a pure type-surface accommodation.\n */\nexport type FieldValue = string | number | boolean | Date | null | string[] | FieldValue[] | { [key: string]: FieldValue | undefined };\n\n/**\n * Runtime guard for `FieldValue` — narrows interpreter-produced `unknown`\n * values at typed substrate boundaries (e.g. `IntegrationContext.http` body).\n */\nexport function isFieldValue(value: RuntimeValue): value is FieldValue {\n if (value === null) return true;\n const kind = typeof value;\n if (kind === 'string' || kind === 'number' || kind === 'boolean') return true;\n if (value instanceof Date) return true;\n if (Array.isArray(value)) return value.every((item: RuntimeValue) => isFieldValue(item));\n if (kind === 'object' && value !== null && typeof value === 'object') {\n return Object.values(value).every((item: RuntimeValue) => item === undefined || isFieldValue(item));\n }\n return false;\n}\n\n/**\n * One instance of an entity with actual field values.\n * The shape is determined by the Entity definition at schema time.\n *\n * @example\n * // Entity defines: Patient { fullName: string, age: number, active: boolean }\n * // EntityRow is: { id: \"p1\", fullName: \"Sarah\", age: 34, active: true }\n */\nexport type EntityRow = { id?: string } & Record<string, FieldValue | undefined>;\n\n/**\n * A field-TYPED `EntityRow` — the SINGLE entity type, refined with a concrete\n * field SHAPE `S`. Non-optional members of `S` are REQUIRED, each with its real\n * type; the result stays `& EntityRow`, so the index signature is intact and\n * every other field is still field-open — any domain entity that provides those\n * fields satisfies it.\n *\n * One declaration, two jobs: (1) TypeScript enforces the bound entity has the\n * fields WITH their types (a behavior binding a thinner/mistyped entity fails to\n * typecheck); and (2) pattern-sync reads the same type and writes the entity\n * prop's field shape (`properties` + `requiredFields`) onto the registry, so\n * lolo-ui emits a COMPLETE `entity { … }` (every field, typed + demo-seeded) and\n * the `ORB_X_ENTITY_PROP_CONTRACT` validator rejects an incompatible bind at\n * `orbital validate`. (A raw `EntityRow & { rating: number }` intersection is\n * equivalent for one-off shapes.)\n *\n * @example\n * // HeroOrganism renders entity.title / entity.subtitle:\n * entity?: EntityWith<{ title: string; subtitle?: string }>;\n * // entity.title → string (required)\n * // entity.subtitle → string | undefined (optional)\n * // entity.other → FieldValue | undefined (still field-open)\n */\n// `S extends object` (not `Record<string, FieldValue>`) so a plain `interface`\n// row shape satisfies it — interfaces lack the implicit index signature `Record`\n// requires. FieldValue-compatibility is still enforced structurally: `& EntityRow`\n// intersects every field with the `FieldValue | undefined` index signature, so a\n// non-FieldValue field (e.g. a React `LucideIcon`) collapses to `never` at use.\nexport type EntityWith<S extends object> = EntityRow & S;\n\n/**\n * Collection of entity instances keyed by entity name.\n * Used by OrbPreview mockData, OrbitalServerRuntime state, data grids, etc.\n *\n * @example\n * const data: EntityData = {\n * Patient: [{ id: \"1\", fullName: \"Sarah\", age: 34 }],\n * QueueEntry: [{ id: \"1\", patientName: \"Sarah\", waitMinutes: 12 }],\n * };\n */\nexport type EntityData = Record<string, EntityRow[]>;\n","/**\n * Effect Types (Self-Contained)\n *\n * Defines effect types for trait transitions and ticks.\n * Effects are S-expressions (arrays) that describe actions to perform.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\nimport { type SExpr, type Expression, type EventPayload, SExprDataSchema } from './expression.js';\nimport type { RuntimeValue } from './json.js';\nimport { type ServiceParams } from './service.js';\nimport { type EntityRow } from './entity.js';\n\n// ============================================================================\n// UI Slots\n// ============================================================================\n\n/**\n * Known UI slots where content can be rendered\n */\nexport const UI_SLOTS = [\n // App slots\n 'main',\n 'sidebar',\n 'modal',\n 'drawer',\n 'overlay',\n 'center',\n 'toast',\n 'floating',\n 'system', // For invisible system components (InputListener, CollisionDetector)\n 'content',\n 'screen',\n // Game HUD slots\n 'hud',\n 'hud-top',\n 'hud-bottom',\n 'hud.health',\n 'hud.score',\n 'hud.inventory',\n 'hud.stamina',\n // Game overlay slots\n 'overlay.inventory',\n 'overlay.dialogue',\n 'overlay.menu',\n 'overlay.pause',\n] as const;\n\nexport type UISlot = (typeof UI_SLOTS)[number];\n\nexport const UISlotSchema = z.enum(UI_SLOTS);\n\n// ============================================================================\n// Pattern Config (for render-ui effects)\n// ============================================================================\n\n// Import pattern types for local use and re-export for consumers\nimport type {\n PatternType,\n PatternConfig,\n PatternProps,\n PatternPropsMap,\n AnyPatternConfig,\n} from '../patterns/index.js';\n\n/**\n * Type-safe pattern configuration for render-ui effects.\n *\n * Re-exported from @almadar/patterns. Generated from patterns-registry.json.\n *\n * @example\n * // Type-safe with specific pattern type\n * const config: PatternConfig<'entity-table'> = {\n * patternType: 'entity-table',\n * columns: ['name', 'email'], // ✅ Required prop\n * entity: 'User',\n * };\n *\n * // Error: Property 'columns' is missing (required prop)\n * const bad: PatternConfig<'entity-table'> = { patternType: 'entity-table' };\n *\n * // Error: 'fake-pattern' is not assignable to PatternType\n * const invalid: PatternConfig = { patternType: 'fake-pattern' };\n */\nexport type {\n PatternType,\n PatternConfig,\n PatternProps,\n PatternPropsMap,\n AnyPatternConfig,\n};\n\n// ============================================================================\n// Service Config (for call-service effects)\n// ============================================================================\n\n/**\n * Configuration extracted from call-service effects\n */\nexport type CallServiceConfig = {\n service: string;\n action: string;\n endpoint?: string;\n method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n params?: ServiceParams;\n onSuccess?: string;\n onError?: string;\n};\n\n// ============================================================================\n// Typed Effect Tuples\n// ============================================================================\n\n/**\n * A binding reference to a render tree stored elsewhere — a trait `config`\n * knob or a payload field — e.g. `\"@config.bodyContent\"`. Resolved to a pattern\n * node at render time. This is how an atom renders a tree that contains data\n * bindings (`entity: \"@payload.data\"`, `fields: \"@config.fields\"`): the tree is\n * a permissive `TraitConfigValue` stored in `config` (a binding string is not a\n * valid `AnyPatternConfig` prop value), and the render-ui effect points at it.\n * Worked example: `std-browse`'s loaded transition is `['render-ui', 'main',\n * '@config.bodyContent']`. The Rust validator accepts this form; this variant\n * lets the TS effect type express it.\n */\nexport type RenderBinding = `@${string}`;\n\n/**\n * Render UI effect - displays a pattern in a UI slot.\n * @example ['render-ui', 'main', { patternType: 'entity-table', columns: ['name'] }]\n * @example ['render-ui', 'main', '@config.bodyContent'] // a {@link RenderBinding} target\n */\nexport type RenderUIEffect =\n | ['render-ui', UISlot, AnyPatternConfig]\n | ['render-ui', UISlot, AnyPatternConfig, ResolvedPatternProps]\n | ['render-ui', UISlot, RenderBinding]\n | ['render-ui', UISlot, null];\n\n/**\n * Lambda expression for per-item rendering in data-grid/data-list.\n * The compiler generates: {(paramName: Record<string, unknown>) => (<>JSX</>)}\n * where @{paramName}.field bindings reference the current iteration item.\n *\n * @example [\"fn\", \"item\", { \"type\": \"stack\", \"children\": [{ \"type\": \"typography\", \"content\": \"@item.title\" }] }]\n */\nexport type RenderItemLambda = ['fn', string, AnyPatternConfig];\n\n/**\n * Dynamic-collection children entry: renders one child per item of a collection\n * expression, authored inline in a `children:` position and kept verbatim as IR\n * (no new node kind). The collection expression is an {@link SExpr} evaluated at\n * render time; the {@link RenderItemLambda} body is instantiated per item with\n * the lambda param bound as an `@item`-scope binding. Both execution paths lower\n * onto the one lambda + `@item` + splice machinery.\n *\n * @example [\"array/map\", \"@entity.tasks\", [\"fn\", \"item\", { \"type\": \"typography\", \"content\": \"@item.title\" }]]\n */\nexport type RenderChildrenMap = ['array/map', SExpr, RenderItemLambda];\n\n/**\n * Navigate effect - navigates to an internal page path or an external URL.\n * @example ['navigate', '/tasks'] or ['navigate', '/tasks/:id', { id: '123' }]\n * @example ['navigate', 'https://example.com']\n */\nexport type NavigateEffect =\n | ['navigate', string | SExpr]\n | ['navigate', string | SExpr, Record<string, string>];\n\n/**\n * Emit effect - emits an event, optionally with payload.\n * @example ['emit', 'SAVE'] or ['emit', 'PLAYER_DIED', { playerId: '@entity.id' }]\n * @example ['emit', 'FILTER_CHANGED', '@entity.filters']\n */\nexport type EmitEffect = ['emit', string] | ['emit', string, EventPayload | string];\n\n/**\n * `emit:` config block attached to async / reactive data operators.\n *\n * Each key names an event the runtime should fire on the bus when the\n * effect reaches the corresponding lifecycle point. The set of keys an\n * operator actually supports is enforced by the compiler validator:\n *\n * | Operator | Supported keys |\n * |------------------|---------------------------|\n * | `fetch` | `success`, `failure` |\n * | `persist` | `success`, `failure` |\n * | `call-service` | `success`, `failure` |\n * | `set` | `success` |\n * | `ref` | `on_change`, `failure` |\n * | `os/watch-*` | `on_message`, `failure` |\n *\n * Payload convention:\n * - `success` / `on_change` → the effect's result (fetched entity, new value)\n * - `failure` → `{ error: string, code?: string }`\n * - `on_message` → the incoming message (os/watch-* streams)\n *\n * See `docs/Almadar_Std_Gaps.md` §3.1 for the close-the-circuit design.\n */\nexport interface EmitConfig {\n /** Fires after a one-shot async effect resolves successfully. */\n success?: string;\n /** Fires when the effect throws; payload is `{ error: string }`. */\n failure?: string;\n /** Reactive-subscription event (per update for `ref`). */\n on_change?: string;\n /** Per-event fire for `os/watch-*` streams. */\n on_message?: string;\n}\n\n/**\n * Set effect - sets a binding to a value.\n *\n * Two forms are supported to match the runtime's `set` handler signature\n * `(targetId, field, value)`:\n *\n * - 3-element binding form (legacy / std behaviors): ['set', '@entity.field', value]\n * - 4-element target form (canonical runtime): ['set', entityId, fieldName, value]\n *\n * The 4-element form is what `OrbitalServerRuntime`'s set handler\n * dispatches directly (`update(entityType, targetId, { field: value })`).\n * Prefer the 4-element form when authoring schemas in TypeScript that\n * load directly into the runtime.\n *\n * @example ['set', '@entity.health', 100] // 3-element\n * @example ['set', '@entity.id', 'health', 100] // 4-element\n * @example ['set', '@entity.id', 'count', ['+', '@entity.count', 1]]\n */\nexport type SetEffect =\n | ['set', string, SExpr]\n | ['set', string, string, SExpr];\n\n/**\n * Trailing config object on persist effects. When present, it carries the\n * `emit` map specifying which events to fire on persist success/failure.\n * Mirrors what the runtime's `EffectExecutor` reads at the 5th tuple\n * position. See `(persist create Entity @payload.data { emit: { success:\n * \"Saved\", failure: \"SaveFailed\" } })` in `.lolo` source.\n */\nexport type PersistEmitConfig = {\n emit?: { success?: string; failure?: string };\n};\n\n/**\n * Persist effect data argument: an entity row literal (field map), a\n * binding string referencing a row in scope (e.g. `@payload.data`,\n * `@entity`), or an expression form that evaluates to a row (e.g.\n * `[\"object/merge\", \"@payload.data\", { sender: \"@user.id\" }]`). At\n * runtime, binding strings and expressions resolve to `EntityRow` values\n * before the persist op runs — both paths evaluate the expression first.\n */\nexport type PersistData = EntityRow | string | SExpr[];\n\n/**\n * Persist effect - creates, updates, deletes, or clears entities.\n *\n * Each operation accepts an optional trailing `PersistEmitConfig` so the\n * runtime can fire success / failure events when the operation completes.\n *\n * @example ['persist', 'create', 'Task', { title: '@payload.title' }]\n * @example ['persist', 'update', '@entity.entityType', '@payload.data']\n * @example ['persist', 'create', 'Task', '@payload.data', { emit: { success: 'TaskCreated' } }]\n */\nexport type PersistEffect =\n | ['persist', 'create', string, PersistData]\n | ['persist', 'create', string, PersistData, PersistEmitConfig]\n | ['persist', 'update', string, PersistData]\n | ['persist', 'update', string, PersistData, PersistEmitConfig]\n | ['persist', 'delete', string]\n | ['persist', 'delete', string, PersistData]\n | ['persist', 'delete', string, PersistData, PersistEmitConfig]\n | ['persist', 'clear', string]\n | ['persist', 'clear', string, PersistData]\n | ['persist', 'clear', string, PersistData, PersistEmitConfig];\n\n/**\n * Call service effect - invokes an external service.\n *\n * Two shapes are accepted:\n *\n * 1. Flat form (what the runtime reads and every .orb file uses):\n * `['call-service', serviceName, action, params?]` — args[0]=service,\n * args[1]=action, args[2]=params. This is the canonical form; the\n * runtime's EffectExecutor decodes exactly these positions.\n *\n * 2. Legacy config-object form (kept for the `callService()` helper):\n * `['call-service', serviceName, CallServiceConfig]` — retained so\n * older call sites using the builder helper continue to typecheck.\n *\n * @example ['call-service', 'llm', 'generate', { userPrompt: '@entity.inputText' }]\n * @example ['call-service', 'llm', 'generate', { userPrompt: '...' }, { emit: { success: 'OK', failure: 'ERR' } }]\n * @example ['call-service', 'WeatherAPI', { service: 'weather', action: 'get', onSuccess: 'OK' }]\n */\nexport type CallServiceEffect =\n | ['call-service', string, string]\n | ['call-service', string, string, ServiceParams]\n | ['call-service', string, string, ServiceParams, PersistEmitConfig]\n | ['call-service', string, CallServiceConfig];\n\n/**\n * Spawn effect - creates a new entity instance (games).\n * @example ['spawn', 'Bullet', { x: '@entity.x', y: '@entity.y' }]\n */\nexport type SpawnEffect = ['spawn', string] | ['spawn', string, EntityRow];\n\n/**\n * Despawn effect - removes an entity instance (games).\n * @example ['despawn', '@entity.id']\n */\nexport type DespawnEffect = ['despawn', string];\n\n/**\n * Do effect - executes multiple effects in sequence.\n * Uses SExpr to allow deeply nested conditionals.\n * @example ['do', ['set', '@entity.x', 0], ['set', '@entity.y', 0]]\n */\nexport type DoEffect = ['do', ...SExpr[]];\n\n/**\n * Notify effect - sends a notification.\n * @example ['notify', 'in_app', 'Task created successfully']\n * @example ['notify', 'in_app', ['str/concat', 'Item: ', '@entity.name']]\n */\nexport type NotifyEffect =\n | ['notify', string, string | SExpr]\n | ['notify', string, string | SExpr, string];\n\n/**\n * Options accepted by `fetch` / `ref` / `deref` effects. Mirrors what\n * `OrbitalServerRuntime`'s fetch handler reads at runtime: `id`, `filter`,\n * `limit`, `offset`, `include`, plus the trailing `emit:` map for\n * success/failure event names.\n */\nexport type FetchOptions = {\n /** Fetch a single entity by ID */\n id?: string;\n /** Filter expression (S-expression) */\n filter?: SExpr;\n /** Maximum number of entities to return */\n limit?: number;\n /** Number of entities to skip */\n offset?: number;\n /** Relations to populate (entity field names) */\n include?: string[];\n /** Lifecycle events to emit on resolve / reject */\n emit?: { success?: string; failure?: string };\n};\n\n/**\n * Fetch effect - retrieves entity data (server-side).\n * @example ['fetch', 'User'] or ['fetch', 'User', { id: '@payload.userId' }]\n */\nexport type FetchEffect = ['fetch', string] | ['fetch', string, FetchOptions];\n\n/**\n * Result returned by a fetch / ref / deref handler.\n *\n * `rows` carries the entity (or entities) that survived `filter` AND\n * pagination (`offset`/`limit`). `total` is the count of rows that\n * matched the filter BEFORE pagination, so paginating consumers can\n * compute `totalPages = ceil(total / pageSize)` without a second\n * round-trip. Single-entity fetches by id return `total: 1` (or `0`\n * if not found, in which case the handler returns `null` instead).\n */\nexport interface FetchResult {\n rows: EntityRow | EntityRow[];\n total: number;\n}\n\n/**\n * If effect - conditional effect execution.\n * Uses SExpr to allow deeply nested conditionals.\n * @example ['if', ['>', '@entity.health', 0], ['emit', 'ALIVE'], ['emit', 'DEAD']]\n */\nexport type IfEffect = ['if', Expression, SExpr] | ['if', Expression, SExpr, SExpr];\n\n/**\n * When effect - conditional effect similar to if but without else.\n * Uses SExpr to allow deeply nested conditionals.\n * @example ['when', ['>', '@entity.health', 0], ['emit', 'ALIVE']]\n */\nexport type WhenEffect = ['when', Expression, SExpr];\n\n/**\n * Let effect - creates local bindings for effects.\n * Uses SExpr to allow deeply nested conditionals.\n * @example ['let', ['temp', ['get', '@payload.value']], ['set', '@entity.value', 'temp']]\n */\nexport type LetEffect = ['let', [string, SExpr][], ...SExpr[]];\n\n/**\n * Log effect - logs a message for debugging.\n * @example ['log', 'User created:', '@entity.name']\n */\nexport type LogEffect = ['log', ...SExpr[]];\n\n/**\n * Wait effect - delays execution.\n * @example ['wait', 1000] - wait 1 second\n */\nexport type WaitEffect = ['wait', number];\n\n// ============================================================================\n// Resource Effects (reactive entity subscriptions and atomic operations)\n// ============================================================================\n\n/**\n * Ref effect - creates a reactive entity subscription.\n * Returns a reactive reference that auto-updates when the entity changes.\n * @example ['ref', '@entity.health'] - reactive subscription to health\n * @example ['ref', 'User', { id: '@payload.userId' }] - reactive ref to specific user\n */\nexport type RefEffect =\n | ['ref', string]\n | ['ref', string, FetchOptions];\n\n/**\n * Deref effect - snapshot read of an entity value.\n * Returns the current value without subscribing to changes.\n * @example ['deref', '@entity.health'] - read current health value\n * @example ['deref', 'User', { id: '@payload.userId' }] - read specific user snapshot\n */\nexport type DerefEffect =\n | ['deref', string]\n | ['deref', string, FetchOptions];\n\n/**\n * Swap! effect - atomic compare-and-swap on an entity field.\n * Only updates if the current value matches the expected value.\n * @example ['swap!', '@entity.health', ['fn', ['old'], ['-', 'old', '@payload.damage']]]\n * @example ['swap!', '@entity.counter', ['+', '@entity.counter', 1]]\n */\nexport type SwapEffect = ['swap!', string, SExpr];\n\n/**\n * Options accepted by `watch` effects. Mirrors what the runtime reads when\n * registering the change callback: `debounce` and the trailing `emit:` map.\n */\nexport type WatchOptions = {\n /** Debounce duration in milliseconds */\n debounce?: number;\n /** Lifecycle events to emit on update / failure */\n emit?: { on_message?: string; failure?: string };\n};\n\n/**\n * Watch effect - registers a callback for entity changes.\n * Emits an event whenever the watched binding changes.\n * @example ['watch', '@entity.health', 'HEALTH_CHANGED']\n * @example ['watch', '@entity.status', 'STATUS_UPDATED', { debounce: 100 }]\n */\nexport type WatchEffect =\n | ['watch', string, string]\n | ['watch', string, string, WatchOptions];\n\n/**\n * Atomic effect - groups multiple effects into an atomic transaction.\n * All effects either succeed together or are rolled back.\n * @example ['atomic', ['set', '@entity.x', 10], ['set', '@entity.y', 20]]\n * @example ['atomic', ['persist', 'update', 'User', { balance: 100 }], ['emit', 'BALANCE_UPDATED']]\n */\nexport type AtomicEffect = ['atomic', ...SExpr[]];\n\n// ============================================================================\n// ML Effects (from almadar-std/modules/nn, tensor, train)\n// ============================================================================\n\n/**\n * One layer in an NN architecture description. The set of valid layer kinds\n * lives in `almadar-std/modules/nn`; here we keep the wire shape generic\n * enough for the cross-package runtime + Python bridge to round-trip.\n */\nexport type NnLayer = {\n type: string;\n [key: string]: string | number | boolean | number[] | string[] | undefined;\n};\n\n/**\n * Hyperparameters for `train` and `evaluate`. Recursive to allow nested\n * optimizer / scheduler config blocks without falling back to `unknown`.\n */\nexport type NnConfig = {\n [key: string]: string | number | boolean | string[] | number[] | NnConfig | undefined;\n};\n\n/**\n * Forward-pass config: `input` is a binding string (`@payload.input`), and\n * `on-complete` names the event to fire when the prediction lands.\n */\nexport type ForwardConfig = {\n architecture: NnLayer[];\n input: string;\n 'on-complete'?: string;\n config?: NnConfig;\n};\n\n/**\n * Training-loop config. `dataset` is a binding string referencing the rows\n * to train on. Optimizer / loss / scheduler land inside `config`.\n */\nexport type TrainConfig = {\n architecture: NnLayer[];\n dataset: string;\n config?: NnConfig;\n 'on-complete'?: string;\n};\n\n/**\n * Evaluation config. `metrics` lists named metrics the Python backend\n * computes (`accuracy`, `precision`, ...).\n */\nexport type EvaluateConfig = {\n architecture: NnLayer[];\n dataset: string;\n metrics: string[];\n config?: NnConfig;\n 'on-complete'?: string;\n};\n\n/**\n * Forward effect - runs a neural network forward pass (Python backend).\n * @example ['forward', 'primary', { architecture: [...], input: '@payload.input', 'on-complete': 'PREDICTION_READY' }]\n */\nexport type ForwardEffect = ['forward', string, ForwardConfig];\n\n/**\n * Train effect - runs a training loop (Python backend).\n * @example ['train', { architecture: [...], dataset: '@entity.data', config: { epochs: 10 }, 'on-complete': 'TRAINING_DONE' }]\n */\nexport type TrainEffect = ['train', TrainConfig];\n\n/**\n * Evaluate effect - runs model evaluation (Python backend).\n * @example ['evaluate', { architecture: [...], dataset: '@entity.testData', metrics: ['accuracy'], 'on-complete': 'EVAL_DONE' }]\n */\nexport type EvaluateEffect = ['evaluate', EvaluateConfig];\n\n/**\n * Checkpoint save effect - saves model weights.\n * @example ['checkpoint/save', '/path/to/model.pt', '@entity.weights']\n */\nexport type CheckpointSaveEffect = ['checkpoint/save', string, SExpr];\n\n/**\n * Checkpoint load effect - loads model weights.\n * @example ['checkpoint/load', '/path/to/model.pt']\n */\nexport type CheckpointLoadEffect = ['checkpoint/load', string];\n\n// ============================================================================\n// Agent Effects (from agent/* operator namespace)\n// ============================================================================\n\n/**\n * Agent effect - invokes an agent/* operator.\n * Covers all 22 operators in the std-agent category.\n * @example ['agent/memorize', 'use data-grid for tables', 'preference']\n * @example ['agent/recall', 'user preferences']\n * @example ['agent/generate', 'Summarize this schema']\n */\nexport type AgentEffect = [`agent/${string}`, ...SExpr[]];\n\n/**\n * OS effect - invokes an os/* operator.\n *\n * Covers reactive subscriptions to OS / network resources:\n * - `os/watch-http`, `os/watch-ws`, `os/watch-sse` — long-lived streams\n * that fire `on_message` / `failure` events through a trailing\n * `EmitConfig` block (see `EmitConfig` for the supported keys).\n * - `os/read-file`, `os/exec`, etc. — one-shot OS operations.\n *\n * @example ['os/watch-http', 'wss://push.example.com', { emit: { on_message: 'PUSH_RECEIVED', failure: 'PUSH_DISCONNECTED' } }]\n * @example ['os/read-file', '/etc/hosts']\n */\nexport type OsEffect = [`os/${string}`, ...SExpr[]];\n\n/**\n * Browser effect - invokes a browser/* device operator (client host path).\n * User-initiated, async, resolves via the standard trailing emit envelope.\n * Concrete operators (browser/open-file-picker, browser/clipboard-read,\n * browser/clipboard-write, browser/geolocation-current) and their arity /\n * payload shapes live in @almadar/std BROWSER_OPERATORS.\n * @example ['browser/open-file-picker', { multiple: false }, { emit: { success: 'FILES_PICKED', failure: 'PICK_CANCELLED' } }]\n */\nexport type BrowserEffect = [`browser/${string}`, ...SExpr[]];\n\n/**\n * LLM effect - invokes an llm/* operator (agent path).\n * @example ['llm/generate', '@entity.request', { emit: { success: 'PLANNED', failure: 'PLAN_FAILED' } }]\n */\nexport type LlmEffect = [`llm/${string}`, ...SExpr[]];\n\n/**\n * Behavior effect - invokes a behavior/* operator (agent path).\n * @example ['behavior/instantiate', '@entity.plan', { emit: { failure: 'BUILD_FAILED' } }]\n */\nexport type BehaviorEffect = [`behavior/${string}`, ...SExpr[]];\n\n/**\n * Validate effect - invokes a validate/* operator (agent path).\n * @example ['validate/validate', '@entity.schema', { emit: { failure: 'INVALID' } }]\n */\nexport type ValidateEffect = [`validate/${string}`, ...SExpr[]];\n\n/**\n * Remaining agent-path operator effects: session/* (workspace session ops),\n * compose/* (schema composition), trace/* (trace emission), memory/*\n * (agent memory), application/* (app lifecycle). Expression-only namespaces\n * (array/, math/, object/, str/, …) are deliberately NOT effect heads.\n * @example ['session/write-spec', '@entity.spec']\n * @example ['compose/compose-all', { emit: { failure: 'COMPOSE_FAILED' } }]\n */\nexport type SessionEffect = [`session/${string}`, ...SExpr[]];\nexport type ComposeEffect = [`compose/${string}`, ...SExpr[]];\nexport type TraceEffect = [`trace/${string}`, ...SExpr[]];\nexport type MemoryEffect = [`memory/${string}`, ...SExpr[]];\nexport type ApplicationEffect = [`application/${string}`, ...SExpr[]];\n\n// ============================================================================\n// Async Effects (from almadar-std/modules/async)\n// ============================================================================\n\n/**\n * Async delay effect - wait then execute effects.\n * @example ['async/delay', 2000, ['emit', 'TIMEOUT']]\n */\nexport type AsyncDelayEffect = ['async/delay', number | string, ...Effect[]];\n\n/**\n * Async debounce effect - debounce then execute effect.\n * @example ['async/debounce', 300, ['emit', 'SEARCH_COMPLETE']]\n * @example ['async/debounce', '@entity.debounceMs', ['emit', 'SEARCH_COMPLETE']]\n */\nexport type AsyncDebounceEffect = ['async/debounce', number | string, SExpr];\n\n/**\n * Async throttle effect - throttle then execute effect.\n * @example ['async/throttle', 100, ['emit', 'SCROLL_HANDLED']]\n * @example ['async/throttle', '@entity.throttleMs', ['emit', 'SCROLL_HANDLED']]\n */\nexport type AsyncThrottleEffect = ['async/throttle', number | string, SExpr];\n\n/**\n * Async interval effect - execute effect at intervals.\n * @example ['async/interval', 1000, ['emit', 'TICK']]\n * @example ['async/interval', '@entity.intervalMs', ['emit', 'POLL_TICK']]\n */\nexport type AsyncIntervalEffect = ['async/interval', number | string, SExpr];\n\n/**\n * Async race effect - first effect to complete wins.\n * @example ['async/race', ['call', 'api1'], ['call', 'api2']]\n */\nexport type AsyncRaceEffect = ['async/race', ...Effect[]];\n\n/**\n * Async all effect - wait for all effects to complete.\n * @example ['async/all', ['call', 'api1'], ['call', 'api2']]\n */\nexport type AsyncAllEffect = ['async/all', ...Effect[]];\n\n/**\n * Async sequence effect - execute effects in sequence.\n * @example ['async/sequence', ['call', 'validate'], ['call', 'save']]\n */\nexport type AsyncSequenceEffect = ['async/sequence', ...Effect[]];\n\n/**\n * Union of all typed effects.\n * Provides compile-time validation for common effect types.\n */\nexport type TypedEffect =\n | RenderUIEffect\n | NavigateEffect\n | EmitEffect\n | SetEffect\n | PersistEffect\n | CallServiceEffect\n | SpawnEffect\n | DespawnEffect\n | DoEffect\n | NotifyEffect\n | FetchEffect\n | IfEffect\n | WhenEffect\n | LetEffect\n | LogEffect\n | WaitEffect\n | RefEffect\n | DerefEffect\n | SwapEffect\n | WatchEffect\n | AtomicEffect\n | AsyncDelayEffect\n | AsyncDebounceEffect\n | AsyncThrottleEffect\n | AsyncIntervalEffect\n | AsyncRaceEffect\n | AsyncAllEffect\n | AsyncSequenceEffect\n | ForwardEffect\n | TrainEffect\n | EvaluateEffect\n | CheckpointSaveEffect\n | CheckpointLoadEffect\n | AgentEffect\n | OsEffect\n | BrowserEffect\n | LlmEffect\n | BehaviorEffect\n | ValidateEffect\n | SessionEffect\n | ComposeEffect\n | TraceEffect\n | MemoryEffect\n | ApplicationEffect;\n\n// ============================================================================\n// Effect Type (Strictly Typed)\n// ============================================================================\n\n/**\n * Effect type - typed S-expression format.\n *\n * Effects are strongly typed tuples that enforce:\n * - Valid effect operators (render-ui, emit, set, persist, navigate, call-service)\n * - Valid UISlots for render-ui\n * - Valid PatternTypes and props for render-ui\n * - Correct argument types for each effect\n *\n * Available typed effects:\n * - RenderUIEffect: ['render-ui', UISlot, PatternConfig]\n * - NavigateEffect: ['navigate', path] or ['navigate', path, params]\n * - EmitEffect: ['emit', eventName] or ['emit', eventName, payload]\n * - SetEffect: ['set', binding, value]\n * - PersistEffect: ['persist', operation, entity, data?]\n * - CallServiceEffect: ['call-service', serviceName, config]\n *\n * @example\n * [\"set\", \"@entity.health\", 100]\n * [\"emit\", \"PLAYER_DIED\", { \"playerId\": \"@entity.id\" }]\n * [\"render-ui\", \"main\", { \"patternType\": \"entity-table\", \"columns\": [\"name\"] }]\n * [\"call-service\", \"WeatherAPI\", { \"action\": \"getWeather\", \"onSuccess\": \"OK\" }]\n * [\"navigate\", \"/tasks\"]\n * [\"persist\", \"create\", \"Task\", { \"title\": \"@payload.title\" }]\n */\nexport type Effect = TypedEffect;\n\n/**\n * Schema for Effect - validates S-expression format. Arguments validate as\n * s-expr-shaped DATA (`SExprDataSchema`) — literal data arrays (empty or\n * non-operator-headed) are valid argument values; the operator-head refine\n * applies to the effect itself, not to every argument.\n */\nexport const EffectSchema = z.array(SExprDataSchema).min(1).refine(\n (arr) => typeof arr[0] === 'string',\n { message: 'Effect must be an S-expression with a string operator as first element' }\n);\n\nexport type EffectInput = z.input<typeof EffectSchema>;\n\n/**\n * Type guard to check if a value is a valid Effect (S-expression).\n * \n * Validates that a value conforms to the Effect structure. Effects are\n * represented as arrays where the first element is a string (effect type)\n * and subsequent elements are parameters. Used for runtime validation\n * of effect structures.\n * \n * @param {RuntimeValue} value - Value to check\n * @returns {boolean} True if value is a valid Effect, false otherwise\n *\n * @example\n * isEffect(['set', '@entity.health', 100]); // returns true\n * isEffect('not-an-effect'); // returns false\n * isEffect([]); // returns false\n */\nexport function isEffect(value: RuntimeValue): value is Effect {\n return Array.isArray(value) && value.length > 0 && typeof value[0] === 'string';\n}\n\n/**\n * Alias for isEffect (for clarity when working with S-expressions)\n */\nexport const isSExprEffect = isEffect;\n\n// ============================================================================\n// Effect Builder Helpers\n// ============================================================================\n\n/**\n * Creates a set effect for state updates.\n * \n * Generates an effect that sets a binding to a value. Used in state\n * machine transitions to update entity fields, UI state, or other\n * mutable data.\n * \n * @param {string} binding - Target binding (e.g., '@entity.health')\n * @param {SExpr} value - Value to set (can be literal or expression)\n * @returns {Effect} Set effect array\n * \n * @example\n * set('@entity.health', 100); // returns [\"set\", \"@entity.health\", 100]\n * set('@state.loading', false); // returns [\"set\", \"@state.loading\", false]\n */\nexport function set(binding: string, value: SExpr): Effect {\n return ['set', binding, value];\n}\n\n/**\n * Creates an emit effect for event dispatching.\n * \n * Generates an effect that emits an event with optional payload.\n * Used in state machine transitions to trigger events that can be\n * handled by other traits, services, or external systems.\n * \n * @param {string} event - Event name to emit\n * @param {EventPayload} [payload] - Optional event payload\n * @returns {Effect} Emit effect array\n * \n * @example\n * emit('PLAYER_DIED', { playerId: '@entity.id' }); // returns [\"emit\", \"PLAYER_DIED\", { playerId: \"@entity.id\" }]\n * emit('GAME_STARTED'); // returns [\"emit\", \"GAME_STARTED\"]\n */\nexport function emit(event: string, payload?: EventPayload): Effect {\n return payload ? ['emit', event, payload] : ['emit', event];\n}\n\n/**\n * Creates a navigation effect for page routing.\n * \n * Generates an effect that navigates to a specified path with optional\n * parameters. Used in state machine transitions to change pages or\n * update URL parameters.\n * \n * @param {string} path - Target path (e.g., '/tasks')\n * @param {Record<string, string>} [params] - Optional URL parameters\n * @returns {NavigateEffect} Navigation effect array\n * \n * @example\n * navigate('/tasks'); // returns [\"navigate\", \"/tasks\"]\n * navigate('/user', { id: '123' }); // returns [\"navigate\", \"/user\", { id: \"123\" }]\n */\nexport function navigate(path: string): NavigateEffect;\nexport function navigate(path: string, params: Record<string, string>): NavigateEffect;\nexport function navigate(path: string, params?: Record<string, string>): NavigateEffect {\n return params ? ['navigate', path, params] : ['navigate', path];\n}\n\n/**\n * Create a render-ui effect\n * @example [\"render-ui\", \"main\", { \"patternType\": \"entity-table\", \"columns\": [\"name\"] }]\n */\nexport function renderUI(\n target: UISlot,\n pattern: AnyPatternConfig\n): RenderUIEffect;\nexport function renderUI(\n target: UISlot,\n pattern: AnyPatternConfig,\n props: ResolvedPatternProps\n): RenderUIEffect;\nexport function renderUI(\n target: UISlot,\n pattern: AnyPatternConfig,\n props?: ResolvedPatternProps\n): RenderUIEffect {\n return props\n ? ['render-ui', target, pattern, props]\n : ['render-ui', target, pattern];\n}\n\n/**\n * Create a persist effect\n * @example [\"persist\", \"create\", \"Task\", { \"title\": \"@payload.title\" }]\n */\nexport function persist(\n action: 'create' | 'update',\n entity: string,\n data: PersistData\n): PersistEffect;\nexport function persist(\n action: 'delete' | 'clear',\n entity: string,\n data?: PersistData\n): PersistEffect;\nexport function persist(\n action: 'create' | 'update' | 'delete' | 'clear',\n entity: string,\n data?: PersistData\n): PersistEffect {\n if (action === 'create' || action === 'update') {\n return ['persist', action, entity, data!] as PersistEffect;\n }\n return data\n ? ['persist', action, entity, data] as PersistEffect\n : ['persist', action, entity] as PersistEffect;\n}\n\n/**\n * Create a call-service effect\n * @example [\"call-service\", \"stripe\", { \"service\": \"stripe\", \"action\": \"charge\", \"onSuccess\": \"OK\", \"onError\": \"ERR\" }]\n */\nexport function callService(\n serviceName: string,\n config: CallServiceConfig\n): CallServiceEffect {\n return ['call-service', serviceName, config];\n}\n\n/**\n * Create a spawn effect (games)\n * @example [\"spawn\", \"Bullet\", { \"x\": \"@entity.x\", \"y\": \"@entity.y\" }]\n */\nexport function spawn(entity: string): SpawnEffect;\nexport function spawn(entity: string, initialState: EntityRow): SpawnEffect;\nexport function spawn(entity: string, initialState?: EntityRow): SpawnEffect {\n return initialState ? ['spawn', entity, initialState] : ['spawn', entity];\n}\n\n/**\n * Create a despawn effect (games)\n * @example [\"despawn\", \"@entity.id\"]\n */\nexport function despawn(entityId: string): DespawnEffect {\n return ['despawn', entityId];\n}\n\n/**\n * Create a do effect (multiple effects)\n * @example [\"do\", [\"set\", \"@entity.x\", 0], [\"set\", \"@entity.y\", 0]]\n */\nexport function doEffects(...effects: SExpr[]): DoEffect {\n return ['do', ...effects];\n}\n\n/**\n * Create a notify effect\n * @example [\"notify\", \"in_app\", \"Task created successfully\"]\n */\nexport function notify(\n channel: 'email' | 'push' | 'sms' | 'in_app',\n message: string\n): NotifyEffect;\nexport function notify(\n channel: 'email' | 'push' | 'sms' | 'in_app',\n message: string,\n recipient: string\n): NotifyEffect;\nexport function notify(\n channel: 'email' | 'push' | 'sms' | 'in_app',\n message: string,\n recipient?: string\n): NotifyEffect {\n return recipient\n ? ['notify', channel, message, recipient]\n : ['notify', channel, message];\n}\n\n/**\n * Create a fetch effect (server-side data retrieval)\n * @example [\"fetch\", \"User\"] - fetch all users\n * @example [\"fetch\", \"User\", { \"id\": \"@payload.userId\" }] - fetch by ID\n * @example [\"fetch\", \"User\", { \"filter\": [\"=\", \"@entity.status\", \"active\"], \"limit\": 10 }]\n */\nexport function fetch(entity: string): FetchEffect;\nexport function fetch(entity: string, options: FetchOptions): FetchEffect;\nexport function fetch(entity: string, options?: FetchOptions): FetchEffect {\n return options ? ['fetch', entity, options] : ['fetch', entity];\n}\n\n// ============================================================================\n// Resource Effect Builder Helpers\n// ============================================================================\n\n/**\n * Create a ref effect (reactive entity subscription).\n *\n * @param {string} binding - Binding or entity name to subscribe to\n * @param {FetchOptions} [selector] - Optional selector for specific entity\n * @returns {RefEffect} Ref effect array\n *\n * @example\n * ref('@entity.health'); // returns [\"ref\", \"@entity.health\"]\n * ref('User', { id: '@payload.userId' }); // returns [\"ref\", \"User\", { id: \"@payload.userId\" }]\n */\nexport function ref(binding: string): RefEffect;\nexport function ref(binding: string, selector: FetchOptions): RefEffect;\nexport function ref(binding: string, selector?: FetchOptions): RefEffect {\n return selector ? ['ref', binding, selector] : ['ref', binding];\n}\n\n/**\n * Create a deref effect (snapshot read).\n *\n * @param {string} binding - Binding or entity name to read\n * @param {FetchOptions} [selector] - Optional selector for specific entity\n * @returns {DerefEffect} Deref effect array\n *\n * @example\n * deref('@entity.health'); // returns [\"deref\", \"@entity.health\"]\n * deref('User', { id: '@payload.userId' }); // returns [\"deref\", \"User\", { id: \"@payload.userId\" }]\n */\nexport function deref(binding: string): DerefEffect;\nexport function deref(binding: string, selector: FetchOptions): DerefEffect;\nexport function deref(binding: string, selector?: FetchOptions): DerefEffect {\n return selector ? ['deref', binding, selector] : ['deref', binding];\n}\n\n/**\n * Create a swap! effect (atomic compare-and-swap).\n *\n * @param {string} binding - Binding to atomically update\n * @param {SExpr} transform - Transformation expression applied to the current value\n * @returns {SwapEffect} Swap effect array\n *\n * @example\n * swap('@entity.counter', ['+', '@entity.counter', 1]);\n * // returns [\"swap!\", \"@entity.counter\", [\"+\", \"@entity.counter\", 1]]\n */\nexport function swap(binding: string, transform: SExpr): SwapEffect {\n return ['swap!', binding, transform];\n}\n\n/**\n * Create a watch effect (entity change callback).\n *\n * @example\n * watch('@entity.health', 'HEALTH_CHANGED');\n * watch('@entity.status', 'STATUS_UPDATED', { debounce: 100 });\n */\nexport function watch(binding: string, event: string): WatchEffect;\nexport function watch(binding: string, event: string, options: WatchOptions): WatchEffect;\nexport function watch(binding: string, event: string, options?: WatchOptions): WatchEffect {\n return options\n ? ['watch', binding, event, options]\n : ['watch', binding, event];\n}\n\n/**\n * Create an atomic effect (transaction group).\n *\n * @param {...SExpr[]} effects - Effects to execute atomically\n * @returns {AtomicEffect} Atomic effect array\n *\n * @example\n * atomic(['set', '@entity.x', 10], ['set', '@entity.y', 20]);\n * // returns [\"atomic\", [\"set\", \"@entity.x\", 10], [\"set\", \"@entity.y\", 20]]\n */\nexport function atomic(...effects: SExpr[]): AtomicEffect {\n return ['atomic', ...effects];\n}\n\n// ============================================================================\n// Runtime Pattern Types\n// ============================================================================\n\n/** Resolved pattern props for render-ui effects at runtime. Recursive for nested pattern configs. */\nexport type ResolvedPatternProps = {\n [prop: string]: string | number | boolean | null | undefined | ResolvedPatternProps | ResolvedPatternProps[];\n};\n\n/** A node in a render-ui effect tree. */\nexport interface RenderUINode {\n type: string;\n props?: ResolvedPatternProps;\n /** Static child nodes and/or dynamic-collection map entries. A\n * {@link RenderChildrenMap} entry expands at render time into resolved\n * `RenderUINode`s, so components always receive a flat, fully-resolved list. */\n children?: Array<RenderUINode | RenderChildrenMap>;\n content?: string;\n entity?: string;\n renderItem?: RenderUINode;\n}\n\n","/**\n * State Machine Types (Self-Contained)\n *\n * Defines state machine types for traits.\n * Copied from schema/state-machine.ts to make orbitals/ self-contained.\n *\n * @packageDocumentation\n */\n\nimport { z } from \"zod\";\nimport type { Effect } from \"./effect.js\";\nimport { EffectSchema } from \"./effect.js\";\nimport type { Expression } from \"./expression.js\";\nimport { ExpressionSchema } from \"./expression.js\";\nimport type { EventId } from \"./identity.js\";\nimport { EventIdSchema } from \"./identity.js\";\n\n// ============================================================================\n// State\n// ============================================================================\n\n/**\n * Represents a state in the state machine\n */\nexport type State = {\n /** State name (unique identifier) */\n name: string;\n /** Whether this is the initial state */\n isInitial?: boolean;\n /** Whether this is a terminal state (no outgoing transitions expected) */\n isTerminal?: boolean;\n /** Whether this is a final state (legacy alias for isTerminal) */\n isFinal?: boolean;\n /** Human-readable description */\n description?: string;\n /** Effect names to run on entry */\n onEntry?: string[];\n /** Effect names to run on exit */\n onExit?: string[];\n};\n\nexport const StateSchema = z.object({\n name: z.string().min(1, \"State name is required\"),\n isInitial: z.boolean().optional(),\n isTerminal: z.boolean().optional(),\n isFinal: z.boolean().optional(),\n description: z.string().optional(),\n onEntry: z.array(z.string()).optional(),\n onExit: z.array(z.string()).optional(),\n});\n\n// ============================================================================\n// Event\n// ============================================================================\n\n/**\n * Payload field definition for events\n */\nexport type PayloadField = {\n name: string;\n /**\n * Field type. Mirrors the Rust validator's acceptance: any non-empty\n * string. Primitives ('string' | 'number' | 'boolean' | 'object' |\n * 'array') are the canonical values; entity-name references like\n * 'CartItem' and array-of-entity references like '[CartItem]' are also\n * valid because the Rust IR's PayloadField.field_type is just a String.\n */\n type: string;\n required?: boolean;\n /** Structured property schema for object-typed payload fields (recursive). */\n properties?: ReadonlyArray<PayloadField>;\n};\n\nexport const PayloadFieldSchema: z.ZodType<PayloadField> = z.object({\n name: z.string().min(1),\n type: z.string().min(1),\n required: z.boolean().optional(),\n properties: z.lazy(() => z.array(PayloadFieldSchema)).optional(),\n});\n\n/**\n * Represents an event that can trigger transitions\n */\nexport type Event = {\n /** Event key (UPPER_SNAKE_CASE) */\n key: string;\n /** V4 dual-carry id sibling of `key` — optional until the Phase-7 flip. */\n id?: EventId;\n /** Human-readable name */\n name: string;\n /** Description (authored `@description` on the emit/listen). */\n description?: string;\n /** User-vocabulary synonyms (comma-separated) — per-event analogue of a\n * field/config `@synonyms`. Feeds the curation event matcher. */\n synonyms?: string;\n /** Authoring tier (`essential`/`customization`/`advanced`/`internal`). */\n tier?: string;\n /** Expected payload structure */\n payloadSchema?: PayloadField[];\n /** Domain vs System classification (optional, for analysis) */\n classification?: \"domain\" | \"system\";\n /** Semantic role of this event (optional, for analysis) */\n semanticRole?: string;\n};\n\nexport const EventSchema = z.object({\n key: z.string().min(1, \"Event key is required\"),\n id: EventIdSchema.optional(),\n name: z.string().min(1, \"Event name is required\"),\n description: z.string().optional(),\n synonyms: z.string().optional(),\n tier: z.string().optional(),\n payloadSchema: z.array(PayloadFieldSchema).optional(),\n classification: z.enum([\"domain\", \"system\"]).optional(),\n semanticRole: z.string().optional(),\n});\n\n// ============================================================================\n// Guard\n// ============================================================================\n\n/**\n * Represents a named guard condition.\n * Expression must be an S-expression.\n *\n * @example\n * {\n * name: \"hasHealth\",\n * expression: [\">\", \"@entity.health\", 0],\n * description: \"Check if entity has health remaining\"\n * }\n */\nexport type Guard = {\n name: string;\n /** Guard expression - S-expression array only */\n expression: Expression;\n description?: string;\n};\n\nexport const GuardSchema = z.object({\n name: z.string().min(1, \"Guard name is required\"),\n expression: ExpressionSchema,\n description: z.string().optional(),\n});\n\n// ============================================================================\n// Transition (Effect imported separately to avoid circular deps)\n// ============================================================================\n\n/**\n * Represents a transition between states.\n * Guards and effects must be S-expressions.\n *\n * @example\n * {\n * from: \"idle\",\n * to: \"running\",\n * event: \"START\",\n * guard: [\">\", \"@entity.fuel\", 0],\n * effects: [\n * [\"set\", \"@entity.status\", \"running\"],\n * [\"emit\", \"ENGINE_STARTED\"]\n * ]\n * }\n */\nexport type Transition = {\n /** Source state name */\n from: string;\n /** Target state name */\n to: string;\n /** Event key that triggers this transition */\n event: string;\n /** V4 dual-carry id sibling of `event` — optional until the Phase-7 flip. */\n eventId?: EventId;\n /** Guard expression - S-expression array */\n guard?: Expression | null;\n /** Effects to execute - S-expression arrays */\n effects?: Effect[];\n /** Description */\n description?: string | null;\n};\n\nexport const TransitionSchema = z.object({\n from: z.string().min(1, \"Transition source state is required\"),\n to: z.string().min(1, \"Transition target state is required\"),\n event: z.string().min(1, \"Transition event is required\"),\n eventId: EventIdSchema.optional(),\n guard: ExpressionSchema.nullish(),\n effects: z.array(EffectSchema).optional(),\n description: z.string().nullish(),\n});\n\n// ============================================================================\n// State Machine\n// ============================================================================\n\n/**\n * Complete state machine definition\n */\nexport type StateMachine = {\n /** All states in the machine */\n states: State[];\n /** All events that can be triggered */\n events: Event[];\n /** All transitions between states */\n transitions: Transition[];\n /** Named guard definitions */\n guards?: Guard[];\n};\n\nexport const StateMachineSchema = z.object({\n states: z.array(StateSchema).min(1, \"At least one state is required\"),\n events: z.array(EventSchema),\n transitions: z.array(TransitionSchema),\n guards: z.array(GuardSchema).optional(),\n});\n\n// ============================================================================\n// Type exports\n// ============================================================================\n\nexport type StateInput = z.input<typeof StateSchema>;\nexport type EventInput = z.input<typeof EventSchema>;\nexport type GuardInput = z.input<typeof GuardSchema>;\nexport type TransitionInput = z.input<typeof TransitionSchema>;\nexport type StateMachineInput = z.input<typeof StateMachineSchema>;\n\n// ============================================================================\n// Event Utilities\n// ============================================================================\n\n/**\n * Check if an event is a circuit event (not internal/system event).\n * Circuit events are user-defined events that participate in the closed circuit pattern.\n * Internal/system events start with underscore (e.g., _INIT, _TICK, _TIMER).\n *\n * @param {string} event - Event name to check\n * @returns {boolean} true if event is a circuit event (doesn't start with underscore)\n *\n * @example\n * isCircuitEvent('CREATE') // true\n * isCircuitEvent('SAVE') // true\n * isCircuitEvent('_INIT') // false (internal)\n * isCircuitEvent('_TICK') // false (internal)\n */\nexport function isCircuitEvent(event: string): boolean {\n return !event.startsWith('_');\n}\n","/**\n * Trait Types (Self-Contained)\n *\n * Defines trait types for behavioral patterns.\n * Self-contained - imports only from local orbital types.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\nimport type { TraitId, EntityId, EventId, PageId, OrbitalId } from './identity.js';\nimport { TraitIdSchema, EntityIdSchema, EventIdSchema, PageIdSchema, OrbitalIdSchema } from './identity.js';\nimport type { StateMachine } from './state-machine.js';\nimport { StateMachineSchema } from './state-machine.js';\nimport type { Effect } from './effect.js';\nimport { EffectSchema } from './effect.js';\nimport type { Entity } from './entity.js';\nimport { EntitySchema } from './entity.js';\nimport type { AnyPatternConfig } from '../patterns/index.js';\nimport type { Expression, SExpr } from './expression.js';\nimport { ExpressionSchema, SExprSchema } from './expression.js';\nimport { JsonValueSchema } from './json.js';\n\n// ============================================================================\n// Trait Configuration\n// ============================================================================\n\n/**\n * A single value in a trait's call-site `config: { ... }` block. Supports\n * scalars (string, number, boolean, null), arrays (e.g. `fields: [\"name\",\n * \"description\"]`), and nested objects. This is the authoring surface for\n * molecules to parameterize imported atoms: the atom's render-ui reads back\n * via `@config.<key>` bindings.\n */\nexport type TraitConfigValue =\n | string\n | number\n | boolean\n | null\n | ReadonlyArray<TraitConfigValue>\n | TraitConfigObject;\n\nexport type TraitConfigObject = {\n readonly [key: string]: TraitConfigValue;\n};\n\nexport type TraitConfig = TraitConfigObject;\n\n/** Zod schema for TraitConfig. Recursive via z.lazy to allow nested structures. */\nexport const TraitConfigValueSchema: z.ZodType<TraitConfigValue> = z.lazy(() =>\n z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(TraitConfigValueSchema),\n z.record(TraitConfigValueSchema),\n ])\n);\n\nexport const TraitConfigSchema: z.ZodType<TraitConfig> = z.record(TraitConfigValueSchema);\n\n/**\n * A single entry in a call-site `config { }` override block. Either a plain\n * wiring value (`TraitConfigValue` — string, number, bool, array, object) or\n * a fully-annotated re-declaration (`ConfigFieldDeclaration` — carries `type`,\n * optional `label`/`description`/`synonyms`/`tier`). Disambiguated at runtime\n * by `isCallSiteConfigDeclaration`: the presence of a `\"type\"` string key\n * marks the annotated form.\n *\n * The `.orb` compiler emits plain values for wiring entries and\n * `{ type, default, ... }` objects for annotated entries. Consumers that only\n * need the value (e.g. `apply-params-to-orb.ts`) read `entry` directly for\n * primitives or `entry.default` for the declaration form.\n */\nexport type CallSiteConfigEntry = TraitConfigValue | ConfigFieldDeclaration;\n\n/** Typed map of call-site config entries (one per knob). */\nexport type CallSiteConfig = Readonly<Record<string, CallSiteConfigEntry>>;\n\n/**\n * Type guard: returns `true` when `entry` is an annotated `ConfigFieldDeclaration`\n * (a config-field SCHEMA: a `\"type\"` string key AND a `\"default\"` value slot)\n * rather than a plain wiring value or a render value object.\n *\n * The `\"default\"` requirement disambiguates a declaration from a `render-ui`\n * VALUE object (e.g. `{ type: \"tabs\", items: \"@entity.items\", ... }`) that\n * coincidentally carries a UI-component `type` key — such a value has no\n * `default` slot and is a `TraitConfigValue`, not a schema declaration. Every\n * annotated config field lowered from `.lolo` carries a `default`; misreading a\n * render value as a declaration drops it straight into the `config` map where\n * Rust's `serde` rejects its inner fields (e.g. `items` is a binding string,\n * not a `FieldDefinition`).\n */\nexport function isCallSiteConfigDeclaration(\n entry: CallSiteConfigEntry,\n): entry is ConfigFieldDeclaration {\n return (\n typeof entry === 'object' &&\n entry !== null &&\n !Array.isArray(entry) &&\n 'type' in entry &&\n typeof entry.type === 'string' &&\n 'default' in entry\n );\n}\n\n/** Metadata keys that only ever appear on a declared config-field SCHEMA\n * (never on a render-value object that merely carries a UI `type` key). */\nconst CONFIG_DECLARATION_META_KEYS = ['label', 'description', 'tier', 'synonyms', 'values'] as const;\n\n/**\n * Type guard: `entry` is a declared config-field SCHEMA — a string `type` plus\n * EITHER a `default` slot OR declaration metadata (`label`/`description`/\n * `tier`/`synonyms`/`values`). Broader than `isCallSiteConfigDeclaration`,\n * which requires a `default`: a field declared with no default (e.g.\n * `leftIcon : icon` → `{ type: \"icon\", label, description, tier }`) is still a\n * schema, and its runtime VALUE is its (absent → `undefined`) default, NOT the\n * schema object itself. A render-value object that coincidentally has a `type`\n * key (e.g. `{ type: \"tabs\", items: … }`) carries none of these metadata keys\n * and is therefore left untouched as a plain value.\n */\nfunction isConfigFieldSchema(entry: CallSiteConfigEntry): entry is ConfigFieldDeclaration {\n if (typeof entry !== 'object' || entry === null || Array.isArray(entry)) return false;\n if (!('type' in entry) || typeof (entry as { type?: TraitConfigValue }).type !== 'string') return false;\n return 'default' in entry || CONFIG_DECLARATION_META_KEYS.some((k) => k in entry);\n}\n\n/**\n * Convert a call-site config map into plain runtime values.\n *\n * A `CallSiteConfig` may contain either plain wiring values\n * (`TraitConfigValue`) or annotated `ConfigFieldDeclaration` objects\n * (`{ type, default, label, ... }`). Both the JS interpreter\n * (`@almadar/runtime`) and the render substrate (`@almadar/ui`) need this\n * extraction, so it lives here — the most-upstream package they share —\n * rather than being duplicated in each.\n *\n * A declared field with no `default` yields no value (dropped) — mirroring\n * `collectDeclaredConfigDefaults`. Leaking such a schema object through as a\n * value made `@config.leftIcon` resolve to `{ type: \"icon\", … }`, which the\n * render substrate then mounted as an element and passed to `Input`'s icon\n * slot → \"Element type is invalid: got <SlotContentRenderer />\".\n */\nexport function normalizeCallSiteConfigToValues(\n config: CallSiteConfig | undefined,\n): TraitConfig | undefined {\n if (config === undefined) {\n return undefined;\n }\n\n const out: Record<string, TraitConfigValue> = {};\n let hasAny = false;\n for (const [key, entry] of Object.entries(config)) {\n const value = isConfigFieldSchema(entry)\n ? entry.default\n : entry;\n if (value !== undefined) {\n out[key] = value;\n hasAny = true;\n }\n }\n\n return hasAny ? out : undefined;\n}\n\n/**\n * Per-field entry in a trait's DECLARED `config { }` schema as it lives\n * on the `.orb` JSON: `{ type: \"string\" | \"[string]\" | \"object\" | ...,\n * default?: <value> }`. Distinct from `TraitConfigValue` (which is the\n * resolved runtime value). The runtime reads `default` to seed the\n * `@config.X` binding context when no call-site override is supplied.\n *\n * Authored as `config { foo : string = \"bar\" }` in `.lolo`; lowered to\n * `{ foo: { type: \"string\", default: \"bar\" } }` in `.orb`. The optional\n * metadata fields below (`label`/`description`/`tier`/`values`/`synonyms`)\n * carry the `.lolo` `@label`/`@description`/`@tier`/`@synonyms` annotations and\n * the enum member list through lowering — consumed by config-driven UI\n * (e.g. the playground property inspector) to render typed controls.\n */\n/**\n * The reference config-field types (V4-W5). A config knob typed `entity`,\n * `trait`, or `event` holds a REFERENCE (an entity/trait/event name), not a\n * plain value — so the stamp records the referenced node's id on the field\n * (`ConfigFieldDeclaration.refId`) and both execution paths resolve the value to\n * the node's CURRENT name by id, exactly like `entityRefIds`/`traitEmbedIds`.\n * This is the deterministic, source-tagged contract that lets a declaration-only\n * rename flow through a config value without any name-scanning heuristic.\n */\nexport const REFERENCE_CONFIG_TYPES = ['entity', 'trait', 'event'] as const;\nexport type ReferenceConfigType = (typeof REFERENCE_CONFIG_TYPES)[number];\n\n/** True when a config field's `type` marks its value as an entity/trait/event reference. */\nexport function isReferenceConfigType(type: string): type is ReferenceConfigType {\n return (REFERENCE_CONFIG_TYPES as readonly string[]).includes(type);\n}\n\n/**\n * The secret config-field types. A config knob typed `secret` holds a\n * CREDENTIAL (or a reference to one): it must never flow into spec.json,\n * traces, plan snapshots, or factory bakes in cleartext — consumers mask it\n * in UI (password-rendered input) and exclude it from serialization. The\n * `.lolo` language does not yet accept `secret` as a config-field type\n * (orbital-lolo parser gate); this contract is the single deterministic\n * source downstream consumers (studio, verifiers, rabit bakes) key on once\n * it lands — until then hosts use a `string` knob plus a password-rendered\n * `ui-input` (the std-service-custom-bearer pattern).\n */\nexport const SECRET_CONFIG_TYPES = ['secret'] as const;\nexport type SecretConfigType = (typeof SECRET_CONFIG_TYPES)[number];\n\n/** True when a config field's `type` marks its value as a credential to be masked. */\nexport function isSecretConfigType(type: string): type is SecretConfigType {\n return (SECRET_CONFIG_TYPES as readonly string[]).includes(type);\n}\n\nexport type ConfigFieldDeclaration = {\n readonly type: string;\n readonly default?: TraitConfigValue;\n /**\n * V4-W5 dual-carry id — set by the stamp when `type` is a reference config\n * type (`entity`/`trait`/`event`): the stable id of the entity/trait/event\n * the field's value names. Readers resolve the value to that node's current\n * name by id (rename-proof); absent for non-reference fields.\n */\n readonly refId?: string;\n /** Marks the knob as mandatory at every call site (own-page binding exempt). `required` + `default` may coexist — the default only serves the trait's own demo page. */\n readonly required?: boolean;\n /** `@label` — human-readable control label. */\n readonly label?: string;\n /** `@description` — help/tooltip text for the field. */\n readonly description?: string;\n /** `@tier` — disclosure tier: `presentation`|`domain`|`policy`|`infra`|`internal`. */\n readonly tier?: string;\n /** Enum members when the field's type is a string union — drives a select control. */\n readonly values?: ReadonlyArray<string>;\n /** `@synonyms` — comma-separated vocabulary synonyms (metadata). */\n readonly synonyms?: string;\n /** Structured per-item schema for array-of-object fields — `edges : [{from: string!, …}]` in `.lolo` lowers to `{ type: \"object\", properties: {…} }`. */\n readonly items?: ConfigFieldItemsDeclaration;\n /** Structured property schema for object-typed config fields (no items wrapper). */\n readonly properties?: Readonly<Record<string, TraitEntityField>>;\n};\n\nexport type ConfigFieldItemsDeclaration = {\n readonly type?: string;\n /** Absent for arrays of scalars (`items: { type: \"string\" }`). */\n readonly properties?: Readonly<Record<string, TraitEntityField>>;\n /** Nested per-item schema for arrays of arrays (recursive). */\n readonly items?: ConfigFieldItemsDeclaration;\n};\n\nexport const ConfigFieldItemsDeclarationSchema: z.ZodType<ConfigFieldItemsDeclaration> = z.lazy(() =>\n z.object({\n type: z.string().optional(),\n properties: z.record(TraitEntityFieldSchema).optional(),\n items: ConfigFieldItemsDeclarationSchema.optional(),\n }),\n);\n\nexport const ConfigFieldDeclarationSchema: z.ZodType<ConfigFieldDeclaration> = z.object({\n type: z.string(),\n default: TraitConfigValueSchema.optional(),\n refId: z.string().optional(),\n required: z.boolean().optional(),\n label: z.string().optional(),\n description: z.string().optional(),\n tier: z.string().optional(),\n values: z.array(z.string()).optional(),\n synonyms: z.string().optional(),\n items: ConfigFieldItemsDeclarationSchema.optional(),\n properties: z.lazy(() => z.record(TraitEntityFieldSchema)).optional(),\n});\n\n/**\n * Map of declared config fields keyed by name. Lives on `Trait.config`\n * and `ResolvedTrait.config` for atoms/molecules that expose typed\n * configuration to consumers.\n */\nexport type DeclaredTraitConfig = Readonly<Record<string, ConfigFieldDeclaration>>;\n\nexport const DeclaredTraitConfigSchema: z.ZodType<DeclaredTraitConfig> = z.record(\n ConfigFieldDeclarationSchema,\n);\n\n// ============================================================================\n// Trait Categories\n// ============================================================================\n\n/**\n * Categories for organizing traits\n */\nexport type TraitCategory =\n | 'lifecycle'\n | 'temporal'\n | 'validation'\n | 'notification'\n | 'integration'\n | 'interaction'\n | 'agent'\n | 'game-core'\n | 'game-character'\n | 'game-ai'\n | 'game-combat'\n | 'game-items'\n | 'game-cards'\n | 'game-board'\n | 'game-puzzle';\n\nexport const TraitCategorySchema = z.enum([\n 'lifecycle',\n 'temporal',\n 'validation',\n 'notification',\n 'integration',\n 'interaction',\n 'agent',\n 'game-core',\n 'game-character',\n 'game-ai',\n 'game-combat',\n 'game-items',\n 'game-cards',\n 'game-board',\n 'game-puzzle',\n]);\n\n// ============================================================================\n// Trait Entity Field (simplified)\n// ============================================================================\n\n/**\n * Field types for trait data entities\n */\nexport type TraitFieldType = 'string' | 'number' | 'boolean' | 'date' | 'array' | 'object' | 'timestamp' | 'datetime' | 'enum' | 'email' | 'url' | 'phone' | 'uuid' | 'image';\n\n/**\n * Simplified field for trait data entities\n */\nexport type TraitEntityField = {\n name: string;\n type: TraitFieldType;\n required?: boolean;\n /** Field default parsed from `.orb` — always a JSON-shaped value. */\n default?: TraitConfigValue;\n values?: string[];\n /** Structured per-item schema for array-of-object fields (recursive). */\n items?: ConfigFieldItemsDeclaration;\n /** Structured property schema for object-typed entity fields. */\n properties?: Readonly<Record<string, TraitEntityField>>;\n};\n\nexport const TraitEntityFieldSchema: z.ZodType<TraitEntityField> = z.object({\n name: z.string().min(1),\n type: z.enum([\n 'string',\n 'number',\n 'boolean',\n 'date',\n 'array',\n 'object',\n 'timestamp',\n 'datetime',\n 'enum',\n 'email',\n 'url',\n 'phone',\n 'uuid',\n 'image',\n ]),\n required: z.boolean().optional(),\n default: TraitConfigValueSchema.optional(),\n values: z.array(z.string()).optional(),\n items: ConfigFieldItemsDeclarationSchema.optional(),\n properties: z.lazy(() => z.record(TraitEntityFieldSchema)).optional(),\n});\n\n// ============================================================================\n// Trait Data Entity\n// ============================================================================\n\n/**\n * Simplified data entity for traits\n */\nexport type TraitDataEntity = {\n name: string;\n collection?: string;\n fields: TraitEntityField[];\n timestamps?: boolean;\n description?: string;\n runtime?: boolean;\n singleton?: boolean;\n pages?: string[];\n};\n\nexport const TraitDataEntitySchema = z.object({\n name: z.string().min(1),\n collection: z.string().optional(),\n fields: z.array(TraitEntityFieldSchema).min(1),\n timestamps: z.boolean().optional(),\n description: z.string().optional(),\n runtime: z.boolean().optional(),\n singleton: z.boolean().optional(),\n pages: z.array(z.string()).optional(),\n});\n\n// ============================================================================\n// Trait Tick\n// ============================================================================\n\n/**\n * Tick rule for traits.\n * Guards can be legacy strings or S-expressions.\n * Effects can be typed Effect objects or S-expressions.\n */\nexport type TraitTick = {\n name: string;\n description?: string;\n priority?: number;\n interval: string | number;\n appliesTo?: string[];\n pages?: string[];\n /** V4 dual-carry id sibling of `pages` — optional until the Phase-7 flip. */\n pageIds?: PageId[];\n /** Guard expression - string (legacy) or S-expression array */\n guard?: Expression;\n /** Effects to execute (S-expressions) */\n effects: Effect[];\n /**\n * Events this tick emits.\n * Must reference events defined in trait's emits array.\n * Used for validation and documentation.\n */\n emits?: string[];\n /** V4 dual-carry id sibling of `emits` — optional until the Phase-7 flip. */\n emitIds?: EventId[];\n};\n\n/** `\"500ms\"` / `\"5s\"` / `\"1m\"` / `\"1h\"` / `\"1d\"` — the duration form both schedulers parse. */\nconst DURATION_INTERVAL = /^\\d+(ms|s|m|h|d)$/;\n/** A 5-field cron expression, e.g. `\"0 9 * * *\"`. */\nconst CRON_INTERVAL = /^\\S+(\\s+\\S+){4}$/;\n\n/**\n * A tick's cadence: `\"frame\"`, a positive number of milliseconds, a duration\n * string, or a cron expression.\n *\n * This schema previously accepted only `\"frame\"` or a number, while `TraitTick`\n * declared `string | number` and BOTH schedulers already parsed durations and cron\n * (`OrbitalServerRuntime.registerTick` → `isValidCronExpression`/\n * `parseDurationString`; Rust `TickScheduler::parse_interval` → `cron::parse_cron`).\n * The gate therefore rejected every cron/duration tick before its runtime could\n * run it — `std-data-erasure`'s hourly `executionScan` made the whole orbital\n * unloadable in the interpreter with only `traits.N: Invalid input` to go on.\n */\nexport const TickIntervalSchema = z.union([\n z.literal('frame'),\n z.number().positive(),\n z.string().refine((v) => DURATION_INTERVAL.test(v) || CRON_INTERVAL.test(v), {\n message:\n 'interval must be \"frame\", a positive number of milliseconds, a duration (\"500ms\"/\"5s\"/\"1m\"/\"1h\"/\"1d\"), or a 5-field cron expression (\"0 9 * * *\")',\n }),\n]);\n\nexport const TraitTickSchema = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n priority: z.number().optional(),\n interval: TickIntervalSchema,\n appliesTo: z.array(z.string()).optional(),\n pages: z.array(z.string()).optional(),\n pageIds: z.array(PageIdSchema).optional(),\n guard: ExpressionSchema.optional(),\n effects: z.array(EffectSchema).min(1),\n emits: z.array(z.string()).optional(),\n emitIds: z.array(EventIdSchema).optional(),\n});\n\n// ============================================================================\n// Event Scope\n// ============================================================================\n\n/**\n * Event scope determines visibility:\n * - 'internal': Trait-to-trait within same orbital (default)\n * - 'external': Exposed for cross-orbital communication\n */\nexport type EventScope = 'internal' | 'external';\n\nexport const EventScopeSchema = z.enum(['internal', 'external']);\n\n// ============================================================================\n// Event Payload Field\n// ============================================================================\n\n/**\n * Payload field definition for events.\n * Defines the structure of data carried by events.\n */\nexport type EventPayloadField = {\n /** Field name */\n name: string;\n /**\n * Field type. Any non-empty string, mirroring the Rust validator's\n * acceptance (Zod schema below uses `z.string().min(1)`). Well-known\n * values include the primitives (`string`, `number`, `boolean`,\n * `object`, `array`, `entity`), date variants (`date`, `datetime`,\n * `timestamp`), entity-name references (`User`), and array-of-entity\n * shorthand (`[User]`). Narrowing happens at the call sites that care\n * (e.g. `orbital-compiler/phases/validation/emit_payload.rs`), not at\n * the structural type level — this keeps `.orb`-emitted payloads\n * round-trippable through TypeScript without losing precision.\n */\n type: string;\n /** Whether field is required in payload */\n required?: boolean;\n /** Human-readable description */\n description?: string;\n /** For 'entity' type: the entity type name */\n entityType?: string;\n /** Structured property schema for object-typed payload fields (recursive). */\n properties?: ReadonlyArray<EventPayloadField>;\n};\n\nexport const EventPayloadFieldSchema: z.ZodType<EventPayloadField> = z.object({\n name: z.string().min(1),\n /**\n * Field type. Mirrors the Rust validator's acceptance: any non-empty\n * string. Primitives ('string' | 'number' | 'boolean' | 'object' |\n * 'array') are the canonical values; entity-name references like\n * 'ModalRecord' and array-of-entity references like '[ModalRecord]'\n * are also valid because the Rust IR's PayloadField.field_type is\n * just a String. Only enforced narrowly at the call site (e.g.\n * emit-literal type-mismatch warnings in\n * orbital-compiler/phases/validation/emit_payload.rs) — not here.\n */\n type: z.string().min(1),\n required: z.boolean().optional(),\n description: z.string().optional(),\n entityType: z.string().optional(),\n properties: z.lazy(() => z.array(EventPayloadFieldSchema)).optional(),\n});\n\n// ============================================================================\n// Trait Event Contract\n// ============================================================================\n\n/**\n * Event contract for events a trait emits.\n * Declares the event name, scope, and payload schema.\n */\nexport type TraitEventContract = {\n /** Event name (UPPER_SNAKE_CASE) */\n event: string;\n /** V4 dual-carry id sibling of `event` — optional until the Phase-7 flip. */\n eventId?: EventId;\n /** Human-readable description */\n description?: string;\n /** User-vocabulary synonyms (comma-separated) — the per-event analogue of a\n * field/config `@synonyms`. Feeds the curation event matcher. */\n synonyms?: string;\n /** Authoring tier (`essential`/`customization`/`advanced`/`internal`). */\n tier?: string;\n /** Payload schema — declarative type info for the event's payload.\n * Distinct from the runtime payload value (`@payload.X` bindings,\n * `EventPayload`) which is a separate concept. */\n payloadSchema?: EventPayloadField[];\n /**\n * Event scope:\n * - 'internal': Trait-to-trait within same orbital (default)\n * - 'external': Exposed for cross-orbital communication\n */\n scope?: EventScope;\n};\n\n/**\n * `@config.<knob>` is the only legal reference form for an emit/listen\n * event name (Option B — the declared event name resolves to a\n * string-typed config knob's value at inline/resolve time). Matches the\n * Rust lexer's dotted-sigil body (`config.<ident>`, no further dots).\n */\nexport const CONFIG_REF_EVENT_PATTERN = /^@config\\.[A-Za-z_][A-Za-z0-9_]*$/;\n\n/** Returns the knob identifier when `event` is a `@config.<knob>` reference, else `undefined`. */\nexport function configRefEventKnob(event: string): string | undefined {\n return CONFIG_REF_EVENT_PATTERN.test(event) ? event.slice('@config.'.length) : undefined;\n}\n\n/** Why a `@config.<knob>` emit/listen event-name reference failed to resolve. */\nexport type ConfigRefEventError = 'unknown-knob' | 'not-string' | 'no-default';\n\n/**\n * Resolve a `@config.<knob>` emit/listen event-name reference to its\n * concrete literal, given the trait's declared config schema and the\n * effective config value map (call-site override folded over declared\n * default — same precedence the Rust inline phase's `effective_config`\n * uses). The single JS-side owner of this resolution rule; mirrors\n * `resolve_config_ref_event_name` in `orbital-core::schema` (Rust).\n * Returns the resolved literal, or the specific contract clause that failed.\n */\nexport function resolveConfigRefEventName(\n event: string,\n declaredConfig: DeclaredTraitConfig | undefined,\n effectiveConfig: Readonly<Record<string, TraitConfigValue>>,\n): { readonly ok: true; readonly value: string } | { readonly ok: false; readonly error: ConfigRefEventError } {\n const knob = configRefEventKnob(event);\n if (knob === undefined) return { ok: false, error: 'unknown-knob' };\n const field = declaredConfig?.[knob];\n if (field === undefined) return { ok: false, error: 'unknown-knob' };\n if (field.type !== 'string') return { ok: false, error: 'not-string' };\n if (field.default === undefined) return { ok: false, error: 'no-default' };\n const value = effectiveConfig[knob];\n if (typeof value !== 'string') return { ok: false, error: 'not-string' };\n return { ok: true, value };\n}\n\nexport const TraitEventContractSchema = z.object({\n /**\n * Event name. Mirrors the Rust validator's `is_valid_event_identifier`:\n * starts with a letter, then any letters / digits / underscores. Both\n * UPPER_SNAKE_CASE and PascalCase shapes are valid identifiers in the\n * post-Phase 2.5 nominal-event type system (events declared via\n * `type X = Event<T>`). A pre-resolution `@config.<knob>` reference\n * (Option B) is also legal — inline/resolve substitutes it with the\n * knob's effective literal before codegen/runtime consume it.\n */\n event: z.string().min(1).regex(\n /^([A-Za-z][A-Za-z0-9_]*|@config\\.[A-Za-z_][A-Za-z0-9_]*)$/,\n 'Event name must start with a letter and contain only letters, digits, and underscores, or be a `@config.<knob>` reference'\n ),\n eventId: EventIdSchema.optional(),\n description: z.string().optional(),\n synonyms: z.string().optional(),\n tier: z.string().optional(),\n payloadSchema: z.array(EventPayloadFieldSchema).optional(),\n scope: EventScopeSchema.optional(),\n});\n\n// ============================================================================\n// Trait Event Listener\n// ============================================================================\n\n/**\n * Event listener for trait communication.\n * Guards can be legacy strings or S-expressions.\n * Enhanced with scope and payloadMapping for cross-orbital communication.\n */\n/**\n * Source-scoping for a `listens {}` entry. Determines which emitters the\n * listener responds to.\n *\n * - `{ kind: \"any\" }`: wildcard (`* EVENT -> TRIGGER`). Any trait, any orbital.\n * - `{ kind: \"trait\", trait: \"X\" }`: intra-orbital (`X EVENT -> TRIGGER`).\n * Only emits from the same orbital's trait `X`.\n * - `{ kind: \"orbital\", orbital: \"O\", trait: \"X\" }`: cross-orbital\n * (`O.X EVENT -> TRIGGER`). Only emits from orbital `O`'s trait `X`.\n *\n * Absent (undefined) means the listener is a local payload-declaration only\n * — pure type metadata, no bus subscription.\n */\nexport type ListenSource =\n | { kind: 'any' }\n | {\n kind: 'trait';\n trait: string;\n /** V4 dual-carry id sibling of `trait` — optional until the Phase-7 flip. */\n traitId?: TraitId;\n }\n | {\n kind: 'orbital';\n orbital: string;\n trait: string;\n /** V4 dual-carry id sibling of `orbital` — optional until the Phase-7 flip. */\n orbitalId?: OrbitalId;\n /** V4 dual-carry id sibling of `trait` — optional until the Phase-7 flip. */\n traitId?: TraitId;\n };\n\nexport const ListenSourceSchema = z.union([\n z.object({ kind: z.literal('any') }),\n z.object({\n kind: z.literal('trait'),\n trait: z.string().min(1),\n traitId: TraitIdSchema.optional(),\n }),\n z.object({\n kind: z.literal('orbital'),\n orbital: z.string().min(1),\n trait: z.string().min(1),\n orbitalId: OrbitalIdSchema.optional(),\n traitId: TraitIdSchema.optional(),\n }),\n]);\n\nexport type TraitEventListener = {\n /** Event key to listen for (bare event name, no source prefix in the new shape) */\n event: string;\n /** V4 dual-carry id sibling of `event` — optional until the Phase-7 flip. */\n eventId?: EventId;\n /** State machine event to trigger */\n triggers: string;\n /** V4 dual-carry id sibling of `triggers` — optional until the Phase-7 flip. */\n triggersId?: EventId;\n /** Human-readable description (authored `@description` on the listen). */\n description?: string;\n /** User-vocabulary synonyms (comma-separated). */\n synonyms?: string;\n /** Authoring tier (`essential`/`customization`/`advanced`/`internal`). */\n tier?: string;\n /** Guard expression - string (legacy) or S-expression array */\n guard?: Expression;\n /**\n * Listener scope:\n * - 'internal': Listen to events within same orbital (default)\n * - 'external': Listen to events from other orbitals\n */\n scope?: EventScope;\n /**\n * `with { ... }` payload rewrite: `{ targetField: SExpr }`. Each value is a\n * full s-expression evaluated against the source payload — a `@payload.<field>`\n * read, a literal, or an operator list. Apply it with\n * `applyListenPayloadMapping`.\n */\n payloadMapping?: Record<string, SExpr>;\n /**\n * Source scoping (see `ListenSource`). Undefined when the listen entry is\n * a local payload declaration rather than a bus subscription.\n */\n source?: ListenSource;\n};\n\nexport const TraitEventListenerSchema = z.object({\n event: z.string().min(1),\n eventId: EventIdSchema.optional(),\n triggers: z.string().min(1),\n triggersId: EventIdSchema.optional(),\n description: z.string().optional(),\n synonyms: z.string().optional(),\n tier: z.string().optional(),\n guard: ExpressionSchema.optional(),\n scope: EventScopeSchema.optional(),\n payloadMapping: z.record(SExprSchema).optional(),\n source: ListenSourceSchema.optional(),\n});\n\n// ============================================================================\n// Required Field\n// ============================================================================\n\n/**\n * Field required by a trait from its linkedEntity\n */\nexport type RequiredField = {\n name: string;\n type: TraitFieldType;\n description?: string;\n};\n\nexport const RequiredFieldSchema = z.object({\n name: z.string().min(1),\n type: z.enum(['string', 'number', 'boolean', 'date', 'array', 'object', 'timestamp', 'datetime', 'enum', 'email', 'url', 'phone', 'uuid', 'image']),\n description: z.string().optional(),\n});\n\n// ============================================================================\n// Trait Reference\n// ============================================================================\n\n/**\n * Reference to a trait from an entity or page.\n *\n * Phase F treats a trait reference as a function call: `ref` names the\n * imported trait and the sibling fields are arguments. The compiler's\n * identifier-substitution pass uses these arguments to rewrite the\n * inlined trait clone before lowering.\n */\nexport type TraitReference = {\n ref: string;\n /** V4 dual-carry id sibling of `ref` — optional until the Phase-7 flip. */\n refId?: TraitId;\n /**\n * V4 LOCAL DECLARATION id — the identity of this trait AS DECLARED in its\n * orbital (`trait X = Alias.traits.Y` declares node X; `refId` carries\n * Y's id). Minted by the stamp so page trait refs and `@trait.X` embeds\n * resolve by id across `name:` renames (the composed-organism surface was\n * the one declaration class without an id).\n */\n id?: TraitId;\n /**\n * Phase 1.2: optional registry path disambiguator. Pairs with `ref` to\n * explicitly name which `uses` entry the alias was imported from\n * (e.g. \"std/behaviors/atoms/std-browse\"). Helpful for programmatic\n * descriptor construction and inline-phase disambiguation when multiple\n * registries expose the same alias prefix.\n */\n from?: string;\n linkedEntity?: string;\n /** V4 dual-carry id sibling of `linkedEntity` — optional until the Phase-7 flip. */\n linkedEntityId?: EntityId;\n /** Phase F: rename the inlined trait at the call site */\n name?: string;\n /** Phase F: rename atom event keys at the call site, e.g. {OPEN: \"ADD_ITEM\"} */\n events?: Record<string, string>;\n /** V4 dual-carry id sibling of `events` (keys = baked event names resolved to ids) — optional until the Phase-7 flip. */\n eventIds?: Record<string, EventId>;\n /**\n * Entity-field remap: rewrite the inlined trait's canonical `@entity.X` /\n * `@payload.row.X` field references to the consumer entity's field names,\n * e.g. `{ name: \"title\", folder: \"parentId\" }`. Mirrors `events` for\n * fields. Applied during inline substitution alongside `linkedEntity`.\n */\n fields?: Record<string, string>;\n /**\n * Call-site config overrides. Each entry is either a plain wiring value\n * (`TraitConfigValue`) or a fully-annotated re-declaration\n * (`ConfigFieldDeclaration` with `type`, optional `label`/`description`/\n * `synonyms`/`tier`). Use `isCallSiteConfigDeclaration` to discriminate.\n *\n * Plain wiring (existing callers): `config: { icon: \"star\", count: 5 }`.\n * Annotated (new): `config: { icon: { type: \"string\", default: \"star\",\n * label: \"Icon\", tier: \"presentation\" } }`.\n */\n config?: CallSiteConfig;\n appliesTo?: string[];\n /**\n * Phase F.7: replace the imported trait's `listens` array with the\n * caller-supplied list. Empty array clears all upstream listens. The\n * inliner applies this AFTER substitution, overwriting whatever the\n * upstream declared. Use sparingly: this drops external event wiring.\n */\n listens?: TraitEventListener[];\n /**\n * Phase F.7: set every emit's `scope` to the caller-supplied value.\n * `'internal'` confines emits to the orbital's internal bus; `'external'`\n * broadcasts them. Applied after substitution and listens replacement.\n */\n emitsScope?: 'internal' | 'external';\n /**\n * Phase F.8: per-transition effects override. The map's keys are event\n * names (the transition triggers, AFTER any rename via `events`). The\n * values are the SExpression effect lists that REPLACE the matching\n * transitions' `effects[]` arrays.\n *\n * This is the unified content + effect override mechanism. Whether the\n * override list contains `[\"render-ui\", ...]` (visual content),\n * `[\"fetch\", ...]` (data load), `[\"persist\", ...]` (mutation), or any\n * combination, the inliner just substitutes the whole list. Identifier\n * substitution (entity refs, event refs) still runs over the merged\n * trait body, so override effects can use either upstream or caller\n * identifiers and the F.3 walker will rewrite them consistently.\n *\n * Example:\n * ```json\n * \"effects\": {\n * \"ADD_ITEM\": [\n * [\"fetch\", \"CartItem\"],\n * [\"render-ui\", \"main\", { ... }]\n * ],\n * \"SAVE\": [\n * [\"persist\", \"create\", \"CartItem\", \"@payload.data\"]\n * ]\n * }\n * ```\n */\n effects?: Record<string, SExpr[]>;\n};\n\nexport const TraitReferenceSchema = z\n .object({\n ref: z.string().min(1),\n refId: TraitIdSchema.optional(),\n // V4 local declaration id (see the interface doc) — declared so the\n // strip-mode zod gate carries it through instead of dropping it.\n id: TraitIdSchema.optional(),\n // Phase 1.2: optional registry path disambiguator, pairs with `ref`.\n from: z.string().optional(),\n linkedEntity: z.string().optional(),\n linkedEntityId: EntityIdSchema.optional(),\n name: z.string().optional(),\n events: z\n .record(\n z.string().min(1, \"events key (atom event name) must be non-empty\"),\n z.string().min(1, \"events value (caller event name) must be non-empty\"),\n )\n .optional(),\n eventIds: z.record(z.string().min(1), EventIdSchema).optional(),\n fields: z\n .record(\n z.string().min(1, \"fields key (canonical field name) must be non-empty\"),\n z.string().min(1, \"fields value (consumer field name) must be non-empty\"),\n )\n .optional(),\n // Each value is either a plain wiring value (TraitConfigValue) or an\n // annotated ConfigFieldDeclaration. Declaration form is tried first\n // (it's more specific — has a `\"type\"` string key); plain values fall\n // through to the recursive TraitConfigValue union.\n config: z.record(z.union([ConfigFieldDeclarationSchema, TraitConfigValueSchema])).optional(),\n appliesTo: z.array(z.string()).optional(),\n // Phase F.7: caller-supplied listen entries are already-resolved\n // structured definitions (see `TraitReference.listens`).\n listens: z.array(TraitEventListenerSchema).optional(),\n emitsScope: z.enum(['internal', 'external']).optional(),\n // Phase F.8: per-transition effects override. The keys are event\n // names (the transition triggers AFTER renames); values are SExpr\n // effect tuples.\n effects: z\n .record(\n z.string().min(1, \"effects override key (event name) must be non-empty\"),\n z.array(SExprSchema),\n )\n .optional(),\n })\n .refine(\n (ref) => {\n if (!ref.events) return true;\n // Phase F.4: reject empty event-name strings on either side of\n // every entry. The substitution pass treats empty strings as\n // no-ops at runtime, but accepting them at the schema boundary\n // hides authoring errors. The per-entry .min(1) above already\n // rejects most cases; this refine is the belt-and-braces check\n // that survives any future relaxation of the inner validators.\n for (const [from, to] of Object.entries(ref.events)) {\n if (from.length === 0 || to.length === 0) return false;\n }\n return true;\n },\n {\n message:\n 'TraitReference \"events\" entries must have non-empty atom and caller event names',\n path: [\"events\"],\n },\n );\n\n/**\n * Simplified trait reference - supports string, reference object, or inline Trait definition\n * - string: \"TraitName\" - reference to a trait by name\n * - { ref: \"TraitName\" }: reference object with optional config / overrides\n * - { name: \"TraitName\", stateMachine: {...} }: inline trait definition\n *\n * Phase F adds `name` and `events` to the reference object form so callers\n * can rename the trait and remap atom event keys.\n */\nexport type TraitRef =\n | string\n | {\n ref: string;\n config?: CallSiteConfig;\n linkedEntity?: string;\n name?: string;\n events?: Record<string, string>;\n }\n | Trait;\n\n// TraitRefSchema is defined after TraitSchema (see below) to avoid forward reference\n\n// ============================================================================\n// Trait UI Binding\n// ============================================================================\n\nexport type PresentationType = 'modal' | 'drawer' | 'popover' | 'inline' | 'confirm-dialog';\n\nexport type TraitUIBinding = {\n [stateName: string]: {\n presentation: PresentationType;\n content: AnyPatternConfig | AnyPatternConfig[];\n props?: {\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n position?: 'left' | 'right' | 'top' | 'bottom' | 'center';\n title?: string;\n closable?: boolean;\n width?: string;\n showProgress?: boolean;\n step?: number;\n totalSteps?: number;\n };\n };\n};\n\n/**\n * Zod schema for {@link TraitUIBinding}. `content` is a pattern config (or\n * list of them); pattern configs have no dedicated zod schema in core, so\n * they are validated as JSON objects here and narrowed by downstream\n * pattern-aware consumers.\n */\nexport const TraitUIBindingSchema = z.record(\n z.object({\n presentation: z.enum(['modal', 'drawer', 'popover', 'inline', 'confirm-dialog']),\n content: z.union([z.record(JsonValueSchema), z.array(z.record(JsonValueSchema))]),\n props: z\n .object({\n size: z.enum(['sm', 'md', 'lg', 'xl', 'full']).optional(),\n position: z.enum(['left', 'right', 'top', 'bottom', 'center']).optional(),\n title: z.string().optional(),\n closable: z.boolean().optional(),\n width: z.string().optional(),\n showProgress: z.boolean().optional(),\n step: z.number().optional(),\n totalSteps: z.number().optional(),\n })\n .optional(),\n }),\n);\n\n// ============================================================================\n// Trait Definition\n// ============================================================================\n\n/**\n * A Trait is a reusable behavioral module with state machine.\n *\n * Traits declare their event contracts via `emits` and `listens`:\n * - `emits`: Events this trait can emit (with scope and payload schema)\n * - `listens`: Events this trait listens for (with optional payloadMapping)\n */\n/**\n * Instance vs collection scope for a trait.\n *\n * Mirrors the `.lolo` trait modifier list (`[interaction, instance]` /\n * `[interaction, collection]`). Instance traits own a single entity record\n * (typed by `linkedEntity`) and read/write `@entity.field`. Collection\n * traits render records of `linkedEntity` without owning any one; data flows\n * through `@payload.data` typed as `Array<linkedEntity>`.\n *\n * Optional today. A future phase (Almadar_Entity_V2_Plan.md Phase 4) makes\n * it required and adds static checks in the compiler.\n */\nexport type TraitScope = 'instance' | 'collection';\n\nexport const TraitScopeSchema = z.enum(['instance', 'collection']);\n\n/**\n * Inferred field contract for a `@rebindable` trait binding. `requires` =\n * entity fields the trait READS via `@entity.<field>`; `provides` = fields it\n * WRITES via `(set @entity.<field> ...)`. A consumer that rebinds the trait\n * (`linkedEntity`) must point at an entity whose fields ⊇ `requires`. Inferred\n * by the lolo lowerer from the trait's own SExpr usage; the orbital-rust L2\n * validator enforces it (`ORB_T_REBIND_MISSING_FIELDS`). Mirrors the Rust\n * `EntityFieldContract` serde shape exactly.\n */\nexport type EntityFieldContract = {\n requires: string[];\n provides: string[];\n};\n\nexport const EntityFieldContractSchema = z.object({\n requires: z.array(z.string()),\n provides: z.array(z.string()),\n});\n\nexport type Trait = {\n /** V4 dual-carry id sibling of `name` — optional until the Phase-7 flip. */\n id?: TraitId;\n name: string;\n description?: string;\n description_visual_prompt?: string;\n category?: TraitCategory;\n /**\n * Opt-in marker authored as `-> @rebindable Entity` in `.lolo`. When\n * `true`, a consuming molecule/organism may rebind this trait's entity via\n * `linkedEntity`; otherwise the binding is fixed and the validator rejects\n * any rebind (`ORB_T_ENTITY_NOT_REBINDABLE`). Absent on traits that don't\n * bind an entity.\n */\n entityRebindable?: boolean;\n /**\n * Inferred field contract a rebind target must satisfy. Emitted only\n * alongside `entityRebindable: true`. See {@link EntityFieldContract}.\n */\n entityContract?: EntityFieldContract;\n /**\n * `@description \"...\"` authored on the `@rebindable` binding in `.lolo`.\n * Surfaced to catalog prose + knob-embeddings so the LLM can reach for the\n * binding from intent vocabulary (binding-discovery). Absent when unmarked.\n */\n entityBindingDescription?: string;\n /** `@synonyms \"...\"` authored on the `@rebindable` binding in `.lolo`. */\n entityBindingSynonyms?: string;\n /**\n * Author-supplied capability tags lifted from the `.lolo` trait header's\n * bracket list. Anything beyond the known scope tokens (`instance` /\n * `collection`) and the first category identifier accumulates here.\n * Free-form strings — the lolo parser does not validate them against a\n * known set. The Phase 4 translator overlay matches rules to traits by\n * exact set membership against this list. Empty when no capabilities\n * were declared. See `docs/Almadar_Domain_Language.md` Phase 3.\n */\n capabilities?: string[];\n /**\n * Instance or collection scope. Required in V2: every trait operates on\n * either a single record (`instance`) or a group (`collection`). Drives\n * payload-inference rules for emits declared via `type X = Event<T>` and\n * shapes the runtime's binding semantics. Authored in `.lolo` as the\n * `[instance]` / `[collection]` modifier on the trait header.\n */\n scope: TraitScope;\n /**\n * The entity this trait is linked to.\n * Required for inline trait definitions within an orbital.\n */\n linkedEntity?: string;\n /** V4 dual-carry id sibling of `linkedEntity` — optional until the Phase-7 flip. */\n linkedEntityId?: EntityId;\n /**\n * V4 leverage-ids — id side-map for `@entity.<Name>` binding tokens + positional\n * entity args (`fetch`/`ref`/`persist`/`spawn`) in this trait's guards/effects/\n * ticks/listens. Maps the referenced entity NAME → its stable id, so readers\n * resolve these bare-string positions by id (else name) and an entity rename never\n * strands them — the coverage that lets the entity name-rewriter be deleted.\n */\n entityRefIds?: Record<string, EntityId>;\n /**\n * V4 leverage-ids — id side-map for `@trait.<Name>` embed tokens (render-ui embeds /\n * effect-tree sibling refs). Maps the embed token NAME → the embedded trait's stable\n * id, so readers splice embeds by id (else name) — the coverage that lets the\n * `@trait.` name-rewriter be deleted.\n */\n traitEmbedIds?: Record<string, TraitId>;\n requiredFields?: RequiredField[];\n dataEntities?: TraitDataEntity[];\n stateMachine?: StateMachine;\n initialEffects?: Effect[];\n ticks?: TraitTick[];\n /**\n * Events this trait emits.\n * Each event can be scoped as internal or external.\n * External events are namespaced at orbital level (TraitName.EVENT_NAME).\n */\n emits?: TraitEventContract[];\n /**\n * Events this trait listens for.\n * External listeners reference namespaced events (TraitName.EVENT_NAME).\n */\n listens?: TraitEventListener[];\n ui?: TraitUIBinding;\n /**\n * Declared `config { }` schema authored on the trait. Drives\n * `@config.X` substitution: each field's `default` seeds the\n * binding context behind any caller-supplied call-site\n * `config: { ... }` override.\n */\n config?: DeclaredTraitConfig;\n /**\n * Set by the resolve/inline phase when this trait was cloned from a\n * `uses[]` import. Absent for traits authored directly on the\n * orbital. Viewport-only metadata — runtime and codegen ignore it.\n * Drives Studio's L2 grouping (imported traits collapse under one\n * card per alias) and L3 drill (alias → that behavior's transitions).\n */\n sourceBehavior?: SourceBehaviorMetadata;\n /**\n * Set by the resolve/inline phase alongside `sourceBehavior`. Carries\n * the resolved `Entity` definition of the imported behavior so the\n * client-side mock-data generator can produce rows for the trait's\n * `linkedEntity` without re-walking the import graph at runtime.\n */\n sourceEntityDefinition?: Entity;\n};\n\n/**\n * Provenance attached to a trait that was cloned from a `uses[]` import\n * during the inline phase. The resolved schema carries this so Studio\n * can group L2 cards by source behavior and offer an L3 drill into the\n * import's own transitions.\n */\nexport type SourceBehaviorMetadata = {\n /** Behavior name (e.g. \"std-stat-card\") — the resolved `from:` value. */\n behavior: string;\n /** Alias used at the import site (e.g. \"Stat\"). Multiple imports of\n * the same atom group by alias, not by behavior. */\n alias: string;\n /** Original trait name inside the imported behavior, before any\n * call-site `name:` rename. */\n originalName: string;\n};\n\nexport const SourceBehaviorMetadataSchema = z.object({\n behavior: z.string().min(1),\n alias: z.string().min(1),\n originalName: z.string().min(1),\n});\n\nexport const TraitSchema = z.object({\n id: TraitIdSchema.optional(),\n name: z.string().min(1),\n description: z.string().optional(),\n description_visual_prompt: z.string().optional(),\n category: TraitCategorySchema.optional(),\n entityRebindable: z.boolean().optional(),\n entityContract: EntityFieldContractSchema.optional(),\n entityBindingDescription: z.string().optional(),\n entityBindingSynonyms: z.string().optional(),\n capabilities: z.array(z.string()).optional(),\n scope: TraitScopeSchema,\n linkedEntity: z.string().optional(),\n linkedEntityId: EntityIdSchema.optional(),\n entityRefIds: z.record(z.string().min(1), EntityIdSchema).optional(),\n traitEmbedIds: z.record(z.string().min(1), TraitIdSchema).optional(),\n requiredFields: z.array(RequiredFieldSchema).optional(),\n dataEntities: z.array(TraitDataEntitySchema).optional(),\n stateMachine: StateMachineSchema.optional(),\n initialEffects: z.array(EffectSchema).optional(),\n ticks: z.array(TraitTickSchema).optional(),\n emits: z.array(TraitEventContractSchema).optional(),\n listens: z.array(TraitEventListenerSchema).optional(),\n ui: TraitUIBindingSchema.optional(),\n config: DeclaredTraitConfigSchema.optional(),\n sourceBehavior: SourceBehaviorMetadataSchema.optional(),\n sourceEntityDefinition: EntitySchema.optional(),\n});\n\n// TraitRefSchema defined here after TraitSchema to avoid forward reference.\n//\n// The reference arm IS `TraitReferenceSchema` — one schema for one shape. It\n// used to be a narrower hand-rolled copy (`ref`/`config`/`linkedEntity`/`name`/\n// `events` only), and because `z.object()` STRIPS undeclared keys rather than\n// rejecting them, every `.orb` that came through the loader's `safeParse` lost\n// `id`, `refId`, `linkedEntityId`, `listens`, `emitsScope`, `effects`, `fields`\n// and `eventIds` on every trait ref — silently, with a schema that reported\n// success. An atom's own sub-view refs (`trait DenseTableView =\n// TableView.traits.TableViewRender -> BrowseItem { listens {…} }`) arrived with\n// no listens at all, so the interpreted path could not wire what the compiled\n// path wires from the same file.\nexport const TraitRefSchema = z.union([\n z.string().min(1),\n TraitReferenceSchema,\n TraitSchema, // Allow inline trait definitions\n]);\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Check if a trait ref is an inline Trait definition\n */\n/**\n * Checks if a trait reference is an inline trait definition.\n * \n * Type guard to determine if a TraitRef is an inline trait object\n * (with 'name' property) rather than a string reference or object reference.\n * \n * @param {TraitRef} traitRef - Trait reference to check\n * @returns {boolean} True if traitRef is an inline trait, false otherwise\n * \n * @example\n * isInlineTrait({ name: 'MyTrait' }); // returns true (inline)\n * isInlineTrait('MyTrait'); // returns false (string reference)\n * isInlineTrait({ ref: 'MyTrait' }); // returns false (object reference)\n */\nexport function isInlineTrait(traitRef: TraitRef): traitRef is Trait {\n return typeof traitRef === 'object' && 'name' in traitRef && !('ref' in traitRef);\n}\n\n/**\n * Extracts the trait name from a trait reference.\n * \n * Handles all trait reference formats (string, inline object, object reference)\n * and returns the canonical trait name.\n * \n * @param {TraitRef} traitRef - Trait reference to extract name from\n * @returns {string} Trait name\n * \n * @example\n * getTraitName('MyTrait'); // returns 'MyTrait'\n * getTraitName({ name: 'MyTrait' }); // returns 'MyTrait'\n * getTraitName({ ref: 'MyTrait' }); // returns 'MyTrait'\n */\nexport function getTraitName(traitRef: TraitRef): string {\n if (typeof traitRef === 'string') {\n return traitRef;\n }\n if (isInlineTrait(traitRef)) {\n return traitRef.name;\n }\n return traitRef.ref;\n}\n\n/**\n * Extracts the configuration from a trait reference.\n * \n * Returns the configuration object for trait references that support it\n * (object references with 'config' property). Returns undefined for\n * string references and inline traits.\n * \n * @param {TraitRef} traitRef - Trait reference to extract config from\n * @returns {TraitConfig | undefined} Trait configuration or undefined\n *\n * @example\n * getTraitConfig('MyTrait'); // returns undefined\n * getTraitConfig({ name: 'MyTrait' }); // returns undefined\n * getTraitConfig({ ref: 'MyTrait', config: { option: 'value' } }); // returns config object\n */\nexport function getTraitConfig(traitRef: TraitRef): CallSiteConfig | undefined {\n if (typeof traitRef === 'string') {\n return undefined;\n }\n if (isInlineTrait(traitRef)) {\n return undefined; // Inline traits don't have config\n }\n return traitRef.config;\n}\n\n/**\n * Normalizes a trait reference to object form.\n * \n * Converts any trait reference format (string, inline, object) to a\n * standardized object format with 'ref' and optional 'config' properties.\n * \n * @param {TraitRef} traitRef - Trait reference to normalize\n * @returns {{ ref: string; config?: TraitConfig }} Normalized trait reference\n *\n * @example\n * normalizeTraitRef('MyTrait'); // returns { ref: 'MyTrait' }\n * normalizeTraitRef({ name: 'MyTrait' }); // returns { ref: 'MyTrait' }\n * normalizeTraitRef({ ref: 'MyTrait', config: {...} }); // returns original\n */\nexport function normalizeTraitRef(traitRef: TraitRef): { ref: string; config?: CallSiteConfig } {\n if (typeof traitRef === 'string') {\n return { ref: traitRef };\n }\n if (isInlineTrait(traitRef)) {\n return { ref: traitRef.name };\n }\n return traitRef;\n}\n\n// ============================================================================\n// Type exports\n// ============================================================================\n\nexport type TraitInput = z.input<typeof TraitSchema>;\nexport type TraitReferenceInput = z.input<typeof TraitReferenceSchema>;\n\n// Backward compatibility aliases\nexport type OrbitalTraitRef = TraitRef;\nexport const OrbitalTraitRefSchema = TraitRefSchema;\n","/**\n * Page Types for Orbital Units\n *\n * Defines OrbitalPage type for pages within an Orbital Unit.\n *\n * IMPORTANT: Trait-driven UI architecture requires pages to have traits.\n * Static sections are NO LONGER SUPPORTED.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\nimport type { PageId, TraitId, EntityId } from './identity.js';\nimport { PageIdSchema, TraitIdSchema, EntityIdSchema } from './identity.js';\nimport { TraitConfigSchema, type TraitConfig } from './trait.js';\n\n// ============================================================================\n// View Type\n// ============================================================================\n\n/**\n * Page view types.\n * Note: viewType may be deprecated in favor of trait-driven UI.\n */\nexport type ViewType = 'list' | 'detail' | 'create' | 'edit' | 'dashboard' | 'custom';\n\nexport const ViewTypeSchema = z.enum([\n 'list',\n 'detail',\n 'create',\n 'edit',\n 'dashboard',\n 'custom',\n]);\n\n// ============================================================================\n// Trait Reference\n// ============================================================================\n\n/**\n * Trait reference on a page.\n */\nexport type PageTraitRef = {\n /** Trait name from library */\n ref: string;\n /** V4 dual-carry id sibling of `ref` — optional until the Phase-7 flip. */\n refId?: TraitId;\n /** Entity this trait operates on */\n linkedEntity?: string;\n /** V4 dual-carry id sibling of `linkedEntity` — optional until the Phase-7 flip. */\n linkedEntityId?: EntityId;\n /** Additional trait configuration */\n config?: TraitConfig;\n};\n\nexport const PageTraitRefSchema = z.object({\n ref: z.string().min(1, 'Trait ref is required'),\n refId: TraitIdSchema.optional(),\n linkedEntity: z.string().optional(),\n linkedEntityId: EntityIdSchema.optional(),\n config: TraitConfigSchema.optional(),\n});\n\n// ============================================================================\n// Orbital Page\n// ============================================================================\n\n/**\n * OrbitalPage - a page definition within an Orbital Unit.\n *\n * TRAIT-DRIVEN: Pages must have traits array. Sections are NOT supported.\n */\nexport type OrbitalPage = {\n /** V4 dual-carry id sibling of `name` — optional until the Phase-7 flip. */\n id?: PageId;\n\n /** Page name (PascalCase, e.g., \"TasksPage\") */\n name: string;\n\n /** URL path (e.g., \"/tasks\", \"/tasks/:id\") */\n path: string;\n\n /** View type (optional in trait-driven mode) */\n viewType?: ViewType;\n\n /** Page title (optional, defaults to derived from name) */\n title?: string;\n\n /** Primary entity for this page */\n primaryEntity?: string;\n\n /**\n * Traits that drive UI for this page.\n * REQUIRED in trait-driven architecture.\n */\n traits?: PageTraitRef[];\n\n /** Is this the initial page for navigation? */\n isInitial?: boolean;\n};\n\n/**\n * Strict Zod schema for trait-driven pages.\n * Rejects unknown properties like 'sections'.\n */\nexport const OrbitalPageStrictSchema = z.object({\n id: PageIdSchema.optional(),\n name: z.string().min(1, 'Page name is required'),\n path: z.string().min(1, 'Page path is required').startsWith('/', 'Path must start with /'),\n primaryEntity: z.string().min(1, 'Primary entity is required'),\n traits: z.array(PageTraitRefSchema).min(1, 'Page must have at least one trait'),\n title: z.string().optional(),\n}).strict(); // Reject unknown keys like 'sections'\n\n/**\n * Zod schema for OrbitalPage.\n * Trait-driven: pages have traits instead of static sections/patterns.\n * Uses .strict() to reject unknown keys like 'sections'.\n */\nexport const OrbitalPageSchema = z.object({\n id: PageIdSchema.optional(),\n name: z.string().min(1, 'Page name is required'),\n path: z.string().min(1, 'Page path is required').startsWith('/', 'Path must start with /'),\n viewType: ViewTypeSchema.optional(),\n title: z.string().optional(),\n primaryEntity: z.string().optional(),\n traits: z.array(PageTraitRefSchema).optional(),\n isInitial: z.boolean().optional(),\n}).strict(); // Reject unknown keys like 'sections' - use traits with render_ui effects\n\nexport type OrbitalPageInput = z.input<typeof OrbitalPageSchema>;\nexport type OrbitalPageStrictInput = z.input<typeof OrbitalPageStrictSchema>;\n\n// ============================================================================\n// Type Aliases (for cleaner imports)\n// ============================================================================\n\n/** Alias for OrbitalPage - preferred name */\nexport type Page = OrbitalPage;\n\n/** Alias for OrbitalPageSchema - preferred name */\nexport const PageSchema = OrbitalPageSchema;\n","/**\n * Domain Context Types (Self-Contained)\n *\n * Defines domain classification types for applications.\n * Copied from schema/domain-context.ts to make orbitals/ self-contained.\n *\n * @packageDocumentation\n */\n\nimport { z } from \"zod\";\n\n// ============================================================================\n// Domain Categories\n// ============================================================================\n\n/**\n * High-level domain categories\n */\nexport type DomainCategory =\n | \"healthcare\"\n | \"education\"\n | \"finance\"\n | \"ecommerce\"\n | \"real-estate\"\n | \"logistics\"\n | \"hospitality\"\n | \"hr-management\"\n | \"project-management\"\n | \"social\"\n | \"content-management\"\n | \"iot\"\n | \"analytics\"\n | \"game\"\n | \"custom\";\n\nexport const DomainCategorySchema = z.enum([\n \"healthcare\",\n \"education\",\n \"finance\",\n \"ecommerce\",\n \"real-estate\",\n \"logistics\",\n \"hospitality\",\n \"hr-management\",\n \"project-management\",\n \"social\",\n \"content-management\",\n \"iot\",\n \"analytics\",\n \"game\",\n \"custom\",\n]);\n\n// ============================================================================\n// Agent Domain Categories (simplified for LLM-based tools)\n// ============================================================================\n\n/**\n * Simplified domain categories used by the agent tools for application classification.\n * All agent tools and skill generators should derive from this constant.\n */\nexport const AGENT_DOMAIN_CATEGORIES = [\n \"game\",\n \"business\",\n \"dashboard\",\n \"form\",\n \"content\",\n \"social\",\n \"ecommerce\",\n \"workflow\",\n] as const;\n\nexport type AgentDomainCategory = (typeof AGENT_DOMAIN_CATEGORIES)[number];\n\nexport const AgentDomainCategorySchema = z.enum([...AGENT_DOMAIN_CATEGORIES]);\n\n// ============================================================================\n// Game Sub-Categories\n// ============================================================================\n\n/**\n * Game genre sub-categories\n */\nexport type GameSubCategory =\n | \"platformer\"\n | \"shooter\"\n | \"puzzle\"\n | \"rpg\"\n | \"board\"\n | \"racing\"\n | \"fighting\"\n | \"tower-defense\"\n | \"endless-runner\"\n | \"simulation\"\n | \"arcade\"\n | \"adventure\";\n\nexport const GameSubCategorySchema = z.enum([\n \"platformer\",\n \"shooter\",\n \"puzzle\",\n \"rpg\",\n \"board\",\n \"racing\",\n \"fighting\",\n \"tower-defense\",\n \"endless-runner\",\n \"simulation\",\n \"arcade\",\n \"adventure\",\n]);\n\n// ============================================================================\n// Node Classification\n// ============================================================================\n\n/**\n * Domain vs System classification\n */\nexport type NodeClassification = \"domain\" | \"system\";\n\nexport const NodeClassificationSchema = z.enum([\"domain\", \"system\"]);\n\n// ============================================================================\n// Semantic Roles\n// ============================================================================\n\nexport type StateSemanticRole =\n | \"pending\"\n | \"active\"\n | \"completed\"\n | \"cancelled\"\n | \"error\"\n | \"suspended\"\n | \"blocked\"\n | \"domain_workflow\"\n | \"domain_status\"\n | \"system_loading\"\n | \"system_error\"\n | \"system_idle\"\n | \"system_editing\"\n | \"system_confirming\";\n\nexport const StateSemanticRoleSchema = z.enum([\n \"pending\",\n \"active\",\n \"completed\",\n \"cancelled\",\n \"error\",\n \"suspended\",\n \"blocked\",\n \"domain_workflow\",\n \"domain_status\",\n \"system_loading\",\n \"system_error\",\n \"system_idle\",\n \"system_editing\",\n \"system_confirming\",\n]);\n\nexport type EventSemanticRole =\n | \"domain_action\"\n | \"domain_trigger\"\n | \"system_crud\"\n | \"system_navigation\"\n | \"system_form\"\n | \"system_ui\";\n\nexport const EventSemanticRoleSchema = z.enum([\n \"domain_action\",\n \"domain_trigger\",\n \"system_crud\",\n \"system_navigation\",\n \"system_form\",\n \"system_ui\",\n]);\n\nexport type EntitySemanticRole =\n | \"domain_core\"\n | \"domain_supporting\"\n | \"domain_reference\"\n | \"system_user\"\n | \"system_config\"\n | \"system_audit\";\n\nexport const EntitySemanticRoleSchema = z.enum([\n \"domain_core\",\n \"domain_supporting\",\n \"domain_reference\",\n \"system_user\",\n \"system_config\",\n \"system_audit\",\n]);\n\n// ============================================================================\n// Domain Vocabulary\n// ============================================================================\n\n/**\n * Domain-specific vocabulary for naming conventions.\n * Maps generic terms to domain-appropriate labels.\n */\nexport type DomainVocabulary = {\n /** Label for items (e.g., \"Task\", \"Cargo\", \"Patient\") */\n item?: string;\n /** Label for collections (e.g., \"Tasks\", \"Inventory\", \"Patients\") */\n collection?: string;\n /** Label for create action (e.g., \"Add\", \"Recruit\", \"Admit\") */\n create?: string;\n /** Label for delete action (e.g., \"Remove\", \"Discharge\", \"Archive\") */\n delete?: string;\n /** Label for container (e.g., \"List\", \"Hold\", \"Ward\") */\n container?: string;\n /** Additional custom vocabulary */\n [key: string]: string | undefined;\n};\n\nexport const DomainVocabularySchema = z\n .record(z.string(), z.string())\n .optional();\n\n// ============================================================================\n// Domain Context (Simplified for Design System)\n// ============================================================================\n\n/**\n * User persona for UX decisions\n */\nexport type UserPersona = {\n /** Persona name */\n name: string;\n /** Role for RBAC */\n role?: string;\n /** Primary device */\n device?: \"mobile\" | \"tablet\" | \"desktop\";\n};\n\nexport const UserPersonaSchema = z.object({\n name: z.string().min(1),\n role: z.string().optional(),\n device: z.enum([\"mobile\", \"tablet\", \"desktop\"]).optional(),\n});\n\n/**\n * Domain context - user request + classification\n */\nexport type DomainContext = {\n /** Original user request - verbatim (typically at schema level) */\n request: string;\n /**\n * The verbatim excerpt or summary of the user request that produced THIS orbital.\n *\n * Purpose: Traceability - know exactly what the user asked for that led to this orbital.\n *\n * Can be:\n * - Exact quote: \"...with a calendar that syncs with Google Calendar...\"\n * - Summarized: \"Calendar integration with Google Calendar sync\"\n *\n * Examples:\n * - Request: \"Build a project management app with tasks, team collaboration, and Gantt charts\"\n * - Task orbital: requestFragment: \"tasks\"\n * - Team orbital: requestFragment: \"team collaboration\"\n * - Timeline orbital: requestFragment: \"Gantt charts\"\n *\n * This enables:\n * - Understanding WHY this orbital exists\n * - Regenerating with original context preserved\n * - Validating the orbital matches user intent\n */\n requestFragment?: string;\n /** Domain category */\n category: AgentDomainCategory;\n /** Sub-domain for more specific classification */\n subDomain?: string;\n /** User personas */\n personas?: UserPersona[];\n /** Domain-specific vocabulary for naming */\n vocabulary?: DomainVocabulary;\n};\n\nexport const DomainContextSchema = z.object({\n request: z.string().min(1, \"Original request is required\"),\n requestFragment: z.string().optional(),\n category: AgentDomainCategorySchema,\n subDomain: z.string().optional(),\n personas: z.array(UserPersonaSchema).optional(),\n vocabulary: DomainVocabularySchema.optional(),\n});\n\n// ============================================================================\n// UX Hints\n// ============================================================================\n\n/**\n * UX hints for guiding UI generation.\n * These inform pattern selection and layout decisions.\n */\n/**\n * UX hints for guiding UI generation.\n * These inform pattern selection and layout decisions.\n *\n * Note: These are HINTS, not strict requirements. LLMs may use any string value\n * including 'dashboard-grid', 'none', etc. The subagent generator interprets these\n * flexibly to produce appropriate render-ui effects.\n */\nexport type UXHints = {\n /** Overall user flow pattern (e.g., 'hub-spoke', 'crud-cycle', 'linear') */\n flowPattern?: string;\n /** Pattern for displaying lists (e.g., 'entity-table', 'entity-cards', 'dashboard-grid', 'none') */\n listPattern?: string;\n /** Pattern for create/edit forms (e.g., 'modal', 'drawer', 'page', 'none') */\n formPattern?: string;\n /** Pattern for entity detail views (e.g., 'drawer', 'page', 'split', 'none') */\n detailPattern?: string;\n /** Cross-orbital navigation links */\n relatedLinks?: RelatedLink[];\n};\n\n// UX hints use flexible string types - they are guidance, not strict validation\nexport const UXHintsSchema = z.object({\n flowPattern: z.string().optional(),\n listPattern: z.string().optional(),\n formPattern: z.string().optional(),\n detailPattern: z.string().optional(),\n relatedLinks: z.array(z.lazy(() => RelatedLinkSchema)).optional(),\n});\n\n/**\n * Related link for cross-orbital navigation.\n */\nexport type RelatedLink = {\n /** Field name of the relation (e.g., \"customerId\") */\n relation: string;\n /** Button/link text (e.g., \"View Customer\") */\n label: string;\n /** Target view type */\n targetView?: \"list\" | \"detail\";\n};\n\nexport const RelatedLinkSchema = z.object({\n relation: z.string().min(1),\n label: z.string().min(1),\n targetView: z.enum([\"list\", \"detail\"]).optional(),\n});\n\n// ============================================================================\n// Suggested Guards (Pre-Generation)\n// ============================================================================\n\n/**\n * Suggested guard - natural language description for decomposition phase.\n * Generator converts these to S-expressions during generation.\n */\nexport type SuggestedGuard = {\n /** Unique identifier */\n id: string;\n /** Natural language description (e.g., \"Weight must be under 1000kg\") */\n description: string;\n /** Events this guard applies to (e.g., [\"Cargo.CREATE\", \"Cargo.UPDATE\"]) */\n appliesTo: string[];\n};\n\nexport const SuggestedGuardSchema = z.object({\n id: z.string().min(1),\n description: z.string().min(1),\n appliesTo: z.array(z.string().min(1)),\n});\n\n// ============================================================================\n// Design Preferences\n// ============================================================================\n\n/**\n * Design preferences for visual styling\n */\nexport type DesignPreferences = {\n /** Design style */\n style?: \"minimal\" | \"modern\" | \"playful\" | \"data-driven\" | \"immersive\";\n /** Primary color (hex) */\n primaryColor?: string;\n /** Target device */\n device?: \"mobile\" | \"tablet\" | \"desktop\" | \"all\";\n /** Dark mode */\n darkMode?: boolean;\n /** UX hints for pattern selection */\n uxHints?: UXHints;\n};\n\nexport const DesignPreferencesSchema = z.object({\n style: z\n .enum([\"minimal\", \"modern\", \"playful\", \"data-driven\", \"immersive\"])\n .optional(),\n primaryColor: z\n .string()\n .regex(/^#[0-9A-Fa-f]{6}$/, \"Must be valid hex color\")\n .optional(),\n device: z.enum([\"mobile\", \"tablet\", \"desktop\", \"all\"]).optional(),\n darkMode: z.boolean().optional(),\n uxHints: UXHintsSchema.optional(),\n});\n\n// ============================================================================\n// Theme Definition — Skin axes (Layer 1 visual variation, see docs/Almadar_Std_Variations.md)\n// ============================================================================\n\n/** Spacing scale entry — each step pairs with a CSS `--space-N` variable */\nexport type SpacingScale = {\n space0?: string;\n space1?: string;\n space2?: string;\n space3?: string;\n space4?: string;\n space5?: string;\n space6?: string;\n space7?: string;\n space8?: string;\n space9?: string;\n space10?: string;\n space11?: string;\n space12?: string;\n};\n\nexport const SpacingScaleSchema = z.object({\n space0: z.string().optional(),\n space1: z.string().optional(),\n space2: z.string().optional(),\n space3: z.string().optional(),\n space4: z.string().optional(),\n space5: z.string().optional(),\n space6: z.string().optional(),\n space7: z.string().optional(),\n space8: z.string().optional(),\n space9: z.string().optional(),\n space10: z.string().optional(),\n space11: z.string().optional(),\n space12: z.string().optional(),\n});\n\n/**\n * Density axis — spacing rhythm + per-element heights and paddings.\n * Determines whether a UI feels compact (Linear), cozy (default), or spacious (Notion).\n */\nexport type DensityTokens = {\n spacing?: SpacingScale;\n buttonHeightSm?: string;\n buttonHeightMd?: string;\n buttonHeightLg?: string;\n inputHeightSm?: string;\n inputHeightMd?: string;\n inputHeightLg?: string;\n rowHeightCompact?: string;\n rowHeightNormal?: string;\n rowHeightSpacious?: string;\n cardPaddingSm?: string;\n cardPaddingMd?: string;\n cardPaddingLg?: string;\n dialogPadding?: string;\n sectionGap?: string;\n};\n\nexport const DensityTokensSchema = z.object({\n spacing: SpacingScaleSchema.optional(),\n buttonHeightSm: z.string().optional(),\n buttonHeightMd: z.string().optional(),\n buttonHeightLg: z.string().optional(),\n inputHeightSm: z.string().optional(),\n inputHeightMd: z.string().optional(),\n inputHeightLg: z.string().optional(),\n rowHeightCompact: z.string().optional(),\n rowHeightNormal: z.string().optional(),\n rowHeightSpacious: z.string().optional(),\n cardPaddingSm: z.string().optional(),\n cardPaddingMd: z.string().optional(),\n cardPaddingLg: z.string().optional(),\n dialogPadding: z.string().optional(),\n sectionGap: z.string().optional(),\n});\n\n/** Single entry in the type scale — size + matching line-height */\nexport type TypeScaleEntry = {\n size: string;\n lineHeight: string;\n};\n\nexport const TypeScaleEntrySchema = z.object({\n size: z.string(),\n lineHeight: z.string(),\n});\n\n/** Type slot (which family the intent renders in) */\nexport type TypeSlot = \"display\" | \"body\" | \"mono\";\n\nexport const TypeSlotSchema = z.enum([\"display\", \"body\", \"mono\"]);\n\n/** Type size key from the scale */\nexport type TypeSizeKey =\n | \"xs\"\n | \"sm\"\n | \"base\"\n | \"lg\"\n | \"xl\"\n | \"2xl\"\n | \"3xl\"\n | \"4xl\"\n | \"display-1\"\n | \"display-2\";\n\nexport const TypeSizeKeySchema = z.enum([\n \"xs\",\n \"sm\",\n \"base\",\n \"lg\",\n \"xl\",\n \"2xl\",\n \"3xl\",\n \"4xl\",\n \"display-1\",\n \"display-2\",\n]);\n\n/** Type weight key */\nexport type TypeWeight = \"normal\" | \"medium\" | \"bold\";\n\nexport const TypeWeightSchema = z.enum([\"normal\", \"medium\", \"bold\"]);\n\n/** Intent → (slot, size, weight) mapping. Authors write intent in render-ui; skin resolves. */\nexport type TypeIntent = {\n slot: TypeSlot;\n size: TypeSizeKey;\n weight: TypeWeight;\n};\n\nexport const TypeIntentSchema = z.object({\n slot: TypeSlotSchema,\n size: TypeSizeKeySchema,\n weight: TypeWeightSchema,\n});\n\nexport type TypeScale = {\n xs?: TypeScaleEntry;\n sm?: TypeScaleEntry;\n base?: TypeScaleEntry;\n lg?: TypeScaleEntry;\n xl?: TypeScaleEntry;\n \"2xl\"?: TypeScaleEntry;\n \"3xl\"?: TypeScaleEntry;\n \"4xl\"?: TypeScaleEntry;\n \"display-1\"?: TypeScaleEntry;\n \"display-2\"?: TypeScaleEntry;\n};\n\nexport const TypeScaleSchema = z.object({\n xs: TypeScaleEntrySchema.optional(),\n sm: TypeScaleEntrySchema.optional(),\n base: TypeScaleEntrySchema.optional(),\n lg: TypeScaleEntrySchema.optional(),\n xl: TypeScaleEntrySchema.optional(),\n \"2xl\": TypeScaleEntrySchema.optional(),\n \"3xl\": TypeScaleEntrySchema.optional(),\n \"4xl\": TypeScaleEntrySchema.optional(),\n \"display-1\": TypeScaleEntrySchema.optional(),\n \"display-2\": TypeScaleEntrySchema.optional(),\n});\n\nexport type TypeIntentMap = {\n headingMajor?: TypeIntent;\n headingMinor?: TypeIntent;\n bodyEmphasis?: TypeIntent;\n bodyDefault?: TypeIntent;\n bodyQuiet?: TypeIntent;\n caption?: TypeIntent;\n numeric?: TypeIntent;\n};\n\nexport const TypeIntentMapSchema = z.object({\n headingMajor: TypeIntentSchema.optional(),\n headingMinor: TypeIntentSchema.optional(),\n bodyEmphasis: TypeIntentSchema.optional(),\n bodyDefault: TypeIntentSchema.optional(),\n bodyQuiet: TypeIntentSchema.optional(),\n caption: TypeIntentSchema.optional(),\n numeric: TypeIntentSchema.optional(),\n});\n\n/**\n * Type axis — family triplet, size scale, and intent mapping.\n * Determines whether a UI reads as editorial (serif display + sans body),\n * tech (sans + mono numeric), or dense (mono everywhere, tight leading).\n */\nexport type TypeScaleTokens = {\n displayFamily?: string;\n bodyFamily?: string;\n monoFamily?: string;\n scale?: TypeScale;\n intents?: TypeIntentMap;\n};\n\nexport const TypeScaleTokensSchema = z.object({\n displayFamily: z.string().optional(),\n bodyFamily: z.string().optional(),\n monoFamily: z.string().optional(),\n scale: TypeScaleSchema.optional(),\n intents: TypeIntentMapSchema.optional(),\n});\n\n/** Duration palette key */\nexport type MotionDurationKey =\n | \"instant\"\n | \"fast\"\n | \"normal\"\n | \"slow\"\n | \"dramatic\";\n\nexport const MotionDurationKeySchema = z.enum([\n \"instant\",\n \"fast\",\n \"normal\",\n \"slow\",\n \"dramatic\",\n]);\n\n/** Easing palette key */\nexport type MotionEasingKey = \"linear\" | \"standard\" | \"emphasized\" | \"spring\";\n\nexport const MotionEasingKeySchema = z.enum([\n \"linear\",\n \"standard\",\n \"emphasized\",\n \"spring\",\n]);\n\n/** Per-intent motion specification (duration + easing) */\nexport type MotionIntent = {\n duration: MotionDurationKey;\n easing: MotionEasingKey;\n};\n\nexport const MotionIntentSchema = z.object({\n duration: MotionDurationKeySchema,\n easing: MotionEasingKeySchema,\n});\n\nexport type MotionDurationPalette = {\n instant?: string;\n fast?: string;\n normal?: string;\n slow?: string;\n dramatic?: string;\n};\n\nexport const MotionDurationPaletteSchema = z.object({\n instant: z.string().optional(),\n fast: z.string().optional(),\n normal: z.string().optional(),\n slow: z.string().optional(),\n dramatic: z.string().optional(),\n});\n\nexport type MotionEasingPalette = {\n linear?: string;\n standard?: string;\n emphasized?: string;\n spring?: string;\n};\n\nexport const MotionEasingPaletteSchema = z.object({\n linear: z.string().optional(),\n standard: z.string().optional(),\n emphasized: z.string().optional(),\n spring: z.string().optional(),\n});\n\nexport type MotionIntentMap = {\n enter?: MotionIntent;\n exit?: MotionIntent;\n hover?: MotionIntent;\n press?: MotionIntent;\n expand?: MotionIntent;\n transition?: MotionIntent;\n};\n\nexport const MotionIntentMapSchema = z.object({\n enter: MotionIntentSchema.optional(),\n exit: MotionIntentSchema.optional(),\n hover: MotionIntentSchema.optional(),\n press: MotionIntentSchema.optional(),\n expand: MotionIntentSchema.optional(),\n transition: MotionIntentSchema.optional(),\n});\n\n/**\n * Motion axis — duration palette + easing palette + per-intent mapping.\n * Mechanical (linear, fast) vs organic (cubic-bezier, medium) vs dramatic (spring, slow).\n */\nexport type MotionTokens = {\n durations?: MotionDurationPalette;\n easings?: MotionEasingPalette;\n intents?: MotionIntentMap;\n};\n\nexport const MotionTokensSchema = z.object({\n durations: MotionDurationPaletteSchema.optional(),\n easings: MotionEasingPaletteSchema.optional(),\n intents: MotionIntentMapSchema.optional(),\n});\n\n/** Icon family selector */\nexport type IconFamily =\n | \"lucide\"\n | \"phosphor-outline\"\n | \"phosphor-fill\"\n | \"phosphor-duotone\"\n | \"tabler\"\n | \"fa-solid\";\n\nexport const IconFamilySchema = z.enum([\n \"lucide\",\n \"phosphor-outline\",\n \"phosphor-fill\",\n \"phosphor-duotone\",\n \"tabler\",\n \"fa-solid\",\n]);\n\n/**\n * Iconography axis — icon set + stroke + default size.\n * Outline (Lucide) vs filled (Phosphor-fill) vs duotone (Phosphor-duotone).\n */\nexport type IconographyTokens = {\n family?: IconFamily;\n strokeWidth?: string;\n defaultSize?: string;\n};\n\nexport const IconographyTokensSchema = z.object({\n family: IconFamilySchema.optional(),\n strokeWidth: z.string().optional(),\n defaultSize: z.string().optional(),\n});\n\n/**\n * Elevation axis — per-layer shadow mapping.\n * Each value references a `--shadow-*` token or a raw CSS shadow value.\n */\nexport type ElevationTokens = {\n cardElevation?: string;\n popoverElevation?: string;\n dialogElevation?: string;\n toastElevation?: string;\n};\n\nexport const ElevationTokensSchema = z.object({\n cardElevation: z.string().optional(),\n popoverElevation: z.string().optional(),\n dialogElevation: z.string().optional(),\n toastElevation: z.string().optional(),\n});\n\n/**\n * Geometry axis — radius rhythm + border-width rhythm with intent.\n * Sharp (radius 0) vs soft (radius 8/12) vs pill (radius full on interactive).\n */\nexport type GeometryTokens = {\n radiusContainer?: string;\n radiusInteractive?: string;\n radiusPill?: string;\n borderHairline?: string;\n borderStandard?: string;\n borderHeavy?: string;\n};\n\nexport const GeometryTokensSchema = z.object({\n radiusContainer: z.string().optional(),\n radiusInteractive: z.string().optional(),\n radiusPill: z.string().optional(),\n borderHairline: z.string().optional(),\n borderStandard: z.string().optional(),\n borderHeavy: z.string().optional(),\n});\n\n/**\n * Color axis — semantic + surface + feedback color tokens as a typed bundle.\n *\n * Replaces the free-form `colors: Record<string, string>` on `ThemeTokens` for\n * authors targeting the typed SkinSpec entrypoint. Every field maps 1:1 to a\n * `--color-*` CSS custom property emitted by themes. All fields are optional\n * so a partial slice can layer onto a default (light/dark mode pair, etc.).\n */\nexport type ColorTokens = {\n /* Brand / accent */\n primary?: string;\n primaryHover?: string;\n primaryForeground?: string;\n secondary?: string;\n secondaryHover?: string;\n secondaryForeground?: string;\n accent?: string;\n accentForeground?: string;\n muted?: string;\n mutedForeground?: string;\n\n /* Surface palette */\n background?: string;\n foreground?: string;\n card?: string;\n cardForeground?: string;\n surface?: string;\n border?: string;\n input?: string;\n ring?: string;\n\n /* Feedback */\n error?: string;\n errorForeground?: string;\n success?: string;\n successForeground?: string;\n warning?: string;\n warningForeground?: string;\n info?: string;\n infoForeground?: string;\n\n /* Optional table-specific (themes that ship them; default to neutrals) */\n tableHeader?: string;\n tableBorder?: string;\n tableRowHover?: string;\n surfaceHover?: string;\n borderHover?: string;\n placeholder?: string;\n};\n\nexport const ColorTokensSchema = z.object({\n primary: z.string().optional(),\n primaryHover: z.string().optional(),\n primaryForeground: z.string().optional(),\n secondary: z.string().optional(),\n secondaryHover: z.string().optional(),\n secondaryForeground: z.string().optional(),\n accent: z.string().optional(),\n accentForeground: z.string().optional(),\n muted: z.string().optional(),\n mutedForeground: z.string().optional(),\n background: z.string().optional(),\n foreground: z.string().optional(),\n card: z.string().optional(),\n cardForeground: z.string().optional(),\n surface: z.string().optional(),\n border: z.string().optional(),\n input: z.string().optional(),\n ring: z.string().optional(),\n error: z.string().optional(),\n errorForeground: z.string().optional(),\n success: z.string().optional(),\n successForeground: z.string().optional(),\n warning: z.string().optional(),\n warningForeground: z.string().optional(),\n info: z.string().optional(),\n infoForeground: z.string().optional(),\n tableHeader: z.string().optional(),\n tableBorder: z.string().optional(),\n tableRowHover: z.string().optional(),\n surfaceHover: z.string().optional(),\n borderHover: z.string().optional(),\n placeholder: z.string().optional(),\n});\n\n/**\n * Illustration style preset for empty/loading/error/onboarding states.\n *\n * - `minimal`: icon + short text, no imagery (current default)\n * - `illustrated`: svg illustration library (undraw-style)\n * - `photo`: stock photography\n * - `text-only`: clean text, no imagery\n * - `mascot`: branded character (Mailchimp-style)\n */\nexport type IllustrationStyle =\n | \"minimal\"\n | \"illustrated\"\n | \"photo\"\n | \"text-only\"\n | \"mascot\";\n\nexport const IllustrationStyleSchema = z.enum([\n \"minimal\",\n \"illustrated\",\n \"photo\",\n \"text-only\",\n \"mascot\",\n]);\n\n/**\n * Illustration axis — empty/loading/error/onboarding imagery style.\n * `style` selects the preset; the per-state `*Asset` fields are optional\n * overrides for skins that want to ship custom artwork.\n */\nexport type IllustrationTokens = {\n style?: IllustrationStyle;\n emptyAsset?: string;\n loadingAsset?: string;\n errorAsset?: string;\n onboardingAsset?: string;\n};\n\nexport const IllustrationTokensSchema = z.object({\n style: IllustrationStyleSchema.optional(),\n emptyAsset: z.string().optional(),\n loadingAsset: z.string().optional(),\n errorAsset: z.string().optional(),\n onboardingAsset: z.string().optional(),\n});\n\n/**\n * Theme tokens - CSS custom properties for design system.\n *\n * Layer 1 visual variation (see docs/Almadar_Std_Variations.md): the original\n * `colors`/`radii`/`spacing`/`typography`/`shadows` Record fields are kept for\n * backward compatibility. The new typed axes (`density`, `typeScale`, `motion`,\n * `iconography`, `elevation`, `geometry`) carry the structured token surface\n * that lets two themes feel like different products, not just different paint.\n */\nexport type ThemeTokens = {\n /**\n * Color axis — typed semantic + surface + feedback colors.\n * Replaces the free-form `colors` Record below for new authors.\n */\n color?: ColorTokens;\n /** Density axis — spacing rhythm, per-element heights and paddings */\n density?: DensityTokens;\n /** Type axis — family triplet, scale, intent mapping */\n typeScale?: TypeScaleTokens;\n /** Motion axis — duration palette, easing palette, intent mapping */\n motion?: MotionTokens;\n /** Iconography axis — icon family, stroke, default size */\n iconography?: IconographyTokens;\n /** Elevation axis — per-layer shadow mapping */\n elevation?: ElevationTokens;\n /** Geometry axis — radius rhythm, border-width rhythm with intent */\n geometry?: GeometryTokens;\n /** Illustration axis — empty/loading/error state imagery style */\n illustration?: IllustrationTokens;\n\n // ── Legacy free-form maps (pre-Layer-1). Kept for back-compat with\n // older callers that emit raw `--color-*` / `--radius-*` etc. as\n // string maps. New authors should use the typed axes above.\n /** @deprecated Use `color` (typed). */\n colors?: Record<string, string>;\n /** @deprecated Use `geometry.radius*` and theme CSS for full radius scale. */\n radii?: Record<string, string>;\n /** @deprecated Use `density.spacing` (typed scale). */\n spacing?: Record<string, string>;\n /** @deprecated Use `typeScale` (typed family + scale + intents). */\n typography?: Record<string, string>;\n /** @deprecated Use `elevation` (typed per-layer mapping). */\n shadows?: Record<string, string>;\n};\n\nexport const ThemeTokensSchema = z.object({\n color: ColorTokensSchema.optional(),\n density: DensityTokensSchema.optional(),\n typeScale: TypeScaleTokensSchema.optional(),\n motion: MotionTokensSchema.optional(),\n iconography: IconographyTokensSchema.optional(),\n elevation: ElevationTokensSchema.optional(),\n geometry: GeometryTokensSchema.optional(),\n illustration: IllustrationTokensSchema.optional(),\n // Legacy\n colors: z.record(z.string(), z.string()).optional(),\n radii: z.record(z.string(), z.string()).optional(),\n spacing: z.record(z.string(), z.string()).optional(),\n typography: z.record(z.string(), z.string()).optional(),\n shadows: z.record(z.string(), z.string()).optional(),\n});\n\n/**\n * Theme variant - overrides for a specific mode (e.g., dark mode).\n * Mirrors ThemeTokens fields with the same backward-compat + new-axis structure.\n */\nexport type ThemeVariant = {\n /** Color axis overrides */\n color?: ColorTokens;\n /** Density axis overrides */\n density?: DensityTokens;\n /** Type axis overrides */\n typeScale?: TypeScaleTokens;\n /** Motion axis overrides */\n motion?: MotionTokens;\n /** Iconography axis overrides */\n iconography?: IconographyTokens;\n /** Elevation axis overrides */\n elevation?: ElevationTokens;\n /** Geometry axis overrides */\n geometry?: GeometryTokens;\n /** Illustration axis overrides */\n illustration?: IllustrationTokens;\n\n // ── Legacy free-form maps (pre-Layer-1). See ThemeTokens for guidance.\n /** @deprecated Use `color`. */\n colors?: Record<string, string>;\n /** @deprecated */\n radii?: Record<string, string>;\n /** @deprecated */\n spacing?: Record<string, string>;\n /** @deprecated */\n typography?: Record<string, string>;\n /** @deprecated */\n shadows?: Record<string, string>;\n};\n\nexport const ThemeVariantSchema = z.object({\n color: ColorTokensSchema.optional(),\n density: DensityTokensSchema.optional(),\n typeScale: TypeScaleTokensSchema.optional(),\n motion: MotionTokensSchema.optional(),\n iconography: IconographyTokensSchema.optional(),\n elevation: ElevationTokensSchema.optional(),\n geometry: GeometryTokensSchema.optional(),\n illustration: IllustrationTokensSchema.optional(),\n colors: z.record(z.string(), z.string()).optional(),\n radii: z.record(z.string(), z.string()).optional(),\n spacing: z.record(z.string(), z.string()).optional(),\n typography: z.record(z.string(), z.string()).optional(),\n shadows: z.record(z.string(), z.string()).optional(),\n});\n\n/**\n * Theme definition - design system for an orbital.\n */\nexport type ThemeDefinition = {\n /** Theme name */\n name: string;\n /** Base tokens */\n tokens: ThemeTokens;\n /** Named variants (e.g., \"dark\", \"high-contrast\") */\n variants?: Record<string, ThemeVariant>;\n};\n\nexport const ThemeDefinitionSchema = z.object({\n name: z.string().min(1, \"Theme name is required\"),\n tokens: ThemeTokensSchema,\n variants: z.record(z.string(), ThemeVariantSchema).optional(),\n});\n\n/**\n * ThemeRef - Theme can be inline definition OR reference to imported theme.\n *\n * Reference format: \"Alias.theme\"\n */\nexport type ThemeRef = ThemeDefinition | string;\n\n/**\n * Checks if a theme reference is a string.\n * \n * Type guard to determine if a theme reference is a string reference\n * (format: \"Alias.theme\") rather than an inline theme definition.\n * \n * @param {ThemeRef} theme - Theme reference to check\n * @returns {boolean} True if theme is a string reference, false otherwise\n * \n * @example\n * isThemeReference(\"Ocean.theme\"); // returns true\n * isThemeReference({ name: \"ocean\", colors: {...} }); // returns false\n */\nexport function isThemeReference(theme: ThemeRef): theme is string {\n return typeof theme === \"string\";\n}\n\n/**\n * Validate theme reference format: \"Alias.theme\"\n */\nexport const ThemeRefStringSchema = z\n .string()\n .regex(\n /^[A-Z][a-zA-Z0-9]*\\.theme$/,\n 'Theme reference must be in format \"Alias.theme\" (e.g., \"Ocean.theme\")',\n );\n\nexport const ThemeRefSchema = z.union([\n ThemeDefinitionSchema,\n ThemeRefStringSchema,\n]);\n\n// ============================================================================\n// SkinSpec — Layer 1 visual variation vocabulary (docs/Almadar_Std_Variations.md §2.3)\n// ============================================================================\n\n/**\n * `SkinSpec` is an alias for `ThemeDefinition` — same object, doc-aligned\n * name. The doc refers to a complete eight-axis visual identity as a\n * \"SkinSpec\"; in the type system it's a `ThemeDefinition` whose `tokens`\n * field carries the eight typed slices (`color`, `density`, `typeScale`,\n * `geometry`, `elevation`, `motion`, `iconography`, `illustration`).\n *\n * There is no separate type — this alias prevents the two surfaces from\n * drifting.\n */\nexport type SkinSpec = ThemeDefinition;\nexport const SkinSpecSchema = ThemeDefinitionSchema;\n\n/**\n * Slice-name aliases — the doc and `_contract.md` refer to each axis as\n * `<Name>Slice`. The existing types use `<Name>Tokens`. These aliases let\n * skin authors write the doc's vocabulary while pointing at the single\n * canonical type definition. No forks.\n */\nexport type ColorSlice = ColorTokens;\nexport type DensitySlice = DensityTokens;\nexport type TypeSlice = TypeScaleTokens;\nexport type GeometrySlice = GeometryTokens;\nexport type ElevationSlice = ElevationTokens;\nexport type MotionSlice = MotionTokens;\nexport type IconographySlice = IconographyTokens;\nexport type IllustrationSlice = IllustrationTokens;\n\nexport const ColorSliceSchema = ColorTokensSchema;\nexport const DensitySliceSchema = DensityTokensSchema;\nexport const TypeSliceSchema = TypeScaleTokensSchema;\nexport const GeometrySliceSchema = GeometryTokensSchema;\nexport const ElevationSliceSchema = ElevationTokensSchema;\nexport const MotionSliceSchema = MotionTokensSchema;\nexport const IconographySliceSchema = IconographyTokensSchema;\nexport const IllustrationSliceSchema = IllustrationTokensSchema;\n\n// ============================================================================\n// Design Tokens (Legacy)\n// ============================================================================\n\n/**\n * Design tokens - reusable Tailwind class collections.\n * @deprecated Use ThemeDefinition instead for new code.\n *\n * Instead of repeating raw Tailwind classes everywhere, define once and reference by name.\n * Example: `token: \"surfaces.glass\"` resolves to the Tailwind classes defined here.\n */\nexport interface DesignTokens {\n /** Surface styles: backgrounds, borders, shadows */\n surfaces?: Record<string, string>;\n /** Text styles: typography, colors */\n text?: Record<string, string>;\n /** Interactive element styles: buttons, links */\n interactive?: Record<string, string>;\n /** Effect styles: shadows, animations, transitions */\n effects?: Record<string, string>;\n /** Additional custom categories */\n [category: string]: Record<string, string> | undefined;\n}\n\nexport const DesignTokensSchema = z\n .record(z.string(), z.record(z.string(), z.string()))\n .optional();\n\n// ============================================================================\n// Custom Pattern Definitions\n// ============================================================================\n\n/**\n * Allowed HTML elements for custom patterns.\n * These are safe, semantic elements for building custom UIs.\n */\nexport const ALLOWED_CUSTOM_COMPONENTS = [\n \"div\",\n \"span\",\n \"button\",\n \"a\",\n \"p\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"header\",\n \"footer\",\n \"section\",\n \"article\",\n \"nav\",\n \"main\",\n \"aside\",\n \"ul\",\n \"ol\",\n \"li\",\n \"img\",\n \"label\",\n \"input\",\n \"form\",\n] as const;\n\nexport type AllowedCustomComponent = (typeof ALLOWED_CUSTOM_COMPONENTS)[number];\n\n/**\n * Custom pattern definition for app-specific reusable patterns.\n *\n * Register custom designs that can be referenced by name throughout the schema.\n */\nexport interface CustomPatternDefinition {\n /** Always 'custom' for custom patterns */\n type: \"custom\";\n /** HTML element to render */\n component: AllowedCustomComponent;\n /** Base Tailwind classes (can include {prop} placeholders) */\n className: string;\n /** Named content slots for nested content */\n slots?: string[];\n /** Configurable props that can be passed when using the pattern */\n props?: string[];\n}\n\nexport const CustomPatternDefinitionSchema = z.object({\n type: z.literal(\"custom\"),\n component: z.enum(ALLOWED_CUSTOM_COMPONENTS),\n className: z.string(),\n slots: z.array(z.string()).optional(),\n props: z.array(z.string()).optional(),\n});\n\n/**\n * Map of custom pattern names to their definitions.\n */\nexport type CustomPatternMap = Record<string, CustomPatternDefinition>;\n\nexport const CustomPatternMapSchema = z\n .record(z.string(), CustomPatternDefinitionSchema)\n .optional();\n\n// ============================================================================\n// Type exports\n// ============================================================================\n\nexport type DomainContextInput = z.input<typeof DomainContextSchema>;\nexport type DesignPreferencesInput = z.input<typeof DesignPreferencesSchema>;\nexport type UserPersonaInput = z.input<typeof UserPersonaSchema>;\nexport type DesignTokensInput = z.input<typeof DesignTokensSchema>;\nexport type CustomPatternDefinitionInput = z.input<\n typeof CustomPatternDefinitionSchema\n>;\nexport type CustomPatternMapInput = z.input<typeof CustomPatternMapSchema>;\n","/**\n * Service Types for Orbital Schema\n *\n * Defines external service integrations (REST APIs, WebSockets, MCP servers)\n * that can be used by orbital units via the `call_service` effect.\n *\n * @packageDocumentation\n */\n\nimport { z } from \"zod\";\n\n// ============================================================================\n// Service Type Enum\n// ============================================================================\n\n/**\n * Types of external services that can be integrated.\n */\nexport const SERVICE_TYPES = [\"rest\", \"socket\", \"mcp\"] as const;\n\nexport type ServiceType = (typeof SERVICE_TYPES)[number];\n\nexport const ServiceTypeSchema = z.enum(SERVICE_TYPES);\n\n// ============================================================================\n// REST Service Definition\n// ============================================================================\n\n/**\n * Configuration for a REST API service.\n *\n * @example\n * ```typescript\n * const weatherService: RestServiceDef = {\n * name: 'WeatherAPI',\n * type: 'rest',\n * baseUrl: 'https://api.openweathermap.org/data/2.5',\n * headers: {\n * 'Content-Type': 'application/json',\n * },\n * auth: {\n * type: 'api-key',\n * keyName: 'appid',\n * location: 'query',\n * },\n * };\n * ```\n */\nexport type RestServiceDef = {\n /** Unique service name (used in call_service effect) */\n name: string;\n\n /** Service type */\n type: \"rest\";\n\n /** Optional description */\n description?: string;\n\n /** Base URL for the API */\n baseUrl: string;\n\n /** Default headers to include in all requests */\n headers?: Record<string, string>;\n\n /** Authentication configuration */\n auth?: RestAuthConfig;\n\n /** Timeout in milliseconds (default: 30000) */\n timeout?: number;\n};\n\n/**\n * Authentication configuration for REST services.\n */\nexport type RestAuthConfig = {\n /** Authentication type */\n type: \"api-key\" | \"bearer\" | \"basic\" | \"oauth2\";\n\n /** For api-key: the query parameter or header name */\n keyName?: string;\n\n /** For api-key: where to place the key */\n location?: \"query\" | \"header\";\n\n /** Environment variable name containing the secret (for secure storage) */\n secretEnv?: string;\n};\n\nexport const RestAuthConfigSchema = z.object({\n type: z.enum([\"api-key\", \"bearer\", \"basic\", \"oauth2\"]),\n keyName: z.string().optional(),\n location: z.enum([\"query\", \"header\"]).optional(),\n secretEnv: z.string().optional(),\n});\n\nexport const RestServiceDefSchema = z.object({\n name: z.string().min(1, \"Service name is required\"),\n type: z.literal(\"rest\"),\n description: z.string().optional(),\n baseUrl: z.string().url(\"Base URL must be a valid URL\"),\n headers: z.record(z.string()).optional(),\n auth: RestAuthConfigSchema.optional(),\n timeout: z.number().positive().optional(),\n});\n\n// ============================================================================\n// Socket Service Definition\n// ============================================================================\n\n/**\n * Configuration for a WebSocket service.\n *\n * @example\n * ```typescript\n * const chatService: SocketServiceDef = {\n * name: 'ChatSocket',\n * type: 'socket',\n * url: 'wss://chat.example.com',\n * events: {\n * inbound: ['message_received', 'user_joined', 'user_left'],\n * outbound: ['send_message', 'join_room', 'leave_room'],\n * },\n * };\n * ```\n */\nexport type SocketServiceDef = {\n /** Unique service name */\n name: string;\n\n /** Service type */\n type: \"socket\";\n\n /** Optional description */\n description?: string;\n\n /** WebSocket URL */\n url: string;\n\n /** Event definitions */\n events: SocketEvents;\n\n /** Reconnection configuration */\n reconnect?: {\n /** Enable automatic reconnection */\n enabled: boolean;\n /** Maximum reconnection attempts */\n maxAttempts?: number;\n /** Delay between attempts in ms */\n delayMs?: number;\n };\n};\n\n/**\n * Socket event definitions.\n */\nexport type SocketEvents = {\n /** Events received from server (maps to orbital events) */\n inbound: string[];\n\n /** Events sent to server (triggered by effects) */\n outbound: string[];\n};\n\nexport const SocketEventsSchema = z.object({\n inbound: z.array(z.string()),\n outbound: z.array(z.string()),\n});\n\nexport const SocketServiceDefSchema = z.object({\n name: z.string().min(1, \"Service name is required\"),\n type: z.literal(\"socket\"),\n description: z.string().optional(),\n url: z.string().url(\"WebSocket URL must be valid\"),\n events: SocketEventsSchema,\n reconnect: z\n .object({\n enabled: z.boolean(),\n maxAttempts: z.number().positive().optional(),\n delayMs: z.number().positive().optional(),\n })\n .optional(),\n});\n\n// ============================================================================\n// MCP Service Definition\n// ============================================================================\n\n/**\n * Configuration for an MCP (Model Context Protocol) server.\n *\n * @example\n * ```typescript\n * const mcpService: McpServiceDef = {\n * name: 'DatabaseMCP',\n * type: 'mcp',\n * serverPath: './mcp-servers/database',\n * capabilities: ['query', 'insert', 'update'],\n * };\n * ```\n */\nexport type McpServiceDef = {\n /** Unique service name */\n name: string;\n\n /** Service type */\n type: \"mcp\";\n\n /** Optional description */\n description?: string;\n\n /** Path to MCP server executable or module */\n serverPath: string;\n\n /** List of capabilities/tools exposed by the MCP server */\n capabilities: string[];\n\n /** Environment variables to pass to the MCP server */\n env?: Record<string, string>;\n};\n\nexport const McpServiceDefSchema = z.object({\n name: z.string().min(1, \"Service name is required\"),\n type: z.literal(\"mcp\"),\n description: z.string().optional(),\n serverPath: z.string().min(1, \"Server path is required\"),\n capabilities: z\n .array(z.string())\n .min(1, \"At least one capability is required\"),\n env: z.record(z.string()).optional(),\n});\n\n// ============================================================================\n// Union Type: ServiceDefinition\n// ============================================================================\n\n/**\n * Union type for all service definitions.\n */\nexport type ServiceDefinition =\n | RestServiceDef\n | SocketServiceDef\n | McpServiceDef;\n\nexport const ServiceDefinitionSchema = z.discriminatedUnion(\"type\", [\n RestServiceDefSchema,\n SocketServiceDefSchema,\n McpServiceDefSchema,\n]);\n\n// ============================================================================\n// Service Reference (Inline OR Reference)\n// ============================================================================\n\n/**\n * ServiceRef - Service can be inline definition, reference object with overrides,\n * or bare string reference to an imported service.\n *\n * Reference format: \"Alias.services.ServiceName\"\n */\nexport type ServiceRef = ServiceDefinition | ServiceRefObject | string;\n\n/**\n * Phase F: Service reference object with override fields.\n *\n * Mirrors the Rust `ServiceRefObject` at\n * `orbital-rust/crates/orbital-core/src/schema/types.rs:353-375`. A caller\n * imports a service via `uses[]`, references it by `ref`, and supplies\n * any subset of these fields to override the imported service's defaults\n * during inlining.\n *\n * @example\n * ```typescript\n * const ref: ServiceRefObject = {\n * ref: \"Weather.services.openweather\",\n * baseUrl: \"https://staging.weather.example.com\",\n * headers: { \"X-Tenant\": \"acme\" },\n * };\n * ```\n */\nexport type ServiceRefObject = {\n /** Reference to imported service: \"Alias.services.ServiceName\" */\n ref: string;\n /** Override the service description */\n description?: string;\n /** Override the REST baseUrl */\n baseUrl?: string;\n /** Override or merge default headers (caller wins on key collision) */\n headers?: Record<string, string>;\n /** Override the WebSocket url */\n url?: string;\n /** Override the MCP server path */\n serverPath?: string;\n};\n\n/**\n * Checks if a service reference is a bare string reference.\n *\n * Type guard to determine if a service reference is a string reference\n * (format: \"Alias.services.ServiceName\") rather than an inline service\n * definition or a reference object.\n *\n * @param {ServiceRef} service - Service reference to check\n * @returns {boolean} True if service is a string reference, false otherwise\n *\n * @example\n * isServiceReference(\"Weather.services.openweather\"); // returns true\n * isServiceReference({ name: \"weather\", type: \"rest\" }); // returns false\n * isServiceReference({ ref: \"Weather.services.openweather\" }); // returns false\n */\nexport function isServiceReference(service: ServiceRef): service is string {\n return typeof service === \"string\";\n}\n\n/**\n * Phase F: Type guard for `ServiceRefObject` (the override-carrying form).\n *\n * @param {ServiceRef} service - Service reference to check\n * @returns {boolean} True if service is a ServiceRefObject\n */\nexport function isServiceReferenceObject(\n service: ServiceRef,\n): service is ServiceRefObject {\n return (\n typeof service === \"object\" &&\n service !== null &&\n \"ref\" in service &&\n !(\"type\" in service)\n );\n}\n\n/**\n * Validate service reference format: \"Alias.services.ServiceName\"\n */\nexport const ServiceRefStringSchema = z\n .string()\n .regex(\n /^[A-Z][a-zA-Z0-9]*\\.services\\.[a-zA-Z][a-zA-Z0-9]*$/,\n 'Service reference must be in format \"Alias.services.ServiceName\" (e.g., \"Weather.services.openweather\")',\n );\n\nexport const ServiceRefObjectSchema = z.object({\n ref: ServiceRefStringSchema,\n description: z.string().optional(),\n baseUrl: z.string().url(\"baseUrl override must be a valid URL\").optional(),\n headers: z.record(z.string()).optional(),\n url: z.string().url(\"url override must be a valid URL\").optional(),\n serverPath: z.string().optional(),\n});\n\nexport const ServiceRefSchema = z.union([\n ServiceDefinitionSchema,\n ServiceRefObjectSchema,\n ServiceRefStringSchema,\n]);\n\n/**\n * Parses a service reference into its components.\n * \n * Extracts the alias and service name from a service reference string\n * in format \"Alias.services.ServiceName\". Returns null if not a valid reference.\n * \n * @param {string} ref - Service reference string\n * @returns {{ alias: string; serviceName: string } | null} Parsed components or null\n * \n * @example\n * parseServiceRef(\"Weather.services.openweather\"); // returns { alias: \"Weather\", serviceName: \"openweather\" }\n * parseServiceRef(\"invalid\"); // returns null\n */\nexport function parseServiceRef(\n ref: string,\n): { alias: string; serviceName: string } | null {\n const match = ref.match(\n /^([A-Z][a-zA-Z0-9]*)\\.services\\.([a-zA-Z][a-zA-Z0-9]*)$/,\n );\n if (!match) return null;\n return { alias: match[1], serviceName: match[2] };\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Checks if a service definition is a REST service.\n * \n * Type guard to determine if a service definition represents a REST API service.\n * Used for service type discrimination and validation.\n * \n * @param {ServiceDefinition} service - Service definition to check\n * @returns {boolean} True if service is a REST service, false otherwise\n * \n * @example\n * isRestService({ name: \"weather\", type: \"rest\", baseUrl: \"...\" }); // returns true\n * isRestService({ name: \"chat\", type: \"socket\" }); // returns false\n */\nexport function isRestService(\n service: ServiceDefinition,\n): service is RestServiceDef {\n return service.type === \"rest\";\n}\n\n/**\n * Checks if a service definition is a Socket service.\n * \n * Type guard to determine if a service definition represents a WebSocket service.\n * Used for service type discrimination and validation.\n * \n * @param {ServiceDefinition} service - Service definition to check\n * @returns {boolean} True if service is a Socket service, false otherwise\n * \n * @example\n * isSocketService({ name: \"chat\", type: \"socket\", url: \"wss://...\" }); // returns true\n * isSocketService({ name: \"weather\", type: \"rest\" }); // returns false\n */\nexport function isSocketService(\n service: ServiceDefinition,\n): service is SocketServiceDef {\n return service.type === \"socket\";\n}\n\n/**\n * Checks if a service definition is an MCP service.\n * \n * Type guard to determine if a service definition represents an MCP\n * (Multiplayer Control Protocol) service. Used for service type discrimination.\n * \n * @param {ServiceDefinition} service - Service definition to check\n * @returns {boolean} True if service is an MCP service, false otherwise\n * \n * @example\n * isMcpService({ name: \"game\", type: \"mcp\", serverUrl: \"...\" }); // returns true\n * isMcpService({ name: \"chat\", type: \"socket\" }); // returns false\n */\nexport function isMcpService(\n service: ServiceDefinition,\n): service is McpServiceDef {\n return service.type === \"mcp\";\n}\n\n/**\n * Get all service names from a list of services.\n */\nexport function getServiceNames(services: ServiceDefinition[]): string[] {\n return services.map((s) => s.name);\n}\n\n/**\n * Find a service by name.\n */\nexport function findService(\n services: ServiceDefinition[],\n name: string,\n): ServiceDefinition | undefined {\n return services.find((s) => s.name.toLowerCase() === name.toLowerCase());\n}\n\n/**\n * Check if a service name exists (case-insensitive).\n */\nexport function hasService(\n services: ServiceDefinition[],\n name: string,\n): boolean {\n return services.some((s) => s.name.toLowerCase() === name.toLowerCase());\n}\n\n/**\n * Allowed leaf value for `ServiceParams`. Mirrors `EventPayloadValue`'s\n * recursive-array shape so integration call signatures can express the\n * nested structures real services need (port mappings, volume mounts,\n * pagination cursors), and so a value satisfying `EventPayloadValue`\n * also satisfies `ServiceParamsValue` without a cast — the same data\n * flows through `call-service` and `emit` without boundary widening.\n */\nexport type ServiceParamsValue =\n | string\n | number\n | boolean\n | Date\n | null\n | undefined\n | ServiceParams\n | readonly ServiceParamsValue[];\n\n/** Parameters passed to call-service effects. Recursive for nested request shapes. */\nexport type ServiceParams = {\n [key: string]: ServiceParamsValue;\n};\n","/**\n * Orbital Type (Self-Contained)\n *\n * Defines the Orbital - the atomic building block of applications.\n * Formula: Orbital = Entity × Traits × Pages\n *\n * An Orbital is a module that exports { entity, traits, pages }.\n * Use `uses` to import other Orbitals and access their components via:\n * - Alias.entity\n * - Alias.traits.TraitName\n * - Alias.pages.PageName\n *\n * @packageDocumentation\n */\n\nimport { z } from \"zod\";\nimport type { OrbitalId, EntityId, TraitId, PageId } from \"./identity.js\";\nimport { OrbitalIdSchema, EntityIdSchema, TraitIdSchema, PageIdSchema } from \"./identity.js\";\nimport type { Entity, EntityPersistence } from \"./entity.js\";\nimport { EntitySchema, EntityPersistenceSchema } from \"./entity.js\";\nimport type { EntityField } from \"./field.js\";\nimport { EntityFieldSchema } from \"./field.js\";\nimport type { Page } from \"./page.js\";\nimport { PageSchema } from \"./page.js\";\nimport type {\n TraitRef,\n EventPayloadField,\n EventScope,\n Trait,\n} from \"./trait.js\";\nimport {\n TraitRefSchema,\n EventPayloadFieldSchema,\n EventScopeSchema,\n TraitSchema,\n} from \"./trait.js\";\nimport type {\n DomainContext,\n DesignPreferences,\n SuggestedGuard,\n ThemeRef,\n} from \"./domain.js\";\nimport {\n DomainContextSchema,\n DesignPreferencesSchema,\n SuggestedGuardSchema,\n ThemeRefSchema,\n} from \"./domain.js\";\nimport type { ServiceRef } from \"./service.js\";\nimport { ServiceRefSchema } from \"./service.js\";\nimport type { Expression, SExpr } from \"./expression.js\";\nimport { ExpressionSchema, SExprSchema } from \"./expression.js\";\n\n// ============================================================================\n// Use Declaration (Import System)\n// ============================================================================\n\n/**\n * UseDeclaration - Import an external Orbital as a namespace.\n *\n * After importing, access components via:\n * - Alias.entity - The entity definition\n * - Alias.traits.TraitName - A specific trait\n * - Alias.pages.PageName - A specific page\n *\n * @example\n * ```json\n * {\n * \"uses\": [\n * { \"from\": \"./health.orb\", \"as\": \"Health\" },\n * { \"from\": \"std/behaviors/game-core\", \"as\": \"GameCore\" }\n * ]\n * }\n * ```\n */\nexport type UseDeclaration = {\n /**\n * Import source path:\n * - \"std/behaviors/game-core\" - Standard library\n * - \"./shared/health.orb\" - Local .orb file (relative path)\n * - \"../common/physics.orb\" - Parent directory .orb file\n * - \"@game-lib/enemies.orb\" - Scoped package (configured base)\n */\n from: string;\n\n /**\n * Alias for accessing imported components.\n * Used as namespace: Alias.entity, Alias.traits.X, Alias.pages.X\n */\n as: string;\n};\n\nexport const UseDeclarationSchema = z.object({\n from: z.string().min(1, \"Import source is required\"),\n as: z\n .string()\n .min(1, \"Alias is required\")\n .regex(\n /^[A-Z][a-zA-Z0-9]*$/,\n 'Alias must be PascalCase (e.g., \"Health\", \"GameCore\")',\n ),\n});\n\n// ============================================================================\n// Entity Reference (Inline OR Reference)\n// ============================================================================\n\n/**\n * EntityCall - Reference to an imported entity with optional override arguments.\n *\n * Treats the imported entity as a callable function: the atom's declared\n * fields are defaults and the caller can append extra fields, rename, or\n * override persistence/collection. The discriminator key is `extends` to\n * stay consistent with the Phase A.5 Rust schema (`EntityRef::Extends`).\n *\n * @example\n * ```json\n * // Inherit ModalRecord's fields, rename to CartItem, add pendingId\n * {\n * \"extends\": \"Modal.entity\",\n * \"name\": \"CartItem\",\n * \"fields\": [{ \"name\": \"pendingId\", \"type\": \"string\" }]\n * }\n * ```\n */\nexport type EntityCall = {\n /** Reference to the imported entity using the \"extends\" discriminator key */\n extends: string;\n /** V4 dual-carry id sibling of `extends` — optional until the Phase-7 flip. */\n extendsId?: EntityId;\n /** Optional rename for the resulting entity */\n name?: string;\n /** Additional fields appended to the inherited set (caller wins on name collision) */\n fields?: EntityField[];\n /** Optional persistence override */\n persistence?: EntityPersistence;\n /** Optional collection override */\n collection?: string;\n};\n\n/**\n * EntityRef - Entity can be inline definition OR reference to imported entity.\n *\n * Reference formats:\n * - Simple string: \"Alias.entity\"\n * - Call form (with overrides): { extends: \"Alias.entity\", name?, fields?, persistence?, collection? }\n *\n * @example\n * ```json\n * // Inline\n * { \"entity\": { \"name\": \"Player\", \"fields\": [...] } }\n *\n * // Simple reference\n * { \"entity\": \"Goblin.entity\" }\n *\n * // Call form with overrides (Phase F)\n * { \"entity\": { \"extends\": \"Modal.entity\", \"name\": \"CartItem\", \"fields\": [...] } }\n * ```\n */\nexport type EntityRef = Entity | string | EntityCall;\n\n/**\n * Checks if an entity reference is a string reference.\n *\n * Type guard to determine if an EntityRef is a string reference\n * (format: \"Alias.entity\") rather than an inline entity definition or\n * an EntityCall object.\n *\n * Note: This guard intentionally narrows to `string` only. To check for\n * any non-inline form (string OR EntityCall), use `isEntityReferenceAny`.\n *\n * @param {EntityRef} entity - Entity reference to check\n * @returns {boolean} True if entity is a string reference, false otherwise\n *\n * @example\n * const ref1 = \"User.entity\"; // string reference\n * const ref2 = { name: \"User\", fields: [...] }; // inline definition\n * const ref3 = { extends: \"User.entity\" }; // EntityCall\n *\n * isEntityReference(ref1); // returns true\n * isEntityReference(ref2); // returns false\n * isEntityReference(ref3); // returns false\n */\nexport function isEntityReference(entity: EntityRef): entity is string {\n return typeof entity === \"string\";\n}\n\n/**\n * Checks if an entity reference is an EntityCall (extends form).\n *\n * Type guard for the call-form EntityRef introduced in Phase F. EntityCall\n * is identified by the presence of the \"extends\" discriminator key.\n *\n * @param {EntityRef} entity - Entity reference to check\n * @returns {boolean} True if entity is an EntityCall object\n *\n * @example\n * isEntityCall({ extends: \"Modal.entity\", name: \"CartItem\" }); // returns true\n * isEntityCall(\"Modal.entity\"); // returns false\n * isEntityCall({ name: \"Modal\", fields: [] }); // returns false\n */\nexport function isEntityCall(entity: EntityRef): entity is EntityCall {\n return typeof entity === \"object\" && entity !== null && \"extends\" in entity;\n}\n\n/**\n * Checks if an entity reference is any non-inline form (string or EntityCall).\n *\n * Broader companion to `isEntityReference` that recognizes both the bare\n * string reference and the Phase F EntityCall form.\n *\n * @param {EntityRef} entity - Entity reference to check\n * @returns {boolean} True if entity is a string reference or EntityCall\n */\nexport function isEntityReferenceAny(\n entity: EntityRef,\n): entity is string | EntityCall {\n return isEntityReference(entity) || isEntityCall(entity);\n}\n\n/**\n * Validate entity reference format: \"Alias.entity\"\n */\nexport const EntityRefStringSchema = z\n .string()\n .regex(\n /^[A-Z][a-zA-Z0-9]*\\.entity$/,\n 'Entity reference must be in format \"Alias.entity\" (e.g., \"Goblin.entity\")',\n );\n\n/**\n * Validate EntityCall (extends form) shape.\n *\n * Phase F.4 refines:\n * - The `fields` override array must not contain duplicate field names\n * (case-sensitive). Duplicates would silently shadow each other during\n * the inliner's field-merge step, so reject at the schema boundary.\n */\nexport const EntityCallSchema = z\n .object({\n extends: z\n .string()\n .regex(\n /^[A-Z][a-zA-Z0-9]*\\.entity$/,\n 'EntityCall \"extends\" must be in format \"Alias.entity\"',\n ),\n name: z.string().optional(),\n fields: z.array(EntityFieldSchema).optional(),\n persistence: EntityPersistenceSchema.optional(),\n collection: z.string().optional(),\n })\n .refine(\n (call) => {\n if (!call.fields) return true;\n const seen = new Set<string>();\n for (const field of call.fields) {\n if (field.name === undefined) continue;\n if (seen.has(field.name)) return false;\n seen.add(field.name);\n }\n return true;\n },\n {\n message:\n 'EntityCall \"fields\" override list must not contain duplicate field names',\n path: [\"fields\"],\n },\n );\n\nexport const EntityRefSchema = z.union([\n EntitySchema,\n EntityRefStringSchema,\n EntityCallSchema,\n]);\n\n// ============================================================================\n// Page Reference (Inline OR Reference)\n// ============================================================================\n\n/**\n * PageRefObject - Reference to imported page with optional override arguments.\n *\n * Phase F adds `linkedEntity` and `traits` arguments so a caller can rebind\n * the imported page's entity and trait set, treating the page as a callable\n * function.\n */\nexport type PageRefObject = {\n /**\n * Reference to imported page: \"Alias.pages.PageName\"\n */\n ref: string;\n\n /** V4 dual-carry id sibling of `ref` — optional until the Phase-7 flip. */\n refId?: PageId;\n\n /**\n * Phase 1.2: optional registry path disambiguator. Pairs with `ref` to\n * explicitly name which `uses` entry the alias was imported from\n * (e.g. \"std/behaviors/atoms/std-browse\"). Helpful for programmatic\n * descriptor construction and inline-phase disambiguation when multiple\n * registries expose the same alias prefix.\n */\n from?: string;\n\n /**\n * Optional path override.\n * If provided, overrides the original page's path.\n */\n path?: string;\n\n /**\n * Phase F: rebind the page's entity to the caller's entity.\n * Identifier-substitution pass rewrites references to the original\n * entity inside the imported page.\n */\n linkedEntity?: string;\n\n /** V4 dual-carry id sibling of `linkedEntity` — optional until the Phase-7 flip. */\n linkedEntityId?: EntityId;\n\n /**\n * Phase F: override the page's trait set with the caller-supplied list.\n * Each entry may be a string trait reference or an inline trait reference object.\n */\n traits?: TraitRef[];\n\n /** V4 dual-carry id sibling of `traits` — optional until the Phase-7 flip. */\n traitRefIds?: TraitId[];\n};\n\n/**\n * PageRef - Page can be inline definition OR reference to imported page.\n *\n * Reference formats:\n * - \"Alias.pages.PageName\" - Simple reference (keeps original path)\n * - { ref: \"Alias.pages.PageName\", path: \"/custom\" } - Reference with path override\n *\n * @example\n * ```json\n * // Inline\n * { \"name\": \"Dashboard\", \"path\": \"/\", ... }\n *\n * // Simple reference\n * \"User.pages.Profile\"\n *\n * // Reference with path override\n * { \"ref\": \"User.pages.Profile\", \"path\": \"/my-profile\" }\n * ```\n */\nexport type PageRef = Page | string | PageRefObject;\n\n/**\n * Checks if a page reference is a string reference.\n * \n * Type guard to determine if a PageRef is a simple string reference\n * (format: \"Alias.pages.PageName\") rather than an inline page definition or object reference.\n * \n * @param {PageRef} page - Page reference to check\n * @returns {boolean} True if page is a string reference, false otherwise\n * \n * @example\n * const ref1 = \"User.pages.Profile\"; // string reference\n * const ref2 = { name: \"Dashboard\", path: \"/\" }; // inline definition\n * \n * isPageReferenceString(ref1); // returns true\n * isPageReferenceString(ref2); // returns false\n */\nexport function isPageReferenceString(page: PageRef): page is string {\n return typeof page === \"string\";\n}\n\n/**\n * Checks if a page reference is a reference object.\n * \n * Type guard to determine if a PageRef is an object reference\n * with a 'ref' property rather than an inline page definition.\n * \n * @param {PageRef} page - Page reference to check\n * @returns {boolean} True if page is a reference object, false otherwise\n * \n * @example\n * const ref1 = { ref: \"User.pages.Profile\", path: \"/custom\" }; // reference object\n * const ref2 = { name: \"Dashboard\", path: \"/\" }; // inline definition\n * \n * isPageReferenceObject(ref1); // returns true\n * isPageReferenceObject(ref2); // returns false\n */\nexport function isPageReferenceObject(page: PageRef): page is PageRefObject {\n return typeof page === \"object\" && \"ref\" in page && !(\"name\" in page);\n}\n\n/**\n * Checks if a page reference is any type of reference.\n * \n * Type guard to determine if a PageRef is a reference (string or object)\n * rather than an inline page definition.\n * \n * @param {PageRef} page - Page reference to check\n * @returns {boolean} True if page is a reference, false if inline definition\n * \n * @example\n * const ref1 = \"User.pages.Profile\"; // string reference\n * const ref2 = { ref: \"User.pages.Profile\", path: \"/custom\" }; // object reference\n * const ref3 = { name: \"Dashboard\", path: \"/\" }; // inline definition\n * \n * isPageReference(ref1); // returns true\n * isPageReference(ref2); // returns true\n * isPageReference(ref3); // returns false\n */\nexport function isPageReference(page: PageRef): page is string | PageRefObject {\n return isPageReferenceString(page) || isPageReferenceObject(page);\n}\n\n/**\n * Validate page reference format: \"Alias.pages.PageName\"\n */\nexport const PageRefStringSchema = z\n .string()\n .regex(\n /^[A-Z][a-zA-Z0-9]*\\.pages\\.[A-Z][a-zA-Z0-9]*$/,\n 'Page reference must be in format \"Alias.pages.PageName\" (e.g., \"User.pages.Profile\")',\n );\n\nexport const PageRefObjectSchema = z.object({\n ref: PageRefStringSchema,\n refId: PageIdSchema.optional(),\n // Phase 1.2: optional registry path disambiguator, pairs with `ref`.\n from: z.string().optional(),\n path: z.string().startsWith(\"/\").optional(),\n linkedEntity: z.string().optional(),\n linkedEntityId: EntityIdSchema.optional(),\n traits: z.array(TraitRefSchema).optional(),\n traitRefIds: z.array(TraitIdSchema).optional(),\n});\n\nexport const PageRefSchema = z.union([\n PageSchema,\n PageRefStringSchema,\n PageRefObjectSchema,\n]);\n\n// ============================================================================\n// Trait Reference Extensions\n// ============================================================================\n\n/**\n * Extended trait reference format for imported traits.\n *\n * Formats:\n * - \"TraitName\" - Local trait (inline or from uses without alias)\n * - \"Alias.traits.TraitName\" - Imported trait with namespace\n *\n * The existing TraitRef type already supports these via string.\n */\n\n/**\n * Validate trait reference format for imported traits.\n */\nexport const ImportedTraitRefStringSchema = z\n .string()\n .regex(\n /^([A-Z][a-zA-Z0-9]*\\.traits\\.)?[A-Z][a-zA-Z0-9]*$/,\n 'Trait reference must be \"TraitName\" or \"Alias.traits.TraitName\"',\n );\n\n/**\n * Checks if a trait reference is an imported reference.\n * \n * Determines if a trait reference uses the imported format\n * \"Alias.traits.TraitName\" rather than a simple \"TraitName\".\n * \n * @param {string} ref - Trait reference to check\n * @returns {boolean} True if reference is imported format, false otherwise\n * \n * @example\n * isImportedTraitRef(\"User.traits.Profile\"); // returns true\n * isImportedTraitRef(\"Profile\"); // returns false\n */\nexport function isImportedTraitRef(ref: string): boolean {\n return /^[A-Z][a-zA-Z0-9]*\\.traits\\.[A-Z][a-zA-Z0-9]*$/.test(ref);\n}\n\n/**\n * Parses an imported trait reference.\n * \n * Extracts the alias and trait name from an imported trait reference\n * in format \"Alias.traits.TraitName\". Returns null if not a valid imported reference.\n * \n * @param {string} ref - Trait reference to parse\n * @returns {{ alias: string; traitName: string } | null} Parsed reference or null\n * \n * @example\n * parseImportedTraitRef(\"User.traits.Profile\"); // returns { alias: \"User\", traitName: \"Profile\" }\n * parseImportedTraitRef(\"Profile\"); // returns null\n */\nexport function parseImportedTraitRef(\n ref: string,\n): { alias: string; traitName: string } | null {\n const match = ref.match(/^([A-Z][a-zA-Z0-9]*)\\.traits\\.([A-Z][a-zA-Z0-9]*)$/);\n if (!match) return null;\n return { alias: match[1], traitName: match[2] };\n}\n\n/**\n * Parses an entity reference.\n * \n * Extracts the alias from an entity reference in format \"Alias.entity\".\n * Returns null if not a valid entity reference.\n * \n * @param {string} ref - Entity reference to parse\n * @returns {{ alias: string } | null} Parsed reference or null\n * \n * @example\n * parseEntityRef(\"User.entity\"); // returns { alias: \"User\" }\n * parseEntityRef(\"User\"); // returns null\n */\nexport function parseEntityRef(ref: string): { alias: string } | null {\n const match = ref.match(/^([A-Z][a-zA-Z0-9]*)\\.entity$/);\n if (!match) return null;\n return { alias: match[1] };\n}\n\n/**\n * Parses a page reference.\n * \n * Extracts the alias and page name from a page reference\n * in format \"Alias.pages.PageName\". Returns null if not a valid page reference.\n * \n * @param {string} ref - Page reference to parse\n * @returns {{ alias: string; pageName: string } | null} Parsed reference or null\n * \n * @example\n * parsePageRef(\"User.pages.Profile\"); // returns { alias: \"User\", pageName: \"Profile\" }\n * parsePageRef(\"Profile\"); // returns null\n */\nexport function parsePageRef(\n ref: string,\n): { alias: string; pageName: string } | null {\n const match = ref.match(/^([A-Z][a-zA-Z0-9]*)\\.pages\\.([A-Z][a-zA-Z0-9]*)$/);\n if (!match) return null;\n return { alias: match[1], pageName: match[2] };\n}\n\n// ============================================================================\n// Event Listener (Legacy)\n// ============================================================================\n\n/**\n * Event listener for cross-orbital communication (legacy format).\n * @deprecated Use trait-level listens with scope instead.\n */\nexport interface EventListener {\n /** Event key to listen for */\n event: string;\n /** Action to trigger */\n triggers: string;\n /** Optional guard condition */\n guard?: string;\n}\n\nexport const EventListenerSchema = z.object({\n event: z.string().min(1),\n triggers: z.string().min(1),\n guard: z.string().optional(),\n});\n\n// ============================================================================\n// Computed Event Contract (Trait-Centric Model)\n// ============================================================================\n\n/**\n * Source of an event - which trait/transition/tick emits it.\n */\nexport type EventSource = {\n /** Trait that emits this event */\n trait: string;\n /** Transition that emits this event (if applicable) */\n transition?: string;\n /** Tick that emits this event (if applicable) */\n tick?: string;\n};\n\nexport const EventSourceSchema = z.object({\n trait: z.string().min(1),\n transition: z.string().optional(),\n tick: z.string().optional(),\n});\n\n/**\n * Computed event contract with source tracking.\n * Generated by aggregating trait-level emits with namespacing.\n */\nexport type ComputedEventContract = {\n /** Namespaced event: \"TraitName.EVENT_NAME\" */\n event: string;\n /** Original event name without namespace */\n originalEvent: string;\n /** Source trait that emits this event */\n source: EventSource;\n /** Human-readable description */\n description?: string;\n /** Payload schema */\n payload?: EventPayloadField[];\n};\n\nexport const ComputedEventContractSchema = z.object({\n event: z.string().min(1),\n originalEvent: z.string().min(1),\n source: EventSourceSchema,\n description: z.string().optional(),\n payload: z.array(EventPayloadFieldSchema).optional(),\n});\n\n/**\n * Computed event listener with source tracking.\n * Generated by aggregating trait-level listens.\n */\nexport type ComputedEventListener = {\n /** Event to listen for (may be namespaced) */\n event: string;\n /** Source trait that defines this listener */\n source: EventSource;\n /** State machine event to trigger */\n triggers: string;\n /** Guard expression */\n guard?: Expression;\n /** `with { ... }` payload rewrite: `{ targetField: SExpr }`, evaluated against the source payload. */\n payloadMapping?: Record<string, SExpr>;\n};\n\nexport const ComputedEventListenerSchema = z.object({\n event: z.string().min(1),\n source: EventSourceSchema,\n triggers: z.string().min(1),\n guard: ExpressionSchema.optional(),\n payloadMapping: z.record(SExprSchema).optional(),\n});\n\n// ============================================================================\n// Orbital\n// ============================================================================\n\n/**\n * Orbital - The atomic building block of applications.\n *\n * Formula: Orbital = Entity × Traits × Pages\n *\n * An orbital is a self-contained feature unit that groups:\n * - One entity (the data nucleus) - inline OR referenced via \"Alias.entity\"\n * - Zero or more traits (behavioral patterns) - inline OR referenced via \"Alias.traits.X\"\n * - Zero or more pages (UI entry points) - inline OR referenced via \"Alias.pages.X\"\n *\n * Use `uses` to import other orbitals and access their components.\n */\nexport type Orbital = OrbitalDefinition;\n\nexport type OrbitalDefinition = {\n /** V4 dual-carry id sibling of `name` — optional until the Phase-7 flip. */\n id?: OrbitalId;\n\n /** Human-readable name */\n name: string;\n\n /** Optional description */\n description?: string;\n\n /** Visual prompt override */\n visual_prompt?: string;\n\n // ========================================================================\n // Import System (Unified Reference)\n // ========================================================================\n\n /**\n * Import external orbitals as namespaces.\n *\n * After importing, access components via:\n * - Alias.entity - The entity definition\n * - Alias.traits.TraitName - A specific trait\n * - Alias.pages.PageName - A specific page\n * - Alias.theme - The theme definition\n * - Alias.services.ServiceName - A specific service\n *\n * @example\n * ```json\n * \"uses\": [\n * { \"from\": \"./health.orb\", \"as\": \"Health\" },\n * { \"from\": \"std/behaviors/game-core\", \"as\": \"GameCore\" }\n * ]\n * ```\n */\n uses?: UseDeclaration[];\n\n // ========================================================================\n // Theme & Services\n // ========================================================================\n\n /**\n * Theme definition (inline OR reference via \"Alias.theme\").\n *\n * @example\n * ```json\n * // Inline\n * \"theme\": { \"name\": \"ocean\", \"tokens\": { \"colors\": { \"primary\": \"#0ea5e9\" } } }\n *\n * // Reference\n * \"theme\": \"Ocean.theme\"\n * ```\n */\n theme?: ThemeRef;\n\n /**\n * Service definitions (inline OR reference via \"Alias.services.ServiceName\").\n *\n * @example\n * ```json\n * // Inline\n * \"services\": [{ \"name\": \"weather\", \"type\": \"rest\", \"baseUrl\": \"...\" }]\n *\n * // Reference\n * \"services\": [\"Weather.services.openweather\"]\n * ```\n */\n services?: ServiceRef[];\n\n // ========================================================================\n // Components (Inline OR Reference)\n // ========================================================================\n\n /**\n * Entity definition (nucleus).\n *\n * Can be:\n * - Inline: Full entity definition\n * - Reference: \"Alias.entity\" (from uses)\n *\n * Entity sharing depends on persistence type:\n * - persistent: Shared (same DB collection)\n * - runtime: Isolated (each orbital gets own instances)\n */\n entity: EntityRef;\n\n /**\n * Imported atom entities surfaced into this orbital's resolution\n * scope WITHOUT modifying the primary `entity`. Populated by the\n * compiler's inline phase when a trait reference imports an atom\n * and OMITS the `-> Entity` linkedEntity rebind: the atom keeps its\n * own entity (e.g. `SearchResult` from std-search), and that entity\n * is registered here so validators / codegen / runtime can resolve\n * `linkedEntity = \"SearchResult\"` lookups, register persistence for\n * it, and emit its TypeScript type alongside the primary entity.\n * The orbital's per-trait entity arity stays 1:1 — this is purely a\n * NAME-RESOLUTION side channel for cross-import linkedEntity\n * references.\n */\n auxiliaryEntities?: EntityRef[];\n\n /** Trait references (local or imported via \"Alias.traits.TraitName\") */\n traits: TraitRef[];\n\n /**\n * Page definitions.\n *\n * Can be:\n * - Inline: Full page definition\n * - Reference string: \"Alias.pages.PageName\"\n * - Reference object: { ref: \"Alias.pages.PageName\", path: \"/custom\" }\n */\n pages: PageRef[];\n\n // ========================================================================\n // Event Interface (Trait-Centric Model)\n // ========================================================================\n\n /**\n * Events this orbital emits.\n *\n * COMPUTED from trait-level emits:\n * - Aggregated from all traits with `scope: 'external'`\n * - Namespaced as \"TraitName.EVENT_NAME\"\n * - Filtered by `exposes` if present\n *\n * Do not author directly - computed by resolver.\n */\n emits?: ComputedEventContract[];\n\n /**\n * Events this orbital listens for.\n *\n * COMPUTED from trait-level listens:\n * - Aggregated from all traits with `scope: 'external'`\n *\n * Do not author directly - computed by resolver.\n */\n listens?: ComputedEventListener[];\n\n /**\n * Filter which trait events are exposed externally.\n * If omitted, all external-scoped trait events are exposed.\n * Format: [\"TraitName.EVENT_NAME\", ...]\n */\n exposes?: string[];\n\n // ========================================================================\n // Context fields - persisted throughout orbital lifecycle\n // ========================================================================\n\n /** Domain context - category, vocabulary, personas */\n domainContext?: DomainContext;\n\n /** Design preferences - style, colors, UX hints */\n design?: DesignPreferences;\n\n /**\n * Suggested guards (decomposition phase only).\n * Natural language descriptions that generator converts to S-expressions.\n * Removed after generation - guards live in traits.\n */\n suggestedGuards?: SuggestedGuard[];\n};\n\nexport const OrbitalDefinitionSchema = z.object({\n id: OrbitalIdSchema.optional(),\n name: z.string().min(1, \"Orbital name is required\"),\n description: z.string().optional(),\n visual_prompt: z.string().optional(),\n // Import system\n uses: z.array(UseDeclarationSchema).optional(),\n // Theme & Services\n theme: ThemeRefSchema.optional(),\n services: z.array(ServiceRefSchema).optional(),\n // Components (inline or reference)\n entity: EntityRefSchema,\n traits: z.array(TraitRefSchema),\n pages: z.array(PageRefSchema),\n // Event interface (trait-centric model) - computed by resolver\n emits: z.array(ComputedEventContractSchema).optional(),\n listens: z.array(ComputedEventListenerSchema).optional(),\n // Filter for exposed events (trait-centric model)\n exposes: z.array(z.string()).optional(),\n // Context fields - persisted throughout orbital lifecycle\n domainContext: DomainContextSchema.optional(),\n design: DesignPreferencesSchema.optional(),\n suggestedGuards: z.array(SuggestedGuardSchema).optional(),\n});\n\nexport const OrbitalSchema = OrbitalDefinitionSchema;\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\n/**\n * Type guard to check if an Orbital is a full definition.\n * @deprecated No longer needed since Orbital is always OrbitalDefinition now.\n */\nexport function isOrbitalDefinition(\n orbital: Orbital,\n): orbital is OrbitalDefinition {\n return \"entity\" in orbital;\n}\n\n// ============================================================================\n// Type exports\n// ============================================================================\n\nexport type OrbitalInput = z.input<typeof OrbitalSchema>;\n\n// Backward compatibility\nexport type OrbitalUnit = Orbital;\nexport const OrbitalUnitSchema = OrbitalSchema;\n","/**\n * Orbital Schema Type (Self-Contained)\n *\n * Defines the OrbitalSchema - the top-level application definition.\n * An application is a composition of orbitals: App = Σ(Orbitals)\n *\n * @packageDocumentation\n */\n\nimport { z } from \"zod\";\nimport type { Orbital } from \"./orbital.js\";\nimport { OrbitalSchema as OrbitalZodSchema } from \"./orbital.js\";\nimport type {\n DomainContext,\n DesignPreferences,\n DesignTokens,\n CustomPatternMap,\n} from \"./domain.js\";\nimport {\n DomainContextSchema,\n DesignPreferencesSchema,\n DesignTokensSchema,\n CustomPatternMapSchema,\n} from \"./domain.js\";\nimport type { ServiceDefinition } from \"./service.js\";\nimport { ServiceDefinitionSchema } from \"./service.js\";\nimport type { Trait } from \"./trait.js\";\nimport type { IdentityLedger } from \"./identity.js\";\nimport { IdentityLedgerSchema } from \"./identity.js\";\nimport type { RuntimeValue } from \"./json.js\";\n\n// ============================================================================\n// Orbital Config\n// ============================================================================\n\n/**\n * Global configuration for the application\n */\nexport interface OrbitalConfig {\n /** Theme configuration */\n theme?: {\n primary?: string;\n secondary?: string;\n mode?: \"light\" | \"dark\" | \"system\";\n };\n /** Feature flags */\n features?: Record<string, boolean>;\n /** API configuration */\n api?: {\n baseUrl?: string;\n timeout?: number;\n };\n}\n\nexport const OrbitalConfigSchema = z.object({\n theme: z\n .object({\n primary: z.string().optional(),\n secondary: z.string().optional(),\n mode: z.enum([\"light\", \"dark\", \"system\"]).optional(),\n })\n .optional(),\n features: z.record(z.boolean()).optional(),\n api: z\n .object({\n baseUrl: z.string().optional(),\n timeout: z.number().optional(),\n })\n .optional(),\n});\n\n// ============================================================================\n// Orbital Schema\n// ============================================================================\n\n/**\n * OrbitalSchema - The top-level application definition.\n *\n * An application is a composition of orbitals:\n * App = Σ(Orbitals)\n *\n * Custom traits can be defined at the schema level and referenced\n * by orbitals via TraitRef. This allows LLMs to generate custom\n * traits that aren't in the trait library.\n */\n/**\n * One `@config.<knob>` → render-ui prop substitution recorded by the inline\n * phase. Lets a consumer trace a resolved render-ui literal back to the config\n * knob it came from (the `@config.X` string is erased after substitution).\n * Mirrors the Rust `ConfigProvenanceRecord`.\n */\nexport interface ConfigProvenanceRecord {\n /** Resolved trait name (post call-site rename) owning the render-ui effect. */\n trait: string;\n /** Pattern path within the render-ui tree (e.g. `root.children.0`). */\n patternPath?: string;\n /** The pattern-node prop key whose value was a `@config.X` binding. */\n prop: string;\n /** The config knob name (`X` in `@config.X`). */\n knob: string;\n}\n\n/** Compiler-emitted schema metadata — the resolved `.orb` `_metadata` block. */\nexport interface SchemaMetadata {\n version?: number;\n createdAt?: number;\n source?: string;\n updatedAt?: number;\n /** Config→knob provenance keyed by orbital name. See {@link ConfigProvenanceRecord}. */\n configProvenance?: Record<string, ConfigProvenanceRecord[]>;\n}\n\nexport interface OrbitalSchema {\n /** Application name */\n name: string;\n\n /** Description */\n description?: string;\n\n /**\n * Short human-readable summary distinct from `description`. Typically an\n * AI-generated one-liner used by app list views, breadcrumbs, and the\n * `GET /graphs/:appId/domain-text` projection. Kept separate from\n * `description` (which may be longer / authored copy) so consumers can\n * present a stable short label without truncating.\n */\n summary?: string;\n\n /** Version (semver) */\n version?: string;\n\n /** Domain context - user request + classification */\n domainContext?: DomainContext;\n\n /** Design preferences */\n design?: DesignPreferences;\n\n /**\n * Design tokens - reusable Tailwind class collections.\n * Reference via `token: \"surfaces.glass\"` in patterns.\n */\n designTokens?: DesignTokens;\n\n /**\n * Custom pattern definitions for app-specific reusable patterns.\n * Register custom designs that can be referenced by name.\n */\n customPatterns?: CustomPatternMap;\n\n /** Array of orbitals */\n orbitals: Orbital[];\n\n /** External services */\n services?: ServiceDefinition[];\n\n /** Global config */\n config?: OrbitalConfig;\n\n /** Compiler-emitted metadata (resolved `.orb` `_metadata`). */\n _metadata?: SchemaMetadata;\n\n /**\n * V4 IR schema version. Distinct from the semver `version` above; gates the\n * identity-keyed reference semantics. Optional/unset for pre-V4 schemas.\n */\n schemaVersion?: number;\n\n /**\n * V4 identity ledger — the sole name↔id map for this schema's nodes. Optional\n * until the Phase-7 flip; absent on pre-V4 schemas.\n */\n ledger?: IdentityLedger;\n}\n\nexport const ConfigProvenanceRecordSchema = z.object({\n trait: z.string(),\n patternPath: z.string().optional(),\n prop: z.string(),\n knob: z.string(),\n});\n\nexport const SchemaMetadataSchema = z.object({\n version: z.number().optional(),\n createdAt: z.number().optional(),\n source: z.string().optional(),\n updatedAt: z.number().optional(),\n configProvenance: z.record(z.array(ConfigProvenanceRecordSchema)).optional(),\n});\n\nexport const OrbitalSchemaSchema = z.object({\n name: z.string().min(1, \"Schema name is required\"),\n description: z.string().optional(),\n summary: z.string().optional(),\n version: z.string().optional(),\n domainContext: DomainContextSchema.optional(),\n design: DesignPreferencesSchema.optional(),\n designTokens: DesignTokensSchema,\n customPatterns: CustomPatternMapSchema,\n orbitals: z\n .array(OrbitalZodSchema)\n .min(1, \"At least one orbital is required\"),\n services: z.array(ServiceDefinitionSchema).optional(),\n config: OrbitalConfigSchema.optional(),\n _metadata: SchemaMetadataSchema.optional(),\n // V4 identity — optional/dual-carry until the Phase-7 flip. Present on\n // id-carrying `.orb` files so `parseOrbitalSchema` preserves them instead\n // of stripping unknown keys.\n schemaVersion: z.number().optional(),\n ledger: IdentityLedgerSchema.optional(),\n});\n\n// ============================================================================\n// Persisted/Flattened View\n// ============================================================================\n\n/**\n * Flattened `OrbitalSchema` view used by the persistence/runtime layer.\n *\n * Canonical `OrbitalSchema` keeps every trait inside its owning\n * `OrbitalDefinition.traits`. Some runtime paths (e.g. the orbital-agent\n * stream, Firestore persistence) additionally roll the resolved trait set up\n * to the top level as `traits[]` so diffs and list views don't have to walk\n * every orbital.\n *\n * This is intentionally a LOSSY persisted view, NOT the canonical authoring\n * shape: it carries the rolled-up array alongside the per-orbital trait\n * lists, and consumers should prefer `OrbitalSchema` whenever the rolled-up\n * surface isn't required.\n */\nexport interface OrbitalSchemaWithTraits extends OrbitalSchema {\n /** Flattened trait set rolled up from all orbitals. Persisted-view only. */\n traits?: Trait[];\n}\n\n// ============================================================================\n// Parsing Functions\n// ============================================================================\n\n/**\n * Parses raw data into a validated OrbitalSchema.\n * \n * Uses Zod validation to ensure the data conforms to the OrbitalSchema structure.\n * Throws a ZodError if validation fails. For safe parsing that doesn't throw,\n * use `safeParseOrbitalSchema()` instead.\n * \n * @param {unknown} data - Raw data to parse (typically JSON)\n * @returns {OrbitalSchema} Validated orbital schema\n * @throws {z.ZodError} If data doesn't match OrbitalSchema structure\n * \n * @example\n * ```typescript\n * try {\n * const schema = parseOrbitalSchema(jsonData);\n * console.log('Valid schema:', schema.name);\n * } catch (error) {\n * console.error('Invalid schema:', error);\n * }\n * ```\n * \n * @see safeParseOrbitalSchema\n */\nexport function parseOrbitalSchema(data: RuntimeValue): OrbitalSchema {\n return OrbitalSchemaSchema.parse(data) as OrbitalSchema;\n}\n\n/**\n * Safely parses raw data into a validated OrbitalSchema without throwing.\n * \n * Uses Zod's safeParse method to validate data and return a result object\n * instead of throwing errors. This is useful for form validation and\n * user input handling where you want to gracefully handle invalid data.\n * \n * @param {unknown} data - Raw data to parse (typically JSON)\n * @returns {z.SafeParseReturnType<OrbitalSchema, OrbitalSchema>} Parse result with success/status\n * \n * @example\n * ```typescript\n * const result = safeParseOrbitalSchema(jsonData);\n * if (result.success) {\n * console.log('Valid schema:', result.data.name);\n * } else {\n * console.error('Validation errors:', result.error);\n * }\n * ```\n * \n * @see parseOrbitalSchema\n */\nexport function safeParseOrbitalSchema(data: RuntimeValue) {\n return OrbitalSchemaSchema.safeParse(data);\n}\n\n// ============================================================================\n// Type exports\n// ============================================================================\n\nexport type OrbitalSchemaInput = z.input<typeof OrbitalSchemaSchema>;\nexport type OrbitalConfigInput = z.input<typeof OrbitalConfigSchema>;\n","/**\n * S-Expression Bindings\n *\n * Defines binding types and utilities for S-expression context.\n * Bindings are references to values that are resolved at runtime.\n *\n * Core Bindings:\n * - @entity - The linked entity for this trait (e.g., @entity.health)\n * - @payload - Event payload data (e.g., @payload.amount)\n * - @state - Current state machine state\n * - @now - Current timestamp (Date.now())\n *\n * Entity Bindings:\n * - @EntityName.field - Reference to singleton/runtime entity (e.g., @GameConfig.gravity)\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// Re-export core binding utilities from expression.ts\nexport {\n isBinding,\n parseBinding,\n isValidBinding,\n CORE_BINDINGS,\n type CoreBinding,\n type ParsedBinding,\n} from './expression.js';\nimport type { SExpr } from './expression.js';\nimport type { RuntimeValue } from './json.js';\n\n// ============================================================================\n// Binding Schema\n// ============================================================================\n\n/**\n * Schema for a binding string.\n * Validates that the string starts with @ and has valid format.\n */\nexport const BindingSchema = z.string().refine(\n (val) => {\n if (!val.startsWith('@')) return false;\n const parts = val.slice(1).split('.');\n if (parts.length === 0 || parts[0] === '') return false;\n // All parts must be valid identifiers (letters, numbers, underscore)\n // supporting unicode characters for i18n\n return parts.every((part) => /^[\\p{L}_][\\p{L}0-9_]*$/u.test(part));\n },\n { message: 'Invalid binding format. Must be @name or @name.path.to.field' }\n);\n\n// ============================================================================\n// Binding Constants\n// ============================================================================\n\n/**\n * Binding documentation for LLM prompts and validation messages.\n * \n * IMPORTANT: Keep synchronized with CORE_BINDINGS in expression.ts\n */\nexport const BINDING_DOCS = {\n entity: {\n description: 'Reference to the linked entity for this trait',\n examples: ['@entity.health', '@entity.x', '@entity.status'],\n requiresPath: true,\n },\n payload: {\n description: 'Reference to the event payload data',\n examples: ['@payload.amount', '@payload.targetId', '@payload.action'],\n requiresPath: true,\n },\n state: {\n description: 'Current state machine state name',\n examples: ['@state'],\n requiresPath: false,\n },\n now: {\n description: 'Current timestamp in milliseconds',\n examples: ['@now'],\n requiresPath: false,\n },\n config: {\n description: 'Trait configuration values',\n examples: ['@config.apiEndpoint', '@config.theme'],\n requiresPath: true,\n },\n computed: {\n description: 'Computed/calculated values',\n examples: ['@computed.total', '@computed.isValid'],\n requiresPath: true,\n },\n trait: {\n description: 'Trait context data',\n examples: ['@trait.name', '@trait.category'],\n requiresPath: true,\n },\n user: {\n description: 'Authenticated user / agent context for ownership and role-based gating',\n examples: ['@user.id', '@user.role'],\n requiresPath: true,\n },\n callsitePayload: {\n description:\n 'Call-site-captured event payload — emitted by the compiler\\'s inline-trait hoisting when an extracted render block captured @payload; resolved at the composing effect by the runtime BindingResolver',\n examples: ['@callsitePayload.error', '@callsitePayload.row'],\n requiresPath: true,\n },\n} as const;\n\n/**\n * Validation rules for bindings in different contexts.\n */\nexport const BINDING_CONTEXT_RULES = {\n guard: {\n allowed: ['entity', 'payload', 'state', 'now', 'config', 'user'] as const,\n description:\n 'Guards can access entity fields, event payload, current state, time, the call-site trait config (@config.X), and the authenticated user context (@user.id, @user.role) for ownership / role gates. Config access lets atoms write mode-aware guards — e.g. std-modal\\'s OPEN can require @payload.row only when @config.mode equals \"edit\", letting create-mode legitimately fire OPEN with no row. Like effects, @config.X is substituted at molecule/organism inline time with the literal call-site value; at atom-scope validate, @config is allowed-but-unresolved.',\n },\n effect: {\n allowed: ['entity', 'payload', 'state', 'now', 'trait', 'config', 'user', 'callsitePayload'] as const,\n description:\n 'Effects can access and modify entity fields, use payload data, embed another trait\\'s live frame via @trait.X inside render-ui children, read trait config values (@config.X) for atoms parameterized by their call-site, and read the authenticated user context (@user.id, @user.role). At molecule/organism inline time, @config.X is substituted with the literal value from the call-site config block; at atom-scope validate, @config is allowed-but-unresolved. @callsitePayload.X is the call-site-captured event payload emitted by the compiler\\'s inline-trait hoisting (a hoisted render block that captured @payload); it is resolved at the composing effect by the runtime BindingResolver.',\n },\n tick: {\n allowed: ['entity', 'state', 'now', 'config', 'user'] as const,\n description: 'Ticks can access entity fields, current state, time, trait config (@config.X) for parameterized atoms, and the authenticated user context (@user.id, @user.role). Same substitution semantics as guards/effects.',\n },\n} as const;\n\nexport type BindingContext = keyof typeof BINDING_CONTEXT_RULES;\n\n// ============================================================================\n// Render-Time Binding Markers\n// ============================================================================\n\n/**\n * Tag property of a `RenderBindingMarker`. `$`-prefixed so it can never\n * collide with a pattern prop key (prop keys are camelCase identifiers).\n */\nexport const RENDER_BINDING_MARKER = '$renderBinding' as const;\n\n/**\n * A render-ui prop leaf that is evaluated at RENDER time, not at flush time.\n *\n * The interpreted path's executor carries `@entity`-dependent leaves into\n * slot content as these markers instead of resolving them eagerly; the\n * renderer (`@almadar/ui`'s SlotContentRenderer) resolves each marker\n * against the live entity store on every render — the same model the\n * compiled shell uses (state-based JSX reading `fields?.X` per React\n * render). Payload-dependent leaves are never deferred: `@payload` is\n * event-scoped and does not exist at render time.\n *\n * A `type` (not `interface`) so it carries an implicit index signature and\n * stays assignable to the `SExpr` record branch at guard call sites.\n */\nexport type RenderBindingMarker = {\n readonly [RENDER_BINDING_MARKER]: true;\n /** The raw prop expression: a binding string (`'@entity.hp'`, embedded\n * form `'HP: @entity.hp'`) or an S-expression tree. */\n readonly expression: SExpr;\n};\n\n/** Narrow an arbitrary prop value to a `RenderBindingMarker`. */\nexport function isRenderBindingMarker(value: RuntimeValue): value is RenderBindingMarker {\n return (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n RENDER_BINDING_MARKER in value &&\n value[RENDER_BINDING_MARKER] === true\n );\n}\n\n/** Matches a whole `@entity` token (path or bracket suffix allowed). */\nconst ENTITY_BINDING_RE = /@entity(?=[.\\[\\]]|$)/;\n\n/** Matches a whole `@payload` / `@callsitePayload` token. */\nconst PAYLOAD_BINDING_RE = /@(?:callsitePayload|payload)(?=[.\\[\\]]|$)/;\n\n/**\n * Does this raw prop expression reference `@entity` anywhere (pure binding,\n * embedded-binding string, nested S-expression, or object tree)? Marker\n * objects count as entity-referencing by construction.\n */\nexport function containsEntityBinding(value: SExpr): boolean {\n if (typeof value === 'string') return ENTITY_BINDING_RE.test(value);\n if (Array.isArray(value)) return value.some(containsEntityBinding);\n if (value !== null && typeof value === 'object') {\n if (isRenderBindingMarker(value)) return true;\n return Object.values(value as Record<string, SExpr>).some(containsEntityBinding);\n }\n return false;\n}\n\n/**\n * Does this raw prop expression reference the event payload (`@payload` /\n * `@callsitePayload`) anywhere? Such leaves stay flush-time evaluated —\n * the payload does not exist at render time.\n */\nexport function containsPayloadBinding(value: SExpr): boolean {\n if (typeof value === 'string') return PAYLOAD_BINDING_RE.test(value);\n if (Array.isArray(value)) return value.some(containsPayloadBinding);\n if (value !== null && typeof value === 'object') {\n return Object.values(value as Record<string, SExpr>).some(containsPayloadBinding);\n }\n return false;\n}\n\n// ============================================================================\n// Binding Validation Helpers\n// ============================================================================\n\n/**\n * Check if a binding is valid in a given context.\n *\n * @param binding - Parsed binding\n * @param context - Context where binding is used\n * @returns Error message if invalid, null if valid\n */\nexport function validateBindingInContext(\n binding: { type: 'core' | 'entity'; root: string },\n context: BindingContext\n): string | null {\n const rules = BINDING_CONTEXT_RULES[context];\n\n if (binding.type === 'core') {\n if (!(rules.allowed as readonly string[]).includes(binding.root)) {\n return `Binding @${binding.root} is not allowed in ${context} context. Allowed: ${rules.allowed.join(', ')}`;\n }\n }\n\n // Entity bindings are always allowed (they reference singletons/runtime entities)\n return null;\n}\n\n/**\n * Get all valid binding examples for a context.\n *\n * @param context - Context to get examples for\n * @returns Array of example binding strings\n */\nexport function getBindingExamples(context: BindingContext): string[] {\n const rules = BINDING_CONTEXT_RULES[context];\n const examples: string[] = [];\n\n for (const binding of rules.allowed) {\n const doc = BINDING_DOCS[binding];\n examples.push(...doc.examples);\n }\n\n // Add entity binding example\n examples.push('@GameConfig.gravity', '@Filter.searchTerm');\n\n return examples;\n}\n","/**\n * Binding root classification\n *\n * The prefix of an `@X.path` binding expression identifies which runtime\n * context resolves the rest of the path. This type is the TS-side mirror\n * of `OirBindingRoot` in `orbital-core`'s IR; publishing it from\n * `@almadar/core` lets the codegen, the runtime binding resolver, and\n * the verifier's schema walker all refer to the same narrow union.\n *\n * Distinct from {@link ParsedBinding.root} (which is a plain string): use\n * `BindingRoot` whenever you need exhaustiveness over the known prefixes.\n *\n * - `entity`: `@entity.field` — the trait's linked entity (first row on\n * the client, `getById` result on the server).\n * - `payload`: `@payload.x` — the last event's payload.\n * - `state`: `@state.x` — the state machine's `state` slot (rare;\n * mostly used for guard/effect contexts).\n * - `config`: `@config.x` — the trait ref's merged config from the\n * molecule call site.\n * - `user`: `@user.x` — authenticated user / agent context.\n * - `trait`: `@trait.x` — render-time reference to another trait's\n * mounted view. Resolved by `<TraitFrame>` at runtime, not by the\n * SExpression compiler.\n * - `item`: `@item.x` — iterator variable inside a `map` / repeat\n * pattern.\n * - `now`: `@now` — current timestamp (ISO string).\n * - `computed`: `@computed.x` — evaluator-computed value (Phase 4.5).\n * - `other`: catch-all for unknown prefixes or entity-reference\n * bindings (`@User.name`, `@_item`).\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\nimport type { RuntimeValue } from './json.js';\n\nexport type BindingRoot =\n | 'entity'\n | 'payload'\n | 'state'\n | 'config'\n | 'user'\n | 'trait'\n | 'item'\n | 'now'\n | 'computed'\n | 'other';\n\n/** Every known binding root, in a stable order — useful for exhaustiveness checks. */\nexport const BINDING_ROOTS: readonly BindingRoot[] = [\n 'entity',\n 'payload',\n 'state',\n 'config',\n 'user',\n 'trait',\n 'item',\n 'now',\n 'computed',\n 'other',\n] as const;\n\nconst KNOWN_ROOTS = new Set<string>(BINDING_ROOTS.filter((r) => r !== 'other'));\n\n/**\n * Narrow a raw binding-root string (e.g. the `root` field of\n * `ParsedBinding` from `./expression.ts`) to a `BindingRoot`. Returns\n * `'other'` for entity-reference roots like `@User.name` or unknown\n * prefixes.\n */\nexport function toBindingRoot(root: string): BindingRoot {\n return KNOWN_ROOTS.has(root) ? (root as BindingRoot) : 'other';\n}\n\n/**\n * A trait reference string of the form `@trait.<TraitName>`. Used as the\n * value type for `trait`-typed config fields. The runtime + compiled codegen\n * both substitute this with embedded trait UI at render time.\n *\n * Branded as a literal-template type so TS narrows on use; consumers should\n * call {@link isTraitFieldRef} to validate runtime values before assignment.\n */\nexport type TraitFieldRef = `@trait.${string}`;\n\nconst TRAIT_REF_PATTERN = /^@trait\\.[A-Z][a-zA-Z0-9]*$/;\n\n/** Type guard: narrow an unknown value to {@link TraitFieldRef}. */\nexport function isTraitFieldRef(value: RuntimeValue): value is TraitFieldRef {\n return typeof value === 'string' && TRAIT_REF_PATTERN.test(value);\n}\n\n/** Zod schema for {@link TraitFieldRef} values. Useful when validating analyzer\n * JSON or recipe overrides at runtime boundaries. */\nexport const TraitFieldRefSchema = z\n .string()\n .regex(TRAIT_REF_PATTERN, 'expected `@trait.<TraitName>` reference');\n","/**\n * Authenticated user context — what `@user.x` resolves against.\n *\n * The canonical shape for the `user` binding root, shared by both execution\n * paths: the JS interpreter resolves `@user.id` through\n * `EvaluationContext.user`, and the compiled shell emits `user?.id` against the\n * `UserContext` its `@app/shared` re-exports from here.\n *\n * `id` is the field the behavior library reads for ownership scoping and `role`\n * the field it reads for capability gating. Auth providers that name the subject\n * `uid` must normalize at their boundary — {@link normalizeUserContext} does that.\n *\n * @packageDocumentation\n */\n\nimport type { FieldValue } from './entity.js';\n\n/** Authenticated user / agent identity behind `@user.x` bindings. */\nexport interface UserContext {\n /** Stable subject identifier. `@user.id` — the ownership key. */\n id: string;\n /** `@user.email` */\n email?: string;\n /** `@user.name` — display name. */\n name?: string;\n /** `@user.role` — single role string, compared against a policy's allowed list. */\n role?: string;\n /** `@user.permissions` — fine-grained capability strings. */\n permissions?: string[];\n /** Additional provider claims, readable as `@user.<claim>`. */\n [key: string]: FieldValue | undefined;\n}\n\n/**\n * The identity of an unauthenticated viewer. A resolvable object rather than\n * `undefined` so a role predicate evaluates to a definite `false` instead of\n * comparing against nothing.\n */\nexport const ANONYMOUS_USER: UserContext = {\n id: 'anonymous',\n role: 'anonymous',\n permissions: [],\n};\n\n/** Provider-shaped identity claims, before normalization. */\nexport interface RawUserClaims {\n id?: string;\n uid?: string;\n email?: string | null;\n name?: string;\n displayName?: string | null;\n role?: string;\n permissions?: string[];\n [key: string]: FieldValue | undefined;\n}\n\n/** Claim keys {@link normalizeUserContext} derives rather than copies verbatim. */\nconst DERIVED_CLAIM_KEYS: readonly string[] = ['id', 'name', 'displayName', 'email'];\n\n/**\n * Normalize provider claims into a {@link UserContext}.\n *\n * Firebase (and most OIDC providers) name the subject `uid` and the display name\n * `displayName`, while every `.lolo` behavior reads `@user.id` / `@user.name`.\n * Without this normalization `@user.id` is `undefined` against a fully\n * authenticated request and every ownership filter silently matches no rows.\n * `uid` is preserved so `@user.uid` keeps working.\n *\n * Returns `undefined` for absent or subject-less claims so callers can\n * distinguish \"no auth ran\" from \"anonymous\"; use {@link ANONYMOUS_USER} where a\n * definite identity is required.\n */\nexport function normalizeUserContext(\n claims: RawUserClaims | null | undefined,\n): UserContext | undefined {\n if (!claims) return undefined;\n const id = claims.id ?? claims.uid;\n if (typeof id !== 'string' || id.length === 0) return undefined;\n\n const user: UserContext = { id };\n for (const [key, value] of Object.entries(claims)) {\n if (value === undefined || DERIVED_CLAIM_KEYS.includes(key)) continue;\n user[key] = value;\n }\n\n const name = claims.name ?? claims.displayName;\n if (typeof name === 'string' && name.length > 0) user.name = name;\n if (typeof claims.email === 'string' && claims.email.length > 0) user.email = claims.email;\n\n return user;\n}\n\n/**\n * Turn a row of an app's `[identity]` entity into a viewer.\n *\n * There is no separate persona shape: an identity row IS the persona\n * (`Almadar_LOLO_Identity.md` §4.3), so this only guards the one field the\n * behavior library requires — a non-empty string `id` — and passes every other\n * declared field through as a `@user.<field>` claim. Rows without a usable id\n * yield `undefined` rather than a persona nobody can own rows as.\n */\nexport function personaFromIdentityRow(\n row: Record<string, FieldValue | undefined>,\n): UserContext | undefined {\n const id = row['id'];\n if (typeof id !== 'string' || id.length === 0) return undefined;\n const persona: UserContext = { id };\n for (const [key, value] of Object.entries(row)) {\n if (key === 'id' || value === undefined) continue;\n persona[key] = value;\n }\n return persona;\n}\n\n/**\n * The viewer a host presents when nothing named one.\n *\n * Without this, `@user` is `Null` in headless verify and preview, so every\n * `viewerName: @user.name` binding renders blank and the account menu never\n * appears — an app that cannot say who you are. Worse, an ownership filter that\n * works and one that is broken both render an empty table.\n *\n * `role` is deliberately EMPTY, not a guess. A default of `admin` would silently\n * flip which branch renders at the 38 `@user.role` comparisons in the corpus;\n * an empty role matches no literal, exactly as `Null` did, so this fixes\n * \"undefined at runtime\" without changing a single guard outcome.\n */\nexport const DEFAULT_VIEWER: UserContext = {\n id: 'viewer-1',\n name: 'Dev Viewer',\n email: 'viewer@example.com',\n role: '',\n};\n\n/** Look a persona up in a roster by id, or by role when no id matches. */\nexport function findPersonaInRoster(\n roster: readonly UserContext[],\n idOrRole: string,\n): UserContext | undefined {\n return (\n roster.find((p) => p.id === idOrRole) ??\n roster.find((p) => p.role === idOrRole)\n );\n}\n\n/**\n * Resolve a persona spec — a bare id/role (`Person Id 3`, `moderator`) or a full\n * JSON `UserContext` — into a viewer. This is the `ALMADAR_PERSONA` contract,\n * shared by every host that presents an app as somebody.\n *\n * The roster is the app's OWN declared personas — the seeded rows of its\n * `[identity]` entity (`Almadar_LOLO_Identity.md` §4.3) — supplied by the host\n * that has them in hand (the runtime's live store on the interpreter path, the\n * schema-derived seed rows on the compiled path). There is no global roster:\n * an app without an `[identity]` entity resolves only JSON-form specs.\n *\n * Throws on anything unresolvable rather than returning `undefined`: \"no persona\"\n * and \"persona silently ignored\" look identical on screen, so a bad spec must\n * fail at boot instead of rendering as nobody.\n */\nexport function resolvePersonaSpec(spec: string, roster: readonly UserContext[]): UserContext {\n const raw = spec.trim();\n if (!raw.startsWith('{')) {\n const declared = findPersonaInRoster(roster, raw);\n if (!declared) {\n const known = roster.map((p) => `${p.id}/${p.role ?? '-'}`).join(', ');\n throw new Error(\n `Persona \"${raw}\" is not a declared persona id or role. ` +\n (roster.length > 0\n ? `Known: ${known}`\n : 'This app declares no [identity] entity, so only the JSON persona form is accepted.'),\n );\n }\n return declared;\n }\n let claims: RawUserClaims;\n try {\n claims = JSON.parse(raw);\n } catch {\n throw new Error(`Persona is not valid JSON: ${raw}`);\n }\n const user = normalizeUserContext(claims);\n if (!user) {\n throw new Error(`Persona needs an \"id\" (or \"uid\"): ${raw}`);\n }\n return user;\n}\n\n// ============================================================================\n// Dev identity token\n// ============================================================================\n\n/**\n * Marks a bearer token as a mocked dev identity rather than a real ID token.\n * The prefix is deliberately unmistakable: a server accepts these ONLY behind an\n * explicit dev opt-in, so a production deployment rejects them like any other\n * malformed token.\n */\nexport const DEV_TOKEN_PREFIX = 'almadar-dev.';\n\n/**\n * Encode a viewer as a dev bearer token.\n *\n * Carries the WHOLE identity, not just the subject: real Firebase claims have no\n * `role`, so a server that only reads `uid` leaves every `@user.role` gate inert\n * even for a signed-in user. URI-encoded JSON keeps the token header-safe (no\n * spaces or delimiters) and works unchanged in Node and the browser.\n */\nexport function encodeDevIdentityToken(user: UserContext): string {\n return DEV_TOKEN_PREFIX + encodeURIComponent(JSON.stringify(user));\n}\n\n/**\n * Decode a dev bearer token back into a viewer, or `undefined` if it is not one\n * / is malformed — callers fail closed rather than inventing an identity.\n */\nexport function decodeDevIdentityToken(token: string): UserContext | undefined {\n if (!token.startsWith(DEV_TOKEN_PREFIX)) return undefined;\n try {\n const claims: RawUserClaims = JSON.parse(\n decodeURIComponent(token.slice(DEV_TOKEN_PREFIX.length)),\n );\n return normalizeUserContext(claims);\n } catch {\n return undefined;\n }\n}\n","/**\n * Agent Types\n *\n * Defines the AgentContext interface and related types for the agent/* operator namespace.\n * These types are the contract between operators (language) and implementation (runtime).\n *\n * @packageDocumentation\n */\n\nimport type { ServiceParams } from './service.js';\nimport type { EventPayloadValue } from './expression.js';\nimport type { FieldValue } from './entity.js';\nimport type { JsonSchema } from '../factory/types.js';\nimport type { ValidationError } from './validation.js';\nimport type { Orbital } from './orbital.js';\nimport type { OrbitalSchema } from './schema.js';\nimport type { JsonValue, RuntimeValue } from './json.js';\nimport type { AnalysisResult, PlanSnapshot, GitHubRepo, GitHubIssue } from './plan.js';\n\n// ============================================================================\n// Agent Memory Types\n// ============================================================================\n\n/**\n * Categories for agent memories.\n */\nexport type AgentMemoryCategory =\n | 'preference'\n | 'correction'\n | 'pattern-affinity'\n | 'entity-template'\n | 'error-resolution';\n\n/**\n * A single memory record stored by the agent.\n */\nexport interface AgentMemoryRecord {\n /** Unique memory identifier */\n id: string;\n /** Memory content (natural language) */\n content: string;\n /** Memory category */\n category: AgentMemoryCategory;\n /** Strength value (0.0-1.0), decays over time unless pinned */\n strength: number;\n /** Whether this memory is pinned (immune to decay) */\n pinned: boolean;\n /** Memory scope */\n scope: 'global' | 'project';\n /** ISO timestamp of last access */\n lastAccessedAt: string;\n /** ISO timestamp of creation */\n createdAt: string;\n}\n\n// ============================================================================\n// Agent Context Types\n// ============================================================================\n\n/**\n * Strategy for context compaction.\n */\nexport type AgentCompactStrategy = 'hybrid' | 'summarize' | 'truncate' | 'extract';\n\n/**\n * Result of a context compaction operation.\n */\nexport interface AgentCompactResult {\n /** Token count before compaction */\n before: number;\n /** Token count after compaction */\n after: number;\n /** Strategy used */\n strategy: AgentCompactStrategy;\n /** Optional summary generated during compaction */\n summary?: string;\n}\n\n// ============================================================================\n// Agent LLM Types\n// ============================================================================\n\n/**\n * Options for agent/generate calls.\n */\nexport interface AgentGenerateOptions {\n /** LLM provider override */\n provider?: string;\n /** Model override */\n model?: string;\n /** Maximum tokens to generate */\n maxTokens?: number;\n}\n\n// ============================================================================\n// LLM Tool-Calling Contract Types\n// ============================================================================\n//\n// These are the LANGUAGE-LEVEL contract types for the llm/* substrate\n// operators. @almadar/llm's ChatCompletion* types are the WIRE FORMAT; the\n// runtime handler maps between them. Defined here (not in @almadar/llm) so\n// the dependency direction stays core → nothing, llm → core.\n\n/**\n * A message in an LLM tool-calling conversation.\n */\nexport interface LlmMessage {\n role: 'system' | 'user' | 'assistant' | 'tool';\n content: string;\n /** Present on assistant messages that called tools. */\n toolCalls?: ReadonlyArray<LlmToolCall>;\n /** Present on tool-role messages — matches the preceding toolCall's id. */\n toolCallId?: string;\n}\n\n/**\n * A tool call requested by the assistant.\n */\nexport interface LlmToolCall {\n id: string;\n name: string;\n /** JSON-encoded arguments string (as returned by the LLM). */\n arguments: string;\n}\n\n/**\n * A tool definition passed to llm/call-tools.\n */\nexport interface LlmToolDef {\n name: string;\n description: string;\n /** JSON Schema describing the tool's parameters. */\n parameters: JsonSchema;\n}\n\n/**\n * Result of llm/call-tools.\n */\nexport interface LlmCallToolsResult {\n /** The assistant's text response (may be empty when only tool_calls fired). */\n content: string;\n /** Tool calls the assistant requested, if any. */\n toolCalls?: ReadonlyArray<LlmToolCall>;\n /** Token usage from the call. */\n usage: LlmTokenUsage;\n}\n\n/**\n * Token usage from an LLM call.\n */\nexport interface LlmTokenUsage {\n prompt: number;\n completion: number;\n total: number;\n}\n\n// ============================================================================\n// Agent Search Types\n// ============================================================================\n\n/**\n * Result from agent/search-code.\n */\nexport interface AgentCodeSearchResult {\n /** Repository name (owner/repo) */\n repo: string;\n /** File path within the repository */\n path: string;\n /** URL to the file */\n url: string;\n}\n\n// ============================================================================\n// Substrate Result Types\n// ============================================================================\n//\n// Language-level contracts for compose/behavior/validate operator returns.\n// Defined in @almadar/core (not @almadar-io/rabit) because the compiled path\n// also needs them — emitted TS code references these types without depending\n// on rabit. rabit's TS implementations produce/consume these shapes.\n\n/** Result of behavior/instantiate (factory path) or subagent build. */\nexport interface BuilderResult {\n method: string;\n orbitalName: string;\n success: boolean;\n orbitalPath?: string;\n traitCount?: number;\n traitNames?: string[];\n transitionCount?: number;\n childCount?: number;\n error?: string;\n}\n\n/** Result of validate/validate for a single orbital or the composed schema. */\nexport interface ValidateResult {\n valid: boolean;\n errorCount: number;\n errors: ValidationError[];\n orbitalName?: string;\n}\n\n/** Result of compose/compose-all. */\nexport interface ComposeAllResult {\n orbitalCount: number;\n composedPath: string;\n success: boolean;\n layout?: string;\n wiringConnections?: number;\n}\n\n/** Result of compose/compose-children (recursive builds). */\nexport interface ComposeChildrenResult {\n parentName: string;\n childCount: number;\n orbitalName: string;\n success: boolean;\n}\n\n/** Result of the repair service. */\nexport interface RepairResult {\n orbitalName: string;\n success: boolean;\n attempt: number;\n paramsChanged: boolean;\n error?: string;\n}\n\n/** Result of lolo/emit-body (free-lolo path). */\nexport interface LoloEmitResult {\n orbitalName: string;\n success: boolean;\n loloSource: string;\n error?: string;\n}\n\n/** Result of the planner service. */\nexport interface PlannerResult {\n organism: string;\n operationCount: number;\n pendingQuestions: boolean;\n cached: boolean;\n success: boolean;\n error?: string;\n}\n\n/** Result of the executor (spawn-subagents). */\nexport interface ExecutePlanResult {\n dispatchedOrbitals: string[];\n noopForBuild: boolean;\n success: boolean;\n error?: string;\n}\n\n/** Result of dispatch-updates. */\nexport interface DispatchUpdatesResult {\n updatedOrbitals: string[];\n updateCount: number;\n success: boolean;\n}\n\n/** Discriminated union of all substrate service-call results. */\nexport type ServiceCallResult =\n | BuilderResult\n | ValidateResult\n | ComposeAllResult\n | ComposeChildrenResult\n | RepairResult\n | LoloEmitResult\n | PlannerResult\n | ExecutePlanResult\n | DispatchUpdatesResult;\n\n// ============================================================================\n// Session History\n// ============================================================================\n\n/** A single entry in an orbital's session history (build/conversation log). */\nexport interface SessionHistoryEntry {\n /** Role of the entry's author (e.g. 'user', 'assistant', 'system') */\n role: string;\n /** Entry content (natural language or structured description) */\n content: string;\n /** Epoch milliseconds when the entry was recorded */\n timestamp: number;\n}\n\n/**\n * Runtime guard for `SessionHistoryEntry` — narrows interpreter-produced\n * `unknown` values at the `SessionContext.appendHistory` boundary.\n */\nexport function isSessionHistoryEntry(value: RuntimeValue): value is SessionHistoryEntry {\n if (typeof value !== 'object' || value === null) return false;\n return (\n 'role' in value && typeof value.role === 'string' &&\n 'content' in value && typeof value.content === 'string' &&\n 'timestamp' in value && typeof value.timestamp === 'number'\n );\n}\n\n// ============================================================================\n// Agent Context Interface\n// ============================================================================\n\n/**\n * AgentContext is the runtime contract for agent/* operators.\n *\n * The evaluator dispatches agent/* operators to methods on this interface.\n * Pure methods (usable in guards) return synchronously.\n * Effect methods return Promises.\n *\n * When ctx.agent is undefined, operators return safe defaults ([], 0, false, \"\").\n * Implementations live in @almadar-io/agent-runtime (Phase 2B).\n */\nexport interface AgentContext {\n // Memory (pure)\n recall(query: string, limit?: number): AgentMemoryRecord[];\n memories(category?: AgentMemoryCategory): AgentMemoryRecord[];\n memoryStrength(id: string): number;\n isPinned(id: string): boolean;\n\n // Memory (effects)\n memorize(content: string, category: AgentMemoryCategory, scope?: 'global' | 'project'): Promise<string>;\n forget(id: string): Promise<void>;\n pin(id: string): Promise<void>;\n reinforce(id: string): Promise<void>;\n decay(): Promise<number>;\n\n // LLM (pure)\n provider(): string;\n model(): string;\n\n // LLM (effects)\n generate(prompt: string, options?: AgentGenerateOptions): Promise<string>;\n switchProvider(provider: string, model?: string): void;\n\n // Tools (pure)\n tools(): string[];\n\n // Tools (effects)\n invoke(toolName: string, args: ServiceParams): Promise<EventPayloadValue>;\n\n // Context (pure)\n tokenCount(): number;\n contextUsage(): number;\n\n // Context (effects)\n compact(strategy?: AgentCompactStrategy): Promise<AgentCompactResult>;\n\n // Session (pure)\n sessionId(): string;\n\n // Session (effects)\n fork(label?: string): Promise<string>;\n label(text: string): void;\n\n // Search (effects)\n searchCode(query: string, language?: string): Promise<AgentCodeSearchResult[]>;\n}\n\n// ============================================================================\n// Substrate Context Interfaces\n// ============================================================================\n//\n// Focused runtime contracts for the substrate operator namespaces. Each\n// interface backs one module of operators (llm/*, workspace/*, etc.). The\n// evaluator reads from ctx.<namespace>; the runtime (rabit) supplies\n// concrete implementations via contextExtensions. When a context is\n// undefined, operators return safe defaults (matching the agent/* pattern).\n\n/** Backs the llm/* operators (6 ops). */\nexport interface LlmContext {\n generate(prompt: string, options?: { json?: boolean; maxTokens?: number; provider?: string; model?: string }): Promise<string>;\n callTools(messages: LlmMessage[], tools: LlmToolDef[]): Promise<LlmCallToolsResult>;\n embed(texts: string[]): Promise<number[][]>;\n tokenCount(): number;\n switchProvider(provider: string, model?: string): void;\n compact(strategy?: string): Promise<{ before: number; after: number }>;\n}\n\n/** Backs the workspace/* operators (11 ops). */\nexport interface WorkspaceContext {\n readOrbital(name: string): Promise<Orbital>;\n writeOrbital(name: string, content: Orbital): Promise<void>;\n readFile(path: string): Promise<string>;\n writeFile(path: string, content: string): Promise<void>;\n exists(path: string): boolean;\n listOrbitals(): string[];\n readSchema(): Promise<OrbitalSchema>;\n writeSchema(schema: OrbitalSchema): Promise<void>;\n readPlan(): Promise<PlanSnapshot>;\n writePlan(plan: PlanSnapshot): Promise<void>;\n archiveOrbital(name: string): Promise<void>;\n}\n\n/** Backs the session/* operators (9 ops). */\nexport interface SessionContext {\n readSpec(orbitalName: string): Promise<Orbital>;\n writeSpec(orbitalName: string, spec: Orbital): Promise<void>;\n readMemory(orbitalName: string): Promise<AgentMemoryRecord[]>;\n writeMemory(orbitalName: string, memory: AgentMemoryRecord[]): Promise<void>;\n readHistory(orbitalName: string): Promise<SessionHistoryEntry[]>;\n appendHistory(orbitalName: string, entry: SessionHistoryEntry): Promise<void>;\n readErrors(orbitalName: string): Promise<string[]>;\n writeErrors(orbitalName: string, errors: string[]): Promise<void>;\n readAnalysis(orbitalName: string): Promise<AnalysisResult>;\n}\n\n/** Backs the memory/* operators (3 ops). */\nexport interface MemoryContext {\n recall(query: string, limit?: number): AgentMemoryRecord[];\n store(content: string, category?: string, strength?: number): Promise<string>;\n list(category?: string): AgentMemoryRecord[];\n}\n\n/** Backs the trace/* operators (2 ops). */\nexport interface TraceContext {\n emit(event: string, payload?: EventPayloadValue): void;\n log(message: string, level?: 'log' | 'warn' | 'error', data?: EventPayloadValue): void;\n}\n\n/** Backs the integration/* operators (3 ops). */\nexport interface IntegrationContext {\n http(method: string, url: string, body?: FieldValue, headers?: Record<string, string>): Promise<JsonValue>;\n githubGetRepo(owner: string, repo: string): Promise<GitHubRepo>;\n githubCreateIssue(owner: string, repo: string, title: string, body?: string): Promise<GitHubIssue>;\n}\n","/**\n * Plan & Analysis Types\n *\n * Lifted from @almadar-io/rabit's coordinator types. These are the\n * language-level contracts for the planner/analysis pipeline — the\n * session/* and workspace/* substrate operators produce and consume\n * these shapes. Defined here (not in rabit) so both the compiled path\n * (orbital-rust codegen → @almadar/server) and the interpreted path\n * (@almadar/runtime) reference the same types without depending on rabit.\n *\n * @packageDocumentation\n */\n\nimport type { EntityField } from './field.js';\nimport type { EntityPersistence } from './entity.js';\nimport type { RuntimeValue } from './json.js';\nimport type { OrbitalSchema } from './schema.js';\nimport type { PageTraitRef } from './page.js';\nimport type { TraitReference, TraitConfigObject } from './trait.js';\nimport type { ThemeDefinition } from './domain.js';\nimport type { RuleOverlay, TraitOverlay } from '../factory/overlays.js';\nimport type {\n EventWiringEntry,\n LayoutStrategy,\n MakeTraitRefOpts,\n} from '../builders/index.js';\n\n// ============================================================================\n// Clarification System\n// ============================================================================\n\nexport type ClarificationLevel = 'organism' | 'molecule' | 'atom_trait';\n\nexport interface ClarificationCandidate {\n id: string;\n label: string;\n description: string;\n whyThisFits: string;\n}\n\nexport interface Clarification {\n level: ClarificationLevel;\n scope: { orbitalName?: string; traitName?: string };\n question: string;\n candidates: ClarificationCandidate[];\n skipDefault: string;\n skippable: true;\n}\n\n// ============================================================================\n// Orbital Analysis Params\n// ============================================================================\n\nexport interface AnalysisPageOverride {\n name: string;\n path?: string;\n linkedEntity?: string;\n traits?: PageTraitRef[];\n}\n\nexport interface ExtraTraitRef\n extends Pick<\n TraitReference,\n 'ref' | 'name' | 'linkedEntity' | 'config' | 'events' | 'listens' | 'emitsScope'\n > {\n from: string;\n as: string;\n}\n\nexport interface AnalysisOrbitalParams {\n fields?: EntityField[];\n pagePath?: string;\n persistence?: EntityPersistence;\n entityName?: string;\n collection?: string;\n traitOverrides?: Record<\n string,\n Pick<MakeTraitRefOpts, 'config' | 'linkedEntity' | 'events' | 'name' | 'emitsScope' | 'listens'>\n >;\n extraTraits?: ExtraTraitRef[];\n pages?: AnalysisPageOverride[];\n}\n\n// ============================================================================\n// Analysis Result\n// ============================================================================\n\nexport interface AnalysisOrbital {\n orbitalName: string;\n suggestedBehavior: string | null;\n entityName?: string;\n pageNames?: ReadonlyArray<string>;\n params?: AnalysisOrbitalParams;\n traitOverlay?: TraitOverlay;\n paletteTopics?: string[];\n primitiveHints?: string[];\n}\n\nexport interface AnalysisRename {\n oldName: string;\n newName: string;\n}\n\nexport interface ComplexityAssessment {\n score: number;\n category: 'simple' | 'moderate' | 'complex';\n reasoning: string;\n detectedEntities?: string[];\n detectedFeatures?: string[];\n}\n\nexport interface AnalysisResult {\n userRequest: string;\n complexity: ComplexityAssessment;\n route: 'direct' | 'direct_with_questions' | 'decompose';\n organism: string;\n appName: string;\n organismReason: string;\n orbitals: AnalysisOrbital[];\n renames?: AnalysisRename[];\n deletedOrbitals?: string[];\n ruleOverlay?: RuleOverlay;\n estimatedMinutes?: number;\n schema: OrbitalSchema;\n wiring?: EventWiringEntry[];\n layout?: LayoutStrategy | 'detect';\n themeOverrides?: Partial<ThemeDefinition>;\n pendingClarifications?: Clarification[];\n}\n\n// ============================================================================\n// Plan Snapshot\n// ============================================================================\n\nexport interface SpawnResult {\n orbitalName: string;\n ok: boolean;\n traitNames: ReadonlyArray<string>;\n error?: string;\n durationMs: number;\n}\n\nexport type PlanSnapshotStatus = 'proposed' | 'confirmed' | 'built' | 'failed';\n\nexport interface PlanSnapshot {\n schemaVersion: 1;\n status: PlanSnapshotStatus;\n builtAt: string;\n organism: string | null;\n appName: string | null;\n organismReason: string | null;\n complexity: ComplexityAssessment | null;\n themeOverrides: Partial<ThemeDefinition>;\n ruleOverlay: RuleOverlay | null;\n orbitals: ReadonlyArray<AnalysisOrbital>;\n renames: ReadonlyArray<AnalysisRename>;\n deletedOrbitals: ReadonlyArray<string>;\n priorBuiltOrbitals: ReadonlyArray<AnalysisOrbital>;\n spawnedOrbitalResults: ReadonlyArray<SpawnResult>;\n skippedOrbitalNames: ReadonlyArray<string>;\n pendingClarifications: ReadonlyArray<Clarification>;\n paletteTopics?: string[];\n}\n\n/**\n * Runtime guard for `PlanSnapshot` — narrows interpreter-produced `unknown`\n * values at the `WorkspaceContext.writePlan` boundary. Discriminates on the\n * snapshot envelope (schemaVersion, status, roster arrays), not deep contents.\n */\nexport function isPlanSnapshot(value: RuntimeValue): value is PlanSnapshot {\n if (typeof value !== 'object' || value === null) return false;\n const statuses: ReadonlyArray<PlanSnapshotStatus> = ['proposed', 'confirmed', 'built', 'failed'];\n return (\n 'schemaVersion' in value && value.schemaVersion === 1 &&\n 'status' in value && statuses.some((s) => s === value.status) &&\n 'builtAt' in value && typeof value.builtAt === 'string' &&\n 'orbitals' in value && Array.isArray(value.orbitals) &&\n 'renames' in value && Array.isArray(value.renames) &&\n 'deletedOrbitals' in value && Array.isArray(value.deletedOrbitals)\n );\n}\n\n// ============================================================================\n// Compose Options\n// ============================================================================\n\nexport interface ComposeOptions {\n appName?: string;\n wiring?: EventWiringEntry[];\n layout?: LayoutStrategy | 'auto';\n themeOverrides?: Partial<ThemeDefinition>;\n}\n\n// ============================================================================\n// GitHub Integration Types\n// ============================================================================\n\nexport interface GitHubRepo {\n id: number;\n name: string;\n full_name: string;\n owner: { login: string };\n private: boolean;\n html_url: string;\n description: string | null;\n default_branch: string;\n clone_url: string;\n}\n\nexport interface GitHubIssue {\n id: number;\n number: number;\n title: string;\n body: string | null;\n state: 'open' | 'closed';\n html_url: string;\n user: { login: string };\n created_at: string;\n updated_at: string;\n}\n","/**\n * Interaction Model Types\n *\n * Defines how users interact with entities in the application.\n * Used to drive trait selection and UI slot usage.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Flow Types\n// ============================================================================\n\n/**\n * Create flow - how new items are created\n */\nexport type CreateFlow = 'modal' | 'page' | 'inline' | 'none';\n\n/**\n * Edit flow - how items are edited\n */\nexport type EditFlow = 'modal' | 'page' | 'inline' | 'none';\n\n/**\n * View flow - how item details are viewed\n */\nexport type ViewFlow = 'drawer' | 'page' | 'modal' | 'inline' | 'none';\n\n/**\n * Delete flow - how items are deleted\n */\nexport type DeleteFlow = 'confirm' | 'instant' | 'none';\n\n/**\n * List interaction - what happens when clicking list items\n */\nexport type ListInteraction = 'click-to-view' | 'click-to-edit' | 'inline-edit';\n\n// ============================================================================\n// Interaction Model\n// ============================================================================\n\n/**\n * InteractionModel - defines how users interact with entities.\n *\n * This drives:\n * - Which traits to attach (EntityManagement, ModalEdit, etc.)\n * - How render_ui effects target slots (modal, drawer, page)\n * - What UI patterns to use\n */\nexport interface InteractionModel {\n /** How new items are created */\n createFlow: CreateFlow;\n\n /** How items are edited */\n editFlow: EditFlow;\n\n /** How item details are viewed */\n viewFlow: ViewFlow;\n\n /** How items are deleted */\n deleteFlow: DeleteFlow;\n\n /** What happens when clicking list items */\n listInteraction?: ListInteraction;\n\n /** Enable bulk actions (select multiple, delete all) */\n bulkActions?: boolean;\n\n /** Enable real-time updates */\n realtime?: boolean;\n}\n\nexport const InteractionModelSchema = z.object({\n createFlow: z.enum(['modal', 'page', 'inline', 'none']),\n editFlow: z.enum(['modal', 'page', 'inline', 'none']),\n viewFlow: z.enum(['drawer', 'page', 'modal', 'inline', 'none']),\n deleteFlow: z.enum(['confirm', 'instant', 'none']),\n listInteraction: z.enum(['click-to-view', 'click-to-edit', 'inline-edit']).optional(),\n bulkActions: z.boolean().optional(),\n realtime: z.boolean().optional(),\n});\n\n// ============================================================================\n// Default Models per Domain\n// ============================================================================\n\n/**\n * Default interaction models for each domain type\n */\nexport const DEFAULT_INTERACTION_MODELS: Record<string, InteractionModel> = {\n business: {\n createFlow: 'modal',\n editFlow: 'modal',\n viewFlow: 'drawer',\n deleteFlow: 'confirm',\n listInteraction: 'click-to-view',\n bulkActions: true,\n },\n game: {\n createFlow: 'none',\n editFlow: 'none',\n viewFlow: 'none',\n deleteFlow: 'none',\n realtime: true,\n },\n form: {\n createFlow: 'inline',\n editFlow: 'inline',\n viewFlow: 'none',\n deleteFlow: 'none',\n },\n dashboard: {\n createFlow: 'modal',\n editFlow: 'modal',\n viewFlow: 'drawer',\n deleteFlow: 'confirm',\n listInteraction: 'click-to-view',\n },\n content: {\n createFlow: 'page',\n editFlow: 'page',\n viewFlow: 'page',\n deleteFlow: 'confirm',\n listInteraction: 'click-to-view',\n },\n};\n\n/**\n * Gets the interaction model for a domain.\n * \n * Retrieves the appropriate interaction model configuration based on the\n * specified domain. Falls back to the business model if no specific\n * domain match is found.\n * \n * @param {string} domain - Domain name (e.g., 'healthcare', 'education')\n * @returns {InteractionModel} Interaction model configuration\n * \n * @example\n * getInteractionModelForDomain('healthcare'); // returns healthcare-specific model\n * getInteractionModelForDomain('unknown'); // returns business fallback model\n */\nexport function getInteractionModelForDomain(domain: string): InteractionModel {\n return DEFAULT_INTERACTION_MODELS[domain] ?? DEFAULT_INTERACTION_MODELS.business;\n}\n\n// ============================================================================\n// Type exports\n// ============================================================================\n\nexport type InteractionModelInput = z.input<typeof InteractionModelSchema>;\n","/**\n * Pattern Types (Auto-Generated)\n *\n * DO NOT EDIT MANUALLY — regenerated by almadar-pattern-sync `patterns` command.\n *\n * Generated: 2026-07-30T11:18:58.990Z\n * Pattern count: 268\n */\n\nimport type { FieldValue } from '../types/entity.js';\nimport type { SExpr } from '../types/expression.js';\n\n/**\n * Object-typed pattern prop value. Represents dynamic config objects\n * within pattern props (e.g., style, assetManifest, payload).\n */\nexport type PatternPropValue = Record<string, FieldValue | undefined>;\n\n/**\n * All valid pattern type names from @almadar/core/patterns registry.\n * Use this type in render-ui effects for compile-time validation.\n */\nexport type PatternType =\n | 'about-page-template'\n | 'accordion'\n | 'action-palette'\n | 'action-tile'\n | 'activation-block'\n | 'alert'\n | 'algorithm-canvas'\n | 'animated-counter'\n | 'animated-graphic'\n | 'animated-reveal'\n | 'article-section'\n | 'aside'\n | 'atlas-image'\n | 'atlas-panel'\n | 'auth-layout'\n | 'avatar'\n | 'badge'\n | 'behavior-view'\n | 'biology-canvas'\n | 'bloom-quiz-block'\n | 'book-chapter-view'\n | 'book-cover-page'\n | 'book-nav-bar'\n | 'book-table-of-contents'\n | 'book-viewer'\n | 'box'\n | 'branching-logic-builder'\n | 'breadcrumb'\n | 'button'\n | 'calendar-grid'\n | 'canvas'\n | 'canvas-2d'\n | 'card'\n | 'carousel'\n | 'case-study-card'\n | 'case-study-organism'\n | 'center'\n | 'chart'\n | 'chart-legend'\n | 'chat-bar'\n | 'checkbox'\n | 'chemistry-canvas'\n | 'choice-button'\n | 'code-block'\n | 'code-runner-panel'\n | 'community-links'\n | 'conditional-wrapper'\n | 'confetti-effect'\n | 'confirm-dialog'\n | 'connection-block'\n | 'container'\n | 'content-renderer'\n | 'content-section'\n | 'control-button'\n | 'control-grid'\n | 'counter-template'\n | 'cta-banner'\n | 'dashboard-grid'\n | 'dashboard-layout'\n | 'data-grid'\n | 'data-list'\n | 'date-range-picker'\n | 'date-range-selector'\n | 'day-cell'\n | 'detail-panel'\n | 'dialog'\n | 'dialogue-bubble'\n | 'divider'\n | 'doc-breadcrumb'\n | 'doc-pagination'\n | 'doc-search'\n | 'doc-sidebar'\n | 'doc-toc'\n | 'document-viewer'\n | 'draw-group'\n | 'draw-shape'\n | 'draw-shape-layer'\n | 'draw-sprite'\n | 'draw-sprite-layer'\n | 'draw-text'\n | 'draw-text-layer'\n | 'drawer'\n | 'drawer-slot'\n | 'edge-decoration'\n | 'emoji-picker'\n | 'empty-state'\n | 'entity-cards'\n | 'entity-list'\n | 'entity-table'\n | 'error-boundary'\n | 'error-state'\n | 'feature-card'\n | 'feature-detail-page-template'\n | 'feature-grid'\n | 'feature-grid-organism'\n | 'file-tree'\n | 'filter-group'\n | 'filter-pill'\n | 'flex'\n | 'flip-card'\n | 'flip-container'\n | 'floating-action-button'\n | 'form'\n | 'form-actions'\n | 'form-field'\n | 'form-layout'\n | 'form-section'\n | 'form-section-header'\n | 'game-audio-toggle'\n | 'game-hud'\n | 'game-icon'\n | 'game-menu'\n | 'game-shell'\n | 'generic-app-template'\n | 'geometric-pattern'\n | 'gradient-divider'\n | 'graph-canvas'\n | 'graph-view'\n | 'grid'\n | 'header'\n | 'health-bar'\n | 'hero-organism'\n | 'hero-section'\n | 'hstack'\n | 'icon'\n | 'import-preview-tree'\n | 'import-progress'\n | 'import-source-picker'\n | 'infinite-scroll-sentinel'\n | 'input'\n | 'input-group'\n | 'install-box'\n | 'jazari-state-machine'\n | 'label'\n | 'landing-page-template'\n | 'law-reference-tooltip'\n | 'learning-canvas'\n | 'lightbox'\n | 'likert-scale'\n | 'line-chart'\n | 'loading-state'\n | 'map-view'\n | 'markdown-content'\n | 'marketing-footer'\n | 'marketing-stat-card'\n | 'master-detail'\n | 'master-detail-layout'\n | 'math-canvas'\n | 'matrix-question'\n | 'media-gallery'\n | 'menu'\n | 'meter'\n | 'modal'\n | 'modal-slot'\n | 'module-card'\n | 'navigation'\n | 'notification'\n | 'number-stepper'\n | 'option-constraint-group'\n | 'orbital-visualization'\n | 'overlay'\n | 'page-header'\n | 'page-transition'\n | 'pagination'\n | 'pattern-tile'\n | 'physics-canvas'\n | 'popover'\n | 'positioned-canvas'\n | 'presence'\n | 'pricing-card'\n | 'pricing-grid'\n | 'pricing-organism'\n | 'pricing-page-template'\n | 'progress-bar'\n | 'progress-dots'\n | 'pull-quote'\n | 'pull-to-refresh'\n | 'qr-scanner'\n | 'quiz-block'\n | 'radio'\n | 'range-slider'\n | 'reflection-block'\n | 'relation-select'\n | 'repeatable-form-section'\n | 'reply-tree'\n | 'rich-block-editor'\n | 'runtime-debugger'\n | 'scaled-diagram'\n | 'score-display'\n | 'search-input'\n | 'section'\n | 'section-header'\n | 'segment-renderer'\n | 'select'\n | 'sequence-bar'\n | 'service-catalog'\n | 'showcase-card'\n | 'showcase-organism'\n | 'side-panel'\n | 'sidebar'\n | 'signature-pad'\n | 'simple-grid'\n | 'skeleton'\n | 'social-proof'\n | 'sortable-list'\n | 'spacer'\n | 'sparkline'\n | 'spinner'\n | 'split'\n | 'split-pane'\n | 'split-section'\n | 'stack'\n | 'star-rating'\n | 'stat-badge'\n | 'stat-card'\n | 'stat-display'\n | 'state-graph'\n | 'state-json-view'\n | 'state-machine-view'\n | 'stats-grid'\n | 'stats-organism'\n | 'status-dot'\n | 'step-flow'\n | 'step-flow-organism'\n | 'subagent-trace-panel'\n | 'svg-branch'\n | 'svg-connection'\n | 'svg-flow'\n | 'svg-grid'\n | 'svg-lobe'\n | 'svg-mesh'\n | 'svg-morph'\n | 'svg-node'\n | 'svg-pulse'\n | 'svg-ring'\n | 'svg-shield'\n | 'svg-stack'\n | 'swipeable-row'\n | 'switch'\n | 'tabbed-container'\n | 'table-view'\n | 'tabs'\n | 'tag-cloud'\n | 'tag-input'\n | 'team-card'\n | 'team-organism'\n | 'text-highlight'\n | 'textarea'\n | 'theme-toggle'\n | 'time-slot-cell'\n | 'timeline'\n | 'timer-display'\n | 'toast-slot'\n | 'tooltip'\n | 'trait-frame'\n | 'trait-slot'\n | 'trend-indicator'\n | 'typewriter-text'\n | 'typography'\n | 'ui-slot-renderer'\n | 'upload-drop-zone'\n | 'version-diff'\n | 'violation-alert'\n | 'vote-stack'\n | 'vstack'\n | 'wizard-container'\n | 'wizard-navigation'\n | 'wizard-progress';\n\n/**\n * Pattern props map — each pattern type maps to its valid props interface.\n */\nexport interface PatternPropsMap {\n 'about-page-template': {\n type: 'about-page-template';\n entity: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'accordion': {\n type: 'accordion';\n items: unknown[] | string | SExpr;\n multiple?: boolean | string | SExpr;\n defaultOpenItems?: unknown[] | string | SExpr;\n defaultOpen?: unknown[] | string | SExpr;\n openItems?: unknown[] | string | SExpr;\n onItemToggle?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n toggleEvent?: string | SExpr;\n };\n 'action-palette': {\n type: 'action-palette';\n actions: unknown[] | string | SExpr;\n usedActionIds?: unknown[] | string | SExpr;\n allowDuplicates?: boolean | string | SExpr;\n categoryColors?: PatternPropValue | string | SExpr;\n size?: string | SExpr;\n label?: string | SExpr;\n className?: string | SExpr;\n };\n 'action-tile': {\n type: 'action-tile';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n action: PatternPropValue | string | SExpr;\n size?: string | SExpr;\n disabled?: boolean | string | SExpr;\n categoryColors?: PatternPropValue | string | SExpr;\n };\n 'activation-block': {\n type: 'activation-block';\n question: string | SExpr;\n savedResponse?: string | SExpr;\n saveEvent?: string | SExpr;\n className?: string | SExpr;\n };\n 'alert': {\n type: 'alert';\n children?: unknown | string | SExpr;\n message?: string | SExpr;\n variant?: string | SExpr;\n title?: string | SExpr;\n dismissible?: boolean | string | SExpr;\n onDismiss?: ((...args: unknown[]) => unknown) | string | SExpr;\n onClose?: ((...args: unknown[]) => unknown) | string | SExpr;\n actions?: unknown | string | SExpr;\n className?: string | SExpr;\n dismissEvent?: string | SExpr;\n };\n 'algorithm-canvas': {\n type: 'algorithm-canvas';\n className?: string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n title?: string | SExpr;\n backgroundColor?: string | SExpr;\n bars?: unknown[] | string | SExpr;\n cells?: unknown[] | string | SExpr;\n pointers?: unknown[] | string | SExpr;\n shapes?: unknown[] | string | SExpr;\n interactive?: boolean | string | SExpr;\n animate?: boolean | string | SExpr;\n onShapeClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n };\n 'animated-counter': {\n type: 'animated-counter';\n value: number | string | SExpr;\n duration?: number | string | SExpr;\n prefix?: string | SExpr;\n suffix?: string | SExpr;\n format?: string | SExpr;\n className?: string | SExpr;\n };\n 'animated-graphic': {\n type: 'animated-graphic';\n className?: string | SExpr;\n src?: unknown | string | SExpr;\n svgContent?: string | SExpr;\n animation?: string | SExpr;\n animate?: boolean | string | SExpr;\n duration?: number | string | SExpr;\n delay?: number | string | SExpr;\n easing?: string | SExpr;\n width?: string | number | SExpr;\n height?: string | number | SExpr;\n strokeColor?: string | SExpr;\n fillColor?: string | SExpr;\n alt?: string | SExpr;\n };\n 'animated-reveal': {\n type: 'animated-reveal';\n className?: string | SExpr;\n trigger?: string | SExpr;\n animation?: string | SExpr;\n duration?: number | string | SExpr;\n delay?: number | string | SExpr;\n threshold?: number | string | SExpr;\n once?: boolean | string | SExpr;\n animate?: boolean | string | SExpr;\n easing?: string | SExpr;\n children: unknown | ((...args: unknown[]) => unknown) | string | SExpr;\n };\n 'article-section': {\n type: 'article-section';\n title: string | SExpr;\n children: unknown | string | SExpr;\n maxWidth?: string | SExpr;\n className?: string | SExpr;\n };\n 'aside': {\n type: 'aside';\n className?: string | SExpr;\n children?: unknown | string | SExpr;\n };\n 'atlas-image': {\n type: 'atlas-image';\n asset?: PatternPropValue | string | SExpr;\n size?: number | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n fill?: boolean | string | SExpr;\n fit?: string | SExpr;\n alt?: string | SExpr;\n className?: string | SExpr;\n style?: PatternPropValue | string | SExpr;\n 'aria-hidden'?: boolean | string | SExpr;\n };\n 'atlas-panel': {\n type: 'atlas-panel';\n asset?: PatternPropValue | string | SExpr;\n borderSlice?: number | string | SExpr;\n borderWidth?: number | string | SExpr;\n mode?: string | SExpr;\n className?: string | SExpr;\n style?: PatternPropValue | string | SExpr;\n children?: unknown | string | SExpr;\n 'aria-hidden'?: boolean | string | SExpr;\n };\n 'auth-layout': {\n type: 'auth-layout';\n appName?: string | SExpr;\n logo?: unknown | string | SExpr;\n backgroundImage?: unknown | string | SExpr;\n showBranding?: boolean | string | SExpr;\n brandingContent?: unknown | string | SExpr;\n };\n 'avatar': {\n type: 'avatar';\n src?: unknown | string | SExpr;\n alt?: string | SExpr;\n name?: string | SExpr;\n initials?: string | SExpr;\n icon?: unknown | string | SExpr;\n size?: string | SExpr;\n status?: string | SExpr;\n badge?: string | number | SExpr;\n className?: string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n action?: string | SExpr;\n actionPayload?: PatternPropValue | string | SExpr;\n };\n 'badge': {\n type: 'badge';\n className?: string | SExpr;\n variant?: string | SExpr;\n size?: string | SExpr;\n amount?: number | string | SExpr;\n label?: string | number | SExpr;\n icon?: unknown | string | SExpr;\n iconAsset?: PatternPropValue | string | SExpr;\n onRemove?: ((...args: unknown[]) => unknown) | string | SExpr;\n removeLabel?: string | SExpr;\n };\n 'behavior-view': {\n type: 'behavior-view';\n data: PatternPropValue | string | SExpr;\n };\n 'biology-canvas': {\n type: 'biology-canvas';\n className?: string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n title?: string | SExpr;\n backgroundColor?: string | SExpr;\n nodes?: unknown[] | string | SExpr;\n edges?: unknown[] | string | SExpr;\n shapes?: unknown[] | string | SExpr;\n interactive?: boolean | string | SExpr;\n animate?: boolean | string | SExpr;\n onShapeClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n };\n 'bloom-quiz-block': {\n type: 'bloom-quiz-block';\n level: string | SExpr;\n question: string | SExpr;\n answer: string | SExpr;\n index?: number | string | SExpr;\n isAnswered?: boolean | string | SExpr;\n answerEvent?: string | SExpr;\n className?: string | SExpr;\n };\n 'book-chapter-view': {\n type: 'book-chapter-view';\n className?: string | SExpr;\n chapter: PatternPropValue | string | SExpr;\n orbitalSchema?: PatternPropValue | string | SExpr;\n direction?: string | SExpr;\n };\n 'book-cover-page': {\n type: 'book-cover-page';\n className?: string | SExpr;\n title: string | SExpr;\n subtitle?: string | SExpr;\n author?: string | SExpr;\n coverImageUrl?: unknown | string | SExpr;\n direction?: string | SExpr;\n };\n 'book-nav-bar': {\n type: 'book-nav-bar';\n className?: string | SExpr;\n currentPage: number | string | SExpr;\n totalPages: number | string | SExpr;\n chapterTitle?: string | SExpr;\n direction?: string | SExpr;\n };\n 'book-table-of-contents': {\n type: 'book-table-of-contents';\n className?: string | SExpr;\n parts: PatternPropValue | unknown[] | string | SExpr;\n currentChapterId?: string | SExpr;\n direction?: string | SExpr;\n };\n 'book-viewer': {\n type: 'book-viewer';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n initialPage?: number | string | SExpr;\n fieldMap?: PatternPropValue | string | SExpr;\n };\n 'box': {\n type: 'box';\n className?: string | SExpr;\n 'data-theme'?: string | SExpr;\n padding?: string | SExpr;\n paddingX?: string | SExpr;\n paddingY?: string | SExpr;\n margin?: string | SExpr;\n marginX?: string | SExpr;\n marginY?: string | SExpr;\n bg?: string | SExpr;\n border?: boolean | string | SExpr;\n rounded?: string | SExpr;\n shadow?: string | SExpr;\n display?: string | SExpr;\n fullWidth?: boolean | string | SExpr;\n fullHeight?: boolean | string | SExpr;\n overflow?: string | SExpr;\n position?: string | SExpr;\n as?: unknown | string | SExpr;\n action?: string | SExpr;\n actionPayload?: PatternPropValue | string | SExpr;\n hoverEvent?: string | SExpr;\n tapReveal?: boolean | string | SExpr;\n maxWidth?: string | SExpr;\n children?: unknown | string | SExpr;\n };\n 'branching-logic-builder': {\n type: 'branching-logic-builder';\n questions: unknown[] | PatternPropValue | string | SExpr;\n rules: unknown[] | PatternPropValue | string | SExpr;\n onRulesChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n rulesChangeEvent?: string | SExpr;\n readOnly?: boolean | string | SExpr;\n className?: string | SExpr;\n };\n 'breadcrumb': {\n type: 'breadcrumb';\n items: unknown[] | string | SExpr;\n separator?: unknown | string | SExpr;\n maxItems?: number | string | SExpr;\n className?: string | SExpr;\n };\n 'button': {\n type: 'button';\n className?: string | SExpr;\n variant?: string | SExpr;\n size?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n leftIcon?: unknown | string | SExpr;\n rightIcon?: unknown | string | SExpr;\n icon?: unknown | string | SExpr;\n iconRight?: unknown | string | SExpr;\n iconAsset?: PatternPropValue | string | SExpr;\n action?: string | SExpr;\n actionPayload?: PatternPropValue | string | SExpr;\n label?: string | SExpr;\n disabled?: boolean | string | SExpr;\n 'data-testid'?: string | SExpr;\n };\n 'calendar-grid': {\n type: 'calendar-grid';\n weekStart?: unknown | string | SExpr;\n timeSlots?: unknown[] | string | SExpr;\n events?: PatternPropValue | unknown[] | string | SExpr;\n onSlotClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onDayClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onEventClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n longPressEvent?: string | SExpr;\n longPressPayload?: PatternPropValue | string | SExpr;\n swipeLeftEvent?: string | SExpr;\n swipeRightEvent?: string | SExpr;\n dayWindow?: number | string | SExpr;\n titleField?: string | SExpr;\n startField?: string | SExpr;\n colorField?: string | SExpr;\n children?: ((...args: unknown[]) => unknown) | string | SExpr;\n renderItem?: ((...args: unknown[]) => unknown) | string | SExpr;\n };\n 'canvas': {\n type: 'canvas';\n mode?: string | SExpr;\n drawables?: unknown[] | string | SExpr;\n camera?: PatternPropValue | string | SExpr;\n projection?: string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n unitScale?: number | string | SExpr;\n showMinimap?: boolean | string | SExpr;\n fit?: boolean | string | SExpr;\n tileWidth?: number | string | SExpr;\n backgroundImage?: unknown | PatternPropValue | string | SExpr;\n backgroundColor?: string | SExpr;\n worldWidth?: number | string | SExpr;\n worldHeight?: number | string | SExpr;\n pixelsPerUnit?: number | string | SExpr;\n showGrid?: boolean | string | SExpr;\n shadows?: boolean | string | SExpr;\n showCoordinates?: boolean | string | SExpr;\n showTileInfo?: boolean | string | SExpr;\n fogOfWar?: unknown[] | string | SExpr;\n tileClickEvent?: string | SExpr;\n unitClickEvent?: string | SExpr;\n tileHoverEvent?: string | SExpr;\n tileLeaveEvent?: string | SExpr;\n featureClickEvent?: string | SExpr;\n keyMap?: PatternPropValue | string | SExpr;\n keyUpMap?: PatternPropValue | string | SExpr;\n };\n 'canvas-2d': {\n type: 'canvas-2d';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n projection?: string | SExpr;\n drawables?: unknown[] | string | SExpr;\n backgroundImage?: unknown | PatternPropValue | string | SExpr;\n tileClickEvent?: string | SExpr;\n unitClickEvent?: string | SExpr;\n tileHoverEvent?: string | SExpr;\n tileLeaveEvent?: string | SExpr;\n keyMap?: PatternPropValue | string | SExpr;\n keyUpMap?: PatternPropValue | string | SExpr;\n camera?: string | SExpr;\n scale?: number | string | SExpr;\n tileWidth?: number | string | SExpr;\n fit?: boolean | string | SExpr;\n showMinimap?: boolean | string | SExpr;\n followTarget?: PatternPropValue | string | SExpr;\n cameraPos?: PatternPropValue | string | SExpr;\n bgColor?: string | SExpr;\n };\n 'card': {\n type: 'card';\n className?: string | SExpr;\n variant?: string | SExpr;\n padding?: string | SExpr;\n title?: string | SExpr;\n subtitle?: string | SExpr;\n shadow?: string | SExpr;\n look?: string | SExpr;\n children?: unknown | string | SExpr;\n action?: string | SExpr;\n loading?: boolean | string | SExpr;\n };\n 'carousel': {\n type: 'carousel';\n items: unknown[] | string | SExpr;\n renderItem?: ((...args: unknown[]) => unknown) | string | SExpr;\n children?: ((...args: unknown[]) => unknown) | string | SExpr;\n autoPlay?: boolean | string | SExpr;\n autoPlayInterval?: number | string | SExpr;\n showDots?: boolean | string | SExpr;\n showArrows?: boolean | string | SExpr;\n loop?: boolean | string | SExpr;\n slideChangeEvent?: string | SExpr;\n slideChangePayload?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'case-study-card': {\n type: 'case-study-card';\n title: string | SExpr;\n description: string | SExpr;\n category: string | SExpr;\n categoryColor?: string | SExpr;\n href: string | SExpr;\n linkLabel?: string | SExpr;\n className?: string | SExpr;\n };\n 'case-study-organism': {\n type: 'case-study-organism';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n heading?: string | SExpr;\n subtitle?: string | SExpr;\n };\n 'center': {\n type: 'center';\n inline?: boolean | string | SExpr;\n horizontal?: boolean | string | SExpr;\n vertical?: boolean | string | SExpr;\n minHeight?: string | number | SExpr;\n fullHeight?: boolean | string | SExpr;\n fullWidth?: boolean | string | SExpr;\n className?: string | SExpr;\n style?: PatternPropValue | string | SExpr;\n children: unknown | string | SExpr;\n as?: unknown | string | SExpr;\n };\n 'chart': {\n type: 'chart';\n title?: string | SExpr;\n subtitle?: string | SExpr;\n chartType?: string | SExpr;\n look?: string | SExpr;\n series?: unknown[] | string | SExpr;\n data?: unknown[] | string | SExpr;\n scatterData?: unknown[] | string | SExpr;\n height?: number | string | SExpr;\n showLegend?: boolean | string | SExpr;\n showValues?: boolean | string | SExpr;\n stack?: string | SExpr;\n timeAxis?: boolean | string | SExpr;\n drillEvent?: string | SExpr;\n actions?: unknown[] | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'chart-legend': {\n type: 'chart-legend';\n items: unknown[] | string | SExpr;\n className?: string | SExpr;\n direction?: string | SExpr;\n };\n 'chat-bar': {\n type: 'chat-bar';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n status?: string | SExpr;\n activeGate?: string | SExpr;\n jepaValidity?: number | string | SExpr;\n placeholder?: string | SExpr;\n context?: string | SExpr;\n };\n 'checkbox': {\n type: 'checkbox';\n className?: string | SExpr;\n checked?: boolean | string | SExpr;\n defaultChecked?: boolean | string | SExpr;\n label?: string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n };\n 'chemistry-canvas': {\n type: 'chemistry-canvas';\n className?: string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n title?: string | SExpr;\n backgroundColor?: string | SExpr;\n atoms?: unknown[] | string | SExpr;\n bonds?: unknown[] | string | SExpr;\n arrows?: unknown[] | string | SExpr;\n shapes?: unknown[] | string | SExpr;\n interactive?: boolean | string | SExpr;\n animate?: boolean | string | SExpr;\n onShapeClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n };\n 'choice-button': {\n type: 'choice-button';\n text: string | SExpr;\n index?: number | string | SExpr;\n assetUrl?: PatternPropValue | string | SExpr;\n icon?: unknown | string | SExpr;\n disabled?: boolean | string | SExpr;\n selected?: boolean | string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n action?: string | SExpr;\n payload?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'code-block': {\n type: 'code-block';\n code?: string | SExpr;\n language?: string | SExpr;\n showCopyButton?: boolean | string | SExpr;\n showLanguageBadge?: boolean | string | SExpr;\n maxHeight?: string | number | SExpr;\n foldable?: boolean | string | SExpr;\n className?: string | SExpr;\n editable?: boolean | string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n errorLines?: PatternPropValue | string | SExpr;\n title?: string | SExpr;\n mode?: string | SExpr;\n diff?: unknown[] | string | SExpr;\n oldValue?: string | SExpr;\n newValue?: string | SExpr;\n showLineNumbers?: boolean | string | SExpr;\n wordWrap?: boolean | string | SExpr;\n files?: unknown[] | string | SExpr;\n actions?: unknown[] | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n showCopy?: boolean | string | SExpr;\n };\n 'code-runner-panel': {\n type: 'code-runner-panel';\n code: string | SExpr;\n language: string | SExpr;\n runnable?: boolean | string | SExpr;\n onRun?: ((...args: unknown[]) => unknown) | string | SExpr;\n runEvent?: string | SExpr;\n className?: string | SExpr;\n };\n 'community-links': {\n type: 'community-links';\n github?: PatternPropValue | string | SExpr;\n discord?: PatternPropValue | string | SExpr;\n twitter?: PatternPropValue | string | SExpr;\n heading?: string | SExpr;\n subtitle?: string | SExpr;\n className?: string | SExpr;\n };\n 'conditional-wrapper': {\n type: 'conditional-wrapper';\n condition?: unknown | string | SExpr;\n context: PatternPropValue | string | SExpr;\n children: unknown | string | SExpr;\n fallback?: unknown | string | SExpr;\n animate?: boolean | string | SExpr;\n };\n 'confetti-effect': {\n type: 'confetti-effect';\n trigger: boolean | string | SExpr;\n duration?: number | string | SExpr;\n particleCount?: number | string | SExpr;\n className?: string | SExpr;\n };\n 'confirm-dialog': {\n type: 'confirm-dialog';\n isOpen?: boolean | string | SExpr;\n onClose?: ((...args: unknown[]) => unknown) | string | SExpr;\n onConfirm?: ((...args: unknown[]) => unknown) | string | SExpr;\n title: string | SExpr;\n message?: string | unknown | SExpr;\n description?: string | unknown | SExpr;\n confirmText?: string | SExpr;\n confirmLabel?: string | SExpr;\n cancelText?: string | SExpr;\n cancelLabel?: string | SExpr;\n variant?: string | SExpr;\n size?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'connection-block': {\n type: 'connection-block';\n content: string | SExpr;\n className?: string | SExpr;\n };\n 'container': {\n type: 'container';\n size?: string | SExpr;\n maxWidth?: string | SExpr;\n padding?: string | SExpr;\n center?: boolean | string | SExpr;\n className?: string | SExpr;\n children?: unknown | string | SExpr;\n as?: unknown | string | SExpr;\n };\n 'content-renderer': {\n type: 'content-renderer';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n content?: string | SExpr;\n segments?: unknown[] | string | SExpr;\n direction?: string | SExpr;\n };\n 'content-section': {\n type: 'content-section';\n children: unknown | string | SExpr;\n background?: string | SExpr;\n padding?: string | SExpr;\n id?: string | SExpr;\n className?: string | SExpr;\n };\n 'control-button': {\n type: 'control-button';\n assetUrl?: PatternPropValue | string | SExpr;\n label?: string | SExpr;\n icon?: unknown | string | SExpr;\n size?: string | SExpr;\n shape?: string | SExpr;\n variant?: string | SExpr;\n onPress?: ((...args: unknown[]) => unknown) | string | SExpr;\n onRelease?: ((...args: unknown[]) => unknown) | string | SExpr;\n pressEvent?: string | SExpr;\n releaseEvent?: string | SExpr;\n pressed?: boolean | string | SExpr;\n disabled?: boolean | string | SExpr;\n className?: string | SExpr;\n };\n 'control-grid': {\n type: 'control-grid';\n kind: string | SExpr;\n buttons?: unknown[] | string | SExpr;\n layout?: string | SExpr;\n includeDiagonals?: boolean | string | SExpr;\n onAction?: ((...args: unknown[]) => unknown) | string | SExpr;\n actionEvent?: string | SExpr;\n onDirection?: ((...args: unknown[]) => unknown) | string | SExpr;\n directionEvent?: string | SExpr;\n directionEvents?: PatternPropValue | string | SExpr;\n directionReleaseEvents?: PatternPropValue | string | SExpr;\n directionAssets?: PatternPropValue | string | SExpr;\n size?: string | SExpr;\n disabled?: boolean | string | SExpr;\n className?: string | SExpr;\n };\n 'counter-template': {\n type: 'counter-template';\n entity: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n onIncrement?: ((...args: unknown[]) => unknown) | string | SExpr;\n onDecrement?: ((...args: unknown[]) => unknown) | string | SExpr;\n onReset?: ((...args: unknown[]) => unknown) | string | SExpr;\n incrementEvent?: string | SExpr;\n decrementEvent?: string | SExpr;\n resetEvent?: string | SExpr;\n title?: string | SExpr;\n showReset?: boolean | string | SExpr;\n size?: string | SExpr;\n variant?: string | SExpr;\n };\n 'cta-banner': {\n type: 'cta-banner';\n title: string | SExpr;\n subtitle?: string | SExpr;\n primaryAction?: PatternPropValue | string | SExpr;\n secondaryAction?: PatternPropValue | string | SExpr;\n background?: string | SExpr;\n align?: string | SExpr;\n className?: string | SExpr;\n };\n 'dashboard-grid': {\n type: 'dashboard-grid';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n columns?: number | string | SExpr;\n gap?: string | SExpr;\n cells: unknown[] | string | SExpr;\n };\n 'dashboard-layout': {\n type: 'dashboard-layout';\n appName?: string | SExpr;\n logo?: unknown | string | SExpr;\n navItems?: unknown[] | string | SExpr;\n user?: PatternPropValue | string | SExpr;\n headerActions?: unknown | string | SExpr;\n showSearch?: boolean | string | SExpr;\n searchEvent?: string | SExpr;\n onSearchSubmit?: ((...args: unknown[]) => unknown) | string | SExpr;\n topBarActions?: unknown[] | string | SExpr;\n notifications?: unknown[] | string | SExpr;\n notificationClickEvent?: string | SExpr;\n onNotificationClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n showThemeToggle?: boolean | string | SExpr;\n sidebarFooter?: unknown | string | SExpr;\n currentPath?: string | SExpr;\n onSignOut?: ((...args: unknown[]) => unknown) | string | SExpr;\n layoutMode?: string | SExpr;\n children?: unknown | string | SExpr;\n };\n 'data-grid': {\n type: 'data-grid';\n dragGroup?: string | SExpr;\n accepts?: string | SExpr;\n sortable?: boolean | string | SExpr;\n dropEvent?: string | SExpr;\n reorderEvent?: string | SExpr;\n positionEvent?: string | SExpr;\n dndItemIdField?: string | SExpr;\n dndRoot?: boolean | string | SExpr;\n entity: PatternPropValue | unknown[] | string | SExpr;\n fields?: unknown[] | string | SExpr;\n columns?: unknown[] | string | SExpr;\n itemActions?: unknown[] | string | SExpr;\n maxInlineActions?: number | string | SExpr;\n scrollX?: boolean | string | SExpr;\n cols?: number | string | SExpr;\n gap?: string | SExpr;\n minCardWidth?: number | string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n imageField?: string | SExpr;\n selectable?: boolean | string | SExpr;\n selectionEvent?: string | SExpr;\n infiniteScroll?: boolean | string | SExpr;\n loadMoreEvent?: string | SExpr;\n hasMore?: boolean | string | SExpr;\n children?: ((...args: unknown[]) => unknown) | string | SExpr;\n renderItem?: ((...args: unknown[]) => unknown) | string | SExpr;\n pageSize?: number | string | SExpr;\n look?: string | SExpr;\n };\n 'data-list': {\n type: 'data-list';\n dragGroup?: string | SExpr;\n accepts?: string | SExpr;\n sortable?: boolean | string | SExpr;\n dropEvent?: string | SExpr;\n reorderEvent?: string | SExpr;\n positionEvent?: string | SExpr;\n dndItemIdField?: string | SExpr;\n dndRoot?: boolean | string | SExpr;\n entity: PatternPropValue | unknown[] | string | SExpr;\n fields?: unknown[] | string | SExpr;\n columns?: unknown[] | string | SExpr;\n itemActions?: unknown[] | string | SExpr;\n maxInlineActions?: number | string | SExpr;\n itemClickEvent?: string | SExpr;\n gap?: string | SExpr;\n variant?: string | SExpr;\n groupBy?: string | SExpr;\n senderField?: string | SExpr;\n senderLabelField?: string | SExpr;\n currentUser?: string | SExpr;\n emptyMessage?: string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n reorderable?: boolean | string | SExpr;\n swipeLeftEvent?: string | SExpr;\n swipeLeftActions?: unknown[] | string | SExpr;\n swipeRightEvent?: string | SExpr;\n swipeRightActions?: unknown[] | string | SExpr;\n longPressEvent?: string | SExpr;\n infiniteScroll?: boolean | string | SExpr;\n loadMoreEvent?: string | SExpr;\n hasMore?: boolean | string | SExpr;\n children?: ((...args: unknown[]) => unknown) | string | SExpr;\n renderItem?: ((...args: unknown[]) => unknown) | string | SExpr;\n pageSize?: number | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n look?: string | SExpr;\n };\n 'date-range-picker': {\n type: 'date-range-picker';\n from?: string | SExpr;\n to?: string | SExpr;\n event?: string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n presets?: unknown[] | string | SExpr;\n fromLabel?: string | SExpr;\n toLabel?: string | SExpr;\n className?: string | SExpr;\n };\n 'date-range-selector': {\n type: 'date-range-selector';\n options?: unknown[] | string | SExpr;\n selected?: string | SExpr;\n onSelect?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n };\n 'day-cell': {\n type: 'day-cell';\n date?: unknown | string | SExpr;\n isToday?: boolean | string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n };\n 'detail-panel': {\n type: 'detail-panel';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | string | SExpr;\n title?: string | SExpr;\n subtitle?: string | SExpr;\n status?: PatternPropValue | string | SExpr;\n avatar?: unknown | string | SExpr;\n sections?: unknown[] | string | SExpr;\n actions?: unknown[] | string | SExpr;\n footer?: unknown | string | SExpr;\n slideOver?: boolean | string | SExpr;\n fields: unknown[] | string | SExpr;\n fieldNames?: unknown[] | string | SExpr;\n initialData?: PatternPropValue | string | SExpr;\n mode?: string | SExpr;\n position?: string | SExpr;\n width?: string | SExpr;\n displayFields?: unknown[] | string | SExpr;\n showActions?: boolean | string | SExpr;\n };\n 'dialog': {\n type: 'dialog';\n className?: string | SExpr;\n children?: unknown | string | SExpr;\n };\n 'dialogue-bubble': {\n type: 'dialogue-bubble';\n speaker?: string | SExpr;\n text: string | SExpr;\n portrait?: PatternPropValue | string | SExpr;\n position?: string | SExpr;\n mood?: string | SExpr;\n revealedChars?: number | string | SExpr;\n className?: string | SExpr;\n };\n 'divider': {\n type: 'divider';\n orientation?: string | SExpr;\n label?: string | SExpr;\n variant?: string | SExpr;\n className?: string | SExpr;\n };\n 'doc-breadcrumb': {\n type: 'doc-breadcrumb';\n items: unknown[] | string | SExpr;\n className?: string | SExpr;\n };\n 'doc-pagination': {\n type: 'doc-pagination';\n prev?: PatternPropValue | string | SExpr;\n next?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'doc-search': {\n type: 'doc-search';\n placeholder?: string | SExpr;\n onSearch?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n };\n 'doc-sidebar': {\n type: 'doc-sidebar';\n items: unknown[] | string | SExpr;\n className?: string | SExpr;\n };\n 'doc-toc': {\n type: 'doc-toc';\n items: unknown[] | string | SExpr;\n activeId?: string | SExpr;\n className?: string | SExpr;\n };\n 'document-viewer': {\n type: 'document-viewer';\n title?: string | SExpr;\n src?: unknown | string | SExpr;\n content?: string | SExpr;\n documentType?: string | SExpr;\n currentPage?: number | string | SExpr;\n totalPages?: number | string | SExpr;\n height?: number | string | SExpr;\n showToolbar?: boolean | string | SExpr;\n showDownload?: boolean | string | SExpr;\n showPrint?: boolean | string | SExpr;\n actions?: unknown[] | string | SExpr;\n documents?: unknown[] | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'draw-group': {\n type: 'draw-group';\n id?: string | SExpr;\n position: PatternPropValue | string | SExpr;\n scale?: number | string | SExpr;\n rotate?: number | string | SExpr;\n opacity?: number | string | SExpr;\n items: unknown[] | string | SExpr;\n };\n 'draw-shape': {\n type: 'draw-shape';\n id?: string | SExpr;\n shape: string | SExpr;\n position: PatternPropValue | string | SExpr;\n anchor?: PatternPropValue | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n radiusX?: number | string | SExpr;\n radiusY?: number | string | SExpr;\n offsetX?: number | string | SExpr;\n offsetY?: number | string | SExpr;\n points?: unknown[] | string | SExpr;\n d?: string | SExpr;\n fill?: string | SExpr;\n stroke?: string | SExpr;\n strokeWidth?: number | string | SExpr;\n opacity?: number | string | SExpr;\n };\n 'draw-shape-layer': {\n type: 'draw-shape-layer';\n id?: string | SExpr;\n items: unknown[] | string | SExpr;\n };\n 'draw-sprite': {\n type: 'draw-sprite';\n id?: string | SExpr;\n position: PatternPropValue | string | SExpr;\n asset: PatternPropValue | string | SExpr;\n anchor?: PatternPropValue | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n frame?: PatternPropValue | string | SExpr;\n animation?: string | SExpr;\n flipX?: boolean | string | SExpr;\n rotation?: number | string | SExpr;\n opacity?: number | string | SExpr;\n shadow?: PatternPropValue | string | SExpr;\n };\n 'draw-sprite-layer': {\n type: 'draw-sprite-layer';\n id?: string | SExpr;\n items: unknown[] | string | SExpr;\n };\n 'draw-text': {\n type: 'draw-text';\n id?: string | SExpr;\n text: string | SExpr;\n position: PatternPropValue | string | SExpr;\n anchor?: PatternPropValue | string | SExpr;\n offsetX?: number | string | SExpr;\n offsetY?: number | string | SExpr;\n color: string | SExpr;\n font?: string | SExpr;\n align?: PatternPropValue | string | SExpr;\n baseline?: PatternPropValue | string | SExpr;\n opacity?: number | string | SExpr;\n };\n 'draw-text-layer': {\n type: 'draw-text-layer';\n id?: string | SExpr;\n items: unknown[] | string | SExpr;\n };\n 'drawer': {\n type: 'drawer';\n isOpen?: boolean | string | SExpr;\n onClose?: ((...args: unknown[]) => unknown) | string | SExpr;\n title?: unknown | string | SExpr;\n children?: unknown | string | SExpr;\n footer?: unknown | string | SExpr;\n position?: string | SExpr;\n width?: string | SExpr;\n showCloseButton?: boolean | string | SExpr;\n closeOnOverlayClick?: boolean | string | SExpr;\n closeOnEscape?: boolean | string | SExpr;\n className?: string | SExpr;\n closeEvent?: string | SExpr;\n };\n 'drawer-slot': {\n type: 'drawer-slot';\n children?: unknown | string | SExpr;\n title?: string | SExpr;\n position?: string | SExpr;\n size?: string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n entity?: string | SExpr;\n sourceTrait?: string | SExpr;\n };\n 'edge-decoration': {\n type: 'edge-decoration';\n variant?: string | SExpr;\n side?: string | SExpr;\n opacity?: number | string | SExpr;\n color?: string | SExpr;\n strokeWidth?: number | string | SExpr;\n width?: number | string | SExpr;\n className?: string | SExpr;\n };\n 'emoji-picker': {\n type: 'emoji-picker';\n pickEvent?: string | SExpr;\n position?: string | SExpr;\n triggerIcon?: unknown | string | SExpr;\n triggerLabel?: string | SExpr;\n className?: string | SExpr;\n };\n 'empty-state': {\n type: 'empty-state';\n icon?: unknown | string | SExpr;\n title?: string | SExpr;\n message?: string | SExpr;\n description?: string | SExpr;\n actionLabel?: string | SExpr;\n onAction?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n destructive?: boolean | string | SExpr;\n variant?: string | SExpr;\n actionEvent?: string | SExpr;\n look?: string | SExpr;\n };\n 'entity-cards': {\n type: 'entity-cards';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n minCardWidth?: number | string | SExpr;\n maxCols?: number | string | SExpr;\n gap?: string | SExpr;\n alignItems?: string | SExpr;\n children?: unknown | string | SExpr;\n fields: unknown[] | string | SExpr;\n fieldNames?: unknown[] | string | SExpr;\n columns?: unknown[] | string | SExpr;\n itemActions?: unknown[] | string | SExpr;\n showTotal?: boolean | string | SExpr;\n showAvatar?: boolean | string | SExpr;\n variant?: string | SExpr;\n imageField?: string | SExpr;\n };\n 'entity-list': {\n type: 'entity-list';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n entityType?: string | SExpr;\n selectable?: boolean | string | SExpr;\n itemActions?: ((...args: unknown[]) => unknown) | unknown[] | string | SExpr;\n showDividers?: boolean | string | SExpr;\n variant?: string | SExpr;\n emptyMessage?: string | SExpr;\n renderItem?: ((...args: unknown[]) => unknown) | string | SExpr;\n children?: unknown | string | SExpr;\n fields: unknown[] | string | SExpr;\n fieldNames?: unknown[] | string | SExpr;\n };\n 'entity-table': {\n type: 'entity-table';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n fields: unknown[] | string | SExpr;\n columns?: unknown[] | string | SExpr;\n itemActions?: unknown[] | string | SExpr;\n emptyIcon?: unknown | string | SExpr;\n emptyTitle?: string | SExpr;\n emptyDescription?: string | SExpr;\n emptyAction?: PatternPropValue | string | SExpr;\n selectable?: boolean | string | SExpr;\n searchable?: boolean | string | SExpr;\n searchPlaceholder?: string | SExpr;\n rowActions?: unknown[] | string | SExpr;\n bulkActions?: unknown[] | string | SExpr;\n headerActions?: unknown | string | SExpr;\n showTotal?: boolean | string | SExpr;\n look?: string | SExpr;\n };\n 'error-boundary': {\n type: 'error-boundary';\n children: unknown | string | SExpr;\n fallback?: unknown | ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n onError?: ((...args: unknown[]) => unknown) | string | SExpr;\n };\n 'error-state': {\n type: 'error-state';\n title?: string | SExpr;\n message?: string | SExpr;\n description?: string | SExpr;\n onRetry?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n retryEvent?: string | SExpr;\n };\n 'feature-card': {\n type: 'feature-card';\n icon?: unknown | string | SExpr;\n title: string | SExpr;\n description: string | SExpr;\n href?: string | SExpr;\n linkLabel?: string | SExpr;\n variant?: string | SExpr;\n size?: string | SExpr;\n className?: string | SExpr;\n };\n 'feature-detail-page-template': {\n type: 'feature-detail-page-template';\n entity: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'feature-grid': {\n type: 'feature-grid';\n items: unknown[] | string | SExpr;\n columns?: number | string | SExpr;\n gap?: string | SExpr;\n className?: string | SExpr;\n };\n 'feature-grid-organism': {\n type: 'feature-grid-organism';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n columns?: number | string | SExpr;\n heading?: string | SExpr;\n subtitle?: string | SExpr;\n };\n 'file-tree': {\n type: 'file-tree';\n tree: unknown[] | string | SExpr;\n selectedPath?: string | SExpr;\n onFileSelect?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n indent?: number | string | SExpr;\n };\n 'filter-group': {\n type: 'filter-group';\n entity: string | SExpr;\n filters: unknown[] | string | SExpr;\n onFilterChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n onClearAll?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n variant?: string | SExpr;\n showIcon?: boolean | string | SExpr;\n query?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n look?: string | SExpr;\n event?: string | SExpr;\n clearEvent?: string | SExpr;\n };\n 'filter-pill': {\n type: 'filter-pill';\n className?: string | SExpr;\n variant?: string | SExpr;\n size?: string | SExpr;\n label?: string | number | SExpr;\n icon?: unknown | string | SExpr;\n onRemove?: ((...args: unknown[]) => unknown) | string | SExpr;\n removable?: boolean | string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n clickEvent?: string | SExpr;\n removeEvent?: string | SExpr;\n };\n 'flex': {\n type: 'flex';\n direction?: string | SExpr;\n wrap?: string | SExpr;\n align?: string | SExpr;\n justify?: string | SExpr;\n gap?: string | SExpr;\n inline?: boolean | string | SExpr;\n grow?: boolean | number | string | SExpr;\n shrink?: boolean | number | string | SExpr;\n basis?: string | number | SExpr;\n className?: string | SExpr;\n children: unknown | string | SExpr;\n as?: unknown | string | SExpr;\n };\n 'flip-card': {\n type: 'flip-card';\n front: unknown | string | SExpr;\n back: unknown | string | SExpr;\n flipped?: boolean | string | SExpr;\n onFlip?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n height?: string | SExpr;\n };\n 'flip-container': {\n type: 'flip-container';\n flipped: boolean | string | SExpr;\n className?: string | SExpr;\n children: unknown | string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n };\n 'floating-action-button': {\n type: 'floating-action-button';\n action?: string | SExpr;\n actionPayload?: PatternPropValue | string | SExpr;\n actions?: unknown[] | string | SExpr;\n icon?: unknown | string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n variant?: string | SExpr;\n label?: string | SExpr;\n position?: string | SExpr;\n className?: string | SExpr;\n };\n 'form': {\n type: 'form';\n children?: unknown | string | SExpr;\n onSubmit?: string | SExpr;\n onCancel?: string | SExpr;\n layout?: string | SExpr;\n gap?: string | SExpr;\n className?: string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n mode?: string | SExpr;\n fields: unknown[] | string | SExpr;\n initialData?: PatternPropValue | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n submitLabel?: string | SExpr;\n cancelLabel?: string | SExpr;\n showCancel?: boolean | string | SExpr;\n showSubmit?: boolean | string | SExpr;\n title?: string | SExpr;\n submitEvent?: string | SExpr;\n cancelEvent?: string | SExpr;\n relationsData?: PatternPropValue | string | SExpr;\n relationsLoading?: PatternPropValue | string | SExpr;\n conditionalFields?: PatternPropValue | boolean | string | SExpr;\n hiddenCalculations?: unknown[] | boolean | string | SExpr;\n violationTriggers?: unknown[] | boolean | string | SExpr;\n evaluationContext?: PatternPropValue | string | SExpr;\n sections?: unknown[] | string | SExpr;\n onFieldChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n configPath?: string | SExpr;\n repeatable?: boolean | string | SExpr;\n };\n 'form-actions': {\n type: 'form-actions';\n children?: unknown | string | SExpr;\n primary?: PatternPropValue | string | SExpr;\n secondary?: unknown[] | string | SExpr;\n variant?: string | SExpr;\n orientation?: string | SExpr;\n className?: string | SExpr;\n entity?: string | SExpr;\n filters?: unknown[] | string | SExpr;\n look?: string | SExpr;\n };\n 'form-field': {\n type: 'form-field';\n label: string | SExpr;\n required?: boolean | string | SExpr;\n error?: string | SExpr;\n hint?: string | SExpr;\n className?: string | SExpr;\n children: unknown | string | SExpr;\n };\n 'form-layout': {\n type: 'form-layout';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n children: unknown | string | SExpr;\n dividers?: boolean | string | SExpr;\n };\n 'form-section': {\n type: 'form-section';\n children?: unknown | string | SExpr;\n onSubmit?: string | SExpr;\n onCancel?: string | SExpr;\n layout?: string | SExpr;\n gap?: string | SExpr;\n className?: string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n mode?: string | SExpr;\n fields: unknown[] | string | SExpr;\n initialData?: PatternPropValue | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n submitLabel?: string | SExpr;\n cancelLabel?: string | SExpr;\n showCancel?: boolean | string | SExpr;\n showSubmit?: boolean | string | SExpr;\n title?: string | SExpr;\n submitEvent?: string | SExpr;\n cancelEvent?: string | SExpr;\n relationsData?: PatternPropValue | string | SExpr;\n relationsLoading?: PatternPropValue | string | SExpr;\n conditionalFields?: PatternPropValue | boolean | string | SExpr;\n hiddenCalculations?: unknown[] | boolean | string | SExpr;\n violationTriggers?: unknown[] | boolean | string | SExpr;\n evaluationContext?: PatternPropValue | string | SExpr;\n sections?: unknown[] | string | SExpr;\n onFieldChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n configPath?: string | SExpr;\n repeatable?: boolean | string | SExpr;\n };\n 'form-section-header': {\n type: 'form-section-header';\n title: string | SExpr;\n subtitle?: string | SExpr;\n isCollapsed?: boolean | string | SExpr;\n onToggle?: ((...args: unknown[]) => unknown) | string | SExpr;\n badge?: string | SExpr;\n badgeVariant?: string | SExpr;\n icon?: unknown | string | SExpr;\n hasErrors?: boolean | string | SExpr;\n isComplete?: boolean | string | SExpr;\n className?: string | SExpr;\n };\n 'game-audio-toggle': {\n type: 'game-audio-toggle';\n size?: string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n onAsset?: PatternPropValue | string | SExpr;\n offAsset?: PatternPropValue | string | SExpr;\n };\n 'game-hud': {\n type: 'game-hud';\n position?: string | SExpr;\n stats?: unknown[] | string | SExpr;\n items?: unknown[] | string | SExpr;\n elements?: unknown[] | string | SExpr;\n size?: string | SExpr;\n className?: string | SExpr;\n transparent?: boolean | string | SExpr;\n };\n 'game-icon': {\n type: 'game-icon';\n assetUrl?: PatternPropValue | string | SExpr;\n icon: unknown | string | SExpr;\n size?: number | string | SExpr;\n alt?: string | SExpr;\n className?: string | SExpr;\n };\n 'game-menu': {\n type: 'game-menu';\n title: string | SExpr;\n subtitle?: string | SExpr;\n options?: unknown[] | string | SExpr;\n menuItems?: unknown[] | string | SExpr;\n onSelect?: ((...args: unknown[]) => unknown) | string | SExpr;\n background?: string | SExpr;\n logo?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'game-shell': {\n type: 'game-shell';\n appName?: string | SExpr;\n hud?: unknown | string | SExpr;\n addons?: unknown | string | SExpr;\n controls?: unknown | string | SExpr;\n overlay?: unknown | string | SExpr;\n className?: string | SExpr;\n showTopBar?: boolean | string | SExpr;\n children?: unknown | string | SExpr;\n backgroundAsset?: PatternPropValue | string | SExpr;\n hudBackgroundAsset?: PatternPropValue | string | SExpr;\n fontFamily?: string | SExpr;\n 'data-theme'?: string | SExpr;\n };\n 'generic-app-template': {\n type: 'generic-app-template';\n entity: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n title: string | SExpr;\n subtitle?: string | SExpr;\n children: unknown | string | SExpr;\n headerActions?: unknown | string | SExpr;\n footer?: unknown | string | SExpr;\n };\n 'geometric-pattern': {\n type: 'geometric-pattern';\n variant?: string | SExpr;\n mode?: string | SExpr;\n opacity?: number | string | SExpr;\n color?: string | SExpr;\n scale?: number | string | SExpr;\n strokeWidth?: number | string | SExpr;\n children?: unknown | string | SExpr;\n className?: string | SExpr;\n };\n 'gradient-divider': {\n type: 'gradient-divider';\n color?: string | SExpr;\n className?: string | SExpr;\n };\n 'graph-canvas': {\n type: 'graph-canvas';\n title?: string | SExpr;\n nodes?: unknown[] | string | SExpr;\n edges?: unknown[] | string | SExpr;\n proposedEdges?: unknown[] | string | SExpr;\n similarity?: unknown[] | string | SExpr;\n height?: number | string | SExpr;\n showLabels?: boolean | string | SExpr;\n interactive?: boolean | string | SExpr;\n draggable?: boolean | string | SExpr;\n actions?: unknown[] | string | SExpr;\n onNodeClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onMarkClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onNodeDoubleClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onBadgeClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n nodeClickEvent?: string | SExpr;\n selectedNodeId?: string | SExpr;\n repulsion?: number | string | SExpr;\n linkDistance?: number | string | SExpr;\n nodeSpacing?: number | string | SExpr;\n linkOpacity?: number | string | SExpr;\n layout?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'graph-view': {\n type: 'graph-view';\n nodes: unknown[] | string | SExpr;\n edges: unknown[] | string | SExpr;\n onNodeClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onNodeHover?: ((...args: unknown[]) => unknown) | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n className?: string | SExpr;\n showLabels?: boolean | string | SExpr;\n zoomToFit?: boolean | string | SExpr;\n };\n 'grid': {\n type: 'grid';\n cols?: number | string | PatternPropValue | SExpr;\n rows?: number | string | SExpr;\n gap?: string | SExpr;\n rowGap?: string | SExpr;\n colGap?: string | SExpr;\n alignItems?: string | SExpr;\n justifyItems?: string | SExpr;\n flow?: string | SExpr;\n className?: string | SExpr;\n style?: PatternPropValue | string | SExpr;\n children: unknown | string | SExpr;\n as?: unknown | string | SExpr;\n };\n 'header': {\n type: 'header';\n logo?: unknown | string | SExpr;\n logoSrc?: unknown | string | SExpr;\n brandName?: string | SExpr;\n navigationItems?: unknown[] | string | SExpr;\n showMenuToggle?: boolean | string | SExpr;\n isMenuOpen?: boolean | string | SExpr;\n onMenuToggle?: ((...args: unknown[]) => unknown) | string | SExpr;\n showSearch?: boolean | string | SExpr;\n searchPlaceholder?: string | SExpr;\n onSearch?: ((...args: unknown[]) => unknown) | string | SExpr;\n userAvatar?: PatternPropValue | string | SExpr;\n userName?: string | SExpr;\n onUserClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n actions?: unknown | string | SExpr;\n sticky?: boolean | string | SExpr;\n variant?: string | SExpr;\n look?: string | SExpr;\n onLogoClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n };\n 'health-bar': {\n type: 'health-bar';\n current: number | string | SExpr;\n max: number | string | SExpr;\n format?: string | SExpr;\n level?: number | string | SExpr;\n showLabel?: boolean | string | SExpr;\n labelSuffix?: string | SExpr;\n size?: string | SExpr;\n className?: string | SExpr;\n animated?: boolean | string | SExpr;\n frameAsset?: PatternPropValue | string | SExpr;\n fillAsset?: PatternPropValue | string | SExpr;\n };\n 'hero-organism': {\n type: 'hero-organism';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | string | SExpr;\n children?: unknown | string | SExpr;\n };\n 'hero-section': {\n type: 'hero-section';\n tag?: string | SExpr;\n tagVariant?: string | SExpr;\n title: string | SExpr;\n titleAccent?: string | SExpr;\n subtitle: string | SExpr;\n primaryAction?: PatternPropValue | string | SExpr;\n secondaryAction?: PatternPropValue | string | SExpr;\n installCommand?: string | SExpr;\n image?: PatternPropValue | string | SExpr;\n imagePosition?: string | SExpr;\n background?: string | SExpr;\n align?: string | SExpr;\n backgroundElement?: unknown | string | SExpr;\n children?: unknown | string | SExpr;\n className?: string | SExpr;\n };\n 'hstack': {\n type: 'hstack';\n gap?: string | SExpr;\n align?: string | SExpr;\n justify?: string | SExpr;\n wrap?: boolean | string | SExpr;\n reverse?: boolean | string | SExpr;\n flex?: boolean | string | SExpr;\n className?: string | SExpr;\n style?: PatternPropValue | string | SExpr;\n children?: unknown | string | SExpr;\n as?: unknown | string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onKeyDown?: ((...args: unknown[]) => unknown) | string | SExpr;\n role?: string | SExpr;\n tabIndex?: number | string | SExpr;\n action?: string | SExpr;\n actionPayload?: PatternPropValue | string | SExpr;\n responsive?: boolean | string | SExpr;\n };\n 'icon': {\n type: 'icon';\n icon?: unknown | string | SExpr;\n name?: string | SExpr;\n size?: string | SExpr;\n color?: string | SExpr;\n animation?: string | SExpr;\n className?: string | SExpr;\n strokeWidth?: number | string | SExpr;\n style?: PatternPropValue | string | SExpr;\n };\n 'import-preview-tree': {\n type: 'import-preview-tree';\n units: unknown[] | string | SExpr;\n skipped?: unknown[] | string | SExpr;\n entityDisplay: PatternPropValue | string | SExpr;\n onConfirm?: ((...args: unknown[]) => unknown) | string | SExpr;\n onCancel?: ((...args: unknown[]) => unknown) | string | SExpr;\n confirmLabel?: string | SExpr;\n cancelLabel?: string | SExpr;\n indent?: number | string | SExpr;\n className?: string | SExpr;\n };\n 'import-progress': {\n type: 'import-progress';\n step: string | SExpr;\n counts?: PatternPropValue | string | SExpr;\n labels?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'import-source-picker': {\n type: 'import-source-picker';\n sources: unknown[] | string | SExpr;\n onSelect?: ((...args: unknown[]) => unknown) | string | SExpr;\n onFilesSelected?: ((...args: unknown[]) => unknown) | string | SExpr;\n title?: string | SExpr;\n moreSources?: unknown | string | SExpr;\n className?: string | SExpr;\n };\n 'infinite-scroll-sentinel': {\n type: 'infinite-scroll-sentinel';\n loadMoreEvent: string | SExpr;\n loadMorePayload?: PatternPropValue | string | SExpr;\n isLoading?: boolean | string | SExpr;\n hasMore?: boolean | string | SExpr;\n threshold?: string | SExpr;\n className?: string | SExpr;\n };\n 'input': {\n type: 'input';\n className?: string | SExpr;\n placeholder?: string | SExpr;\n value?: string | number | SExpr;\n disabled?: boolean | string | SExpr;\n action?: string | SExpr;\n inputType?: string | SExpr;\n label?: string | SExpr;\n helperText?: string | SExpr;\n error?: string | SExpr;\n leftIcon?: unknown | string | SExpr;\n rightIcon?: unknown | string | SExpr;\n icon?: unknown | string | SExpr;\n clearable?: boolean | string | SExpr;\n onClear?: ((...args: unknown[]) => unknown) | string | SExpr;\n options?: unknown[] | string | SExpr;\n rows?: number | string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n };\n 'input-group': {\n type: 'input-group';\n className?: string | SExpr;\n placeholder?: string | SExpr;\n value?: string | number | SExpr;\n disabled?: boolean | string | SExpr;\n action?: string | SExpr;\n inputType?: string | SExpr;\n label?: string | SExpr;\n helperText?: string | SExpr;\n error?: string | SExpr;\n leftIcon?: unknown | string | SExpr;\n rightIcon?: unknown | string | SExpr;\n clearable?: boolean | string | SExpr;\n onClear?: ((...args: unknown[]) => unknown) | string | SExpr;\n options?: unknown[] | string | SExpr;\n rows?: number | string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n leftAddon?: unknown | unknown | string | SExpr;\n rightAddon?: unknown | unknown | string | SExpr;\n };\n 'install-box': {\n type: 'install-box';\n command: string | SExpr;\n label?: string | SExpr;\n className?: string | SExpr;\n };\n 'jazari-state-machine': {\n type: 'jazari-state-machine';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n schema?: PatternPropValue | string | SExpr;\n trait?: PatternPropValue | string | SExpr;\n traitIndex?: number | string | SExpr;\n entityFields?: unknown[] | string | SExpr;\n direction?: string | SExpr;\n };\n 'label': {\n type: 'label';\n className?: string | SExpr;\n text?: string | SExpr;\n htmlFor?: string | SExpr;\n required?: boolean | string | SExpr;\n };\n 'landing-page-template': {\n type: 'landing-page-template';\n entity: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n variant?: string | SExpr;\n featureColumns?: number | string | SExpr;\n };\n 'law-reference-tooltip': {\n type: 'law-reference-tooltip';\n reference: PatternPropValue | string | SExpr;\n children: unknown | string | SExpr;\n position?: string | SExpr;\n className?: string | SExpr;\n };\n 'learning-canvas': {\n type: 'learning-canvas';\n className?: string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n backgroundColor?: string | SExpr;\n shapes?: unknown[] | string | SExpr;\n interactive?: boolean | string | SExpr;\n animate?: boolean | string | SExpr;\n onShapeClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onShapeHover?: ((...args: unknown[]) => unknown) | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n };\n 'lightbox': {\n type: 'lightbox';\n images: unknown[] | string | SExpr;\n currentIndex?: number | string | SExpr;\n isOpen?: boolean | string | SExpr;\n showCounter?: boolean | string | SExpr;\n closeAction?: string | SExpr;\n onClose?: ((...args: unknown[]) => unknown) | string | SExpr;\n onIndexChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n };\n 'likert-scale': {\n type: 'likert-scale';\n question?: string | SExpr;\n options?: unknown[] | string | SExpr;\n value?: number | string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n changeEvent?: string | SExpr;\n disabled?: boolean | string | SExpr;\n size?: string | SExpr;\n variant?: string | SExpr;\n className?: string | SExpr;\n };\n 'line-chart': {\n type: 'line-chart';\n data: unknown[] | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n showGrid?: boolean | string | SExpr;\n showValues?: boolean | string | SExpr;\n showArea?: boolean | string | SExpr;\n lineColor?: string | SExpr;\n areaColor?: string | SExpr;\n className?: string | SExpr;\n };\n 'loading-state': {\n type: 'loading-state';\n title?: string | SExpr;\n message?: string | SExpr;\n className?: string | SExpr;\n fullPage?: boolean | string | SExpr;\n };\n 'map-view': {\n type: 'map-view';\n markers?: unknown[] | string | SExpr;\n routes?: unknown[] | string | SExpr;\n centerLat?: number | string | SExpr;\n centerLng?: number | string | SExpr;\n zoom?: number | string | SExpr;\n height?: string | SExpr;\n onMarkerClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onMapClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n mapClickEvent?: string | SExpr;\n markerClickEvent?: string | SExpr;\n showClickedPin?: boolean | string | SExpr;\n className?: string | SExpr;\n showAttribution?: boolean | string | SExpr;\n };\n 'markdown-content': {\n type: 'markdown-content';\n content: string | SExpr;\n direction?: string | SExpr;\n className?: string | SExpr;\n };\n 'marketing-footer': {\n type: 'marketing-footer';\n columns: unknown[] | string | SExpr;\n copyright?: string | SExpr;\n logo?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'marketing-stat-card': {\n type: 'marketing-stat-card';\n value: string | SExpr;\n label: string | SExpr;\n size?: string | SExpr;\n className?: string | SExpr;\n };\n 'master-detail': {\n type: 'master-detail';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n masterFields: unknown[] | string | SExpr;\n detailFields?: unknown[] | string | SExpr;\n loading?: boolean | string | SExpr;\n };\n 'master-detail-layout': {\n type: 'master-detail-layout';\n master: unknown | string | SExpr;\n detail: unknown | string | SExpr;\n emptyDetail?: unknown | string | SExpr;\n hasSelection?: boolean | string | SExpr;\n masterWidth?: string | SExpr;\n className?: string | SExpr;\n masterClassName?: string | SExpr;\n detailClassName?: string | SExpr;\n };\n 'math-canvas': {\n type: 'math-canvas';\n className?: string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n title?: string | SExpr;\n xMin?: number | string | SExpr;\n xMax?: number | string | SExpr;\n yMin?: number | string | SExpr;\n yMax?: number | string | SExpr;\n showAxes?: boolean | string | SExpr;\n showGrid?: boolean | string | SExpr;\n gridStep?: number | string | SExpr;\n curves?: unknown[] | string | SExpr;\n points?: unknown[] | string | SExpr;\n vectors?: unknown[] | string | SExpr;\n shapes?: unknown[] | string | SExpr;\n interactive?: boolean | string | SExpr;\n animate?: boolean | string | SExpr;\n onShapeClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n };\n 'matrix-question': {\n type: 'matrix-question';\n title?: string | SExpr;\n rows: unknown[] | string | SExpr;\n columns?: unknown[] | string | SExpr;\n values?: PatternPropValue | string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n changeEvent?: string | SExpr;\n disabled?: boolean | string | SExpr;\n size?: string | SExpr;\n className?: string | SExpr;\n };\n 'media-gallery': {\n type: 'media-gallery';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n title?: string | SExpr;\n items?: unknown[] | string | SExpr;\n columns?: number | string | SExpr;\n selectable?: boolean | string | SExpr;\n selectedItems?: unknown[] | string | SExpr;\n selectionEvent?: string | SExpr;\n showUpload?: boolean | string | SExpr;\n actions?: unknown[] | string | SExpr;\n aspectRatio?: string | SExpr;\n };\n 'menu': {\n type: 'menu';\n trigger: unknown | string | SExpr;\n items: unknown[] | string | SExpr;\n position?: string | SExpr;\n className?: string | SExpr;\n header?: unknown | string | SExpr;\n footer?: unknown | string | SExpr;\n };\n 'meter': {\n type: 'meter';\n value: number | string | SExpr;\n min?: number | string | SExpr;\n max?: number | string | SExpr;\n label?: string | SExpr;\n unit?: string | SExpr;\n variant?: string | SExpr;\n thresholds?: unknown[] | string | SExpr;\n segments?: number | string | SExpr;\n showValue?: boolean | string | SExpr;\n size?: string | SExpr;\n actions?: unknown[] | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'modal': {\n type: 'modal';\n isOpen?: boolean | string | SExpr;\n onClose?: ((...args: unknown[]) => unknown) | string | SExpr;\n onExited?: ((...args: unknown[]) => unknown) | string | SExpr;\n title?: string | SExpr;\n children?: unknown | string | SExpr;\n footer?: unknown | string | SExpr;\n size?: string | SExpr;\n showCloseButton?: boolean | string | SExpr;\n closeOnOverlayClick?: boolean | string | SExpr;\n closeOnEscape?: boolean | string | SExpr;\n className?: string | SExpr;\n closeEvent?: string | SExpr;\n swipeDownToClose?: boolean | string | SExpr;\n look?: string | SExpr;\n };\n 'modal-slot': {\n type: 'modal-slot';\n children?: unknown | string | SExpr;\n title?: string | SExpr;\n size?: string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n entity?: string | SExpr;\n sourceTrait?: string | SExpr;\n };\n 'module-card': {\n type: 'module-card';\n data: PatternPropValue | string | SExpr;\n };\n 'navigation': {\n type: 'navigation';\n items: unknown[] | string | SExpr;\n orientation?: string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n };\n 'notification': {\n type: 'notification';\n variant?: string | SExpr;\n message: string | SExpr;\n title?: string | SExpr;\n duration?: number | string | SExpr;\n dismissible?: boolean | string | SExpr;\n onDismiss?: ((...args: unknown[]) => unknown) | string | SExpr;\n actionLabel?: string | SExpr;\n onAction?: ((...args: unknown[]) => unknown) | string | SExpr;\n badge?: string | number | SExpr;\n className?: string | SExpr;\n dismissEvent?: string | SExpr;\n actionEvent?: string | SExpr;\n };\n 'number-stepper': {\n type: 'number-stepper';\n value?: number | string | SExpr;\n min?: number | string | SExpr;\n max?: number | string | SExpr;\n step?: number | string | SExpr;\n size?: string | SExpr;\n disabled?: boolean | string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n action?: string | SExpr;\n actionPayload?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n label?: string | SExpr;\n };\n 'option-constraint-group': {\n type: 'option-constraint-group';\n groupId: string | SExpr;\n title: string | SExpr;\n description?: string | SExpr;\n options: unknown[] | string | SExpr;\n constraint?: PatternPropValue | string | SExpr;\n selected?: unknown[] | string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n changeEvent?: string | SExpr;\n size?: string | SExpr;\n className?: string | SExpr;\n };\n 'orbital-visualization': {\n type: 'orbital-visualization';\n schema?: PatternPropValue | string | SExpr;\n complexity?: number | string | SExpr;\n size?: string | SExpr;\n showLabel?: boolean | string | SExpr;\n animated?: boolean | string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n };\n 'overlay': {\n type: 'overlay';\n isVisible?: boolean | string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n blur?: boolean | string | SExpr;\n action?: string | SExpr;\n };\n 'page-header': {\n type: 'page-header';\n title?: string | number | SExpr;\n subtitle?: string | number | SExpr;\n showBack?: boolean | string | SExpr;\n backEvent?: string | SExpr;\n breadcrumbs?: unknown[] | string | SExpr;\n status?: PatternPropValue | string | SExpr;\n actions?: unknown[] | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n tabs?: unknown[] | string | SExpr;\n activeTab?: string | SExpr;\n onTabChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n children?: unknown | string | SExpr;\n className?: string | SExpr;\n };\n 'page-transition': {\n type: 'page-transition';\n locationKey: string | SExpr;\n children: unknown | string | SExpr;\n className?: string | SExpr;\n };\n 'pagination': {\n type: 'pagination';\n currentPage: number | string | SExpr;\n totalPages: number | string | SExpr;\n onPageChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n showPageSize?: boolean | string | SExpr;\n pageSizeOptions?: unknown[] | string | SExpr;\n pageSize?: number | string | SExpr;\n onPageSizeChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n showJumpToPage?: boolean | string | SExpr;\n showTotal?: boolean | string | SExpr;\n totalItems?: number | string | SExpr;\n maxVisiblePages?: number | string | SExpr;\n className?: string | SExpr;\n pageChangeEvent?: string | SExpr;\n pageSizeChangeEvent?: string | SExpr;\n };\n 'pattern-tile': {\n type: 'pattern-tile';\n variant?: string | SExpr;\n size?: number | string | SExpr;\n color?: string | SExpr;\n strokeWidth?: number | string | SExpr;\n className?: string | SExpr;\n };\n 'physics-canvas': {\n type: 'physics-canvas';\n className?: string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n title?: string | SExpr;\n backgroundColor?: string | SExpr;\n bodies?: unknown[] | string | SExpr;\n constraints?: unknown[] | string | SExpr;\n showVelocity?: boolean | string | SExpr;\n showForces?: boolean | string | SExpr;\n velocityScale?: number | string | SExpr;\n forceScale?: number | string | SExpr;\n shapes?: unknown[] | string | SExpr;\n interactive?: boolean | string | SExpr;\n animate?: boolean | string | SExpr;\n onShapeClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n };\n 'popover': {\n type: 'popover';\n content: unknown | string | SExpr;\n children: unknown | string | SExpr;\n position?: string | SExpr;\n trigger?: string | SExpr;\n showArrow?: boolean | string | SExpr;\n open?: boolean | string | SExpr;\n onOpenChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n };\n 'positioned-canvas': {\n type: 'positioned-canvas';\n items: PatternPropValue | unknown[] | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n selectedId?: string | SExpr;\n editable?: boolean | string | SExpr;\n onSelect?: ((...args: unknown[]) => unknown) | string | SExpr;\n onMove?: ((...args: unknown[]) => unknown) | string | SExpr;\n selectEvent?: string | SExpr;\n moveEvent?: string | SExpr;\n className?: string | SExpr;\n };\n 'presence': {\n type: 'presence';\n show: boolean | string | SExpr;\n className?: string | SExpr;\n children: unknown | string | SExpr;\n };\n 'pricing-card': {\n type: 'pricing-card';\n name: string | SExpr;\n price: string | SExpr;\n description?: string | SExpr;\n features: unknown[] | string | SExpr;\n action: PatternPropValue | string | SExpr;\n highlighted?: boolean | string | SExpr;\n badge?: string | SExpr;\n className?: string | SExpr;\n };\n 'pricing-grid': {\n type: 'pricing-grid';\n plans: unknown[] | string | SExpr;\n className?: string | SExpr;\n };\n 'pricing-organism': {\n type: 'pricing-organism';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n heading?: string | SExpr;\n subtitle?: string | SExpr;\n };\n 'pricing-page-template': {\n type: 'pricing-page-template';\n entity: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'progress-bar': {\n type: 'progress-bar';\n value: number | string | SExpr;\n max?: number | string | SExpr;\n progressType?: string | SExpr;\n variant?: string | SExpr;\n color?: string | SExpr;\n showPercentage?: boolean | string | SExpr;\n showLabel?: boolean | string | SExpr;\n label?: string | SExpr;\n size?: string | SExpr;\n steps?: number | string | SExpr;\n className?: string | SExpr;\n };\n 'progress-dots': {\n type: 'progress-dots';\n count: number | string | SExpr;\n currentIndex: number | string | SExpr;\n getState?: ((...args: unknown[]) => unknown) | string | SExpr;\n onDotClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n size?: string | SExpr;\n };\n 'pull-quote': {\n type: 'pull-quote';\n children: string | SExpr;\n className?: string | SExpr;\n };\n 'pull-to-refresh': {\n type: 'pull-to-refresh';\n refreshEvent: string | SExpr;\n refreshPayload?: PatternPropValue | string | SExpr;\n threshold?: number | string | SExpr;\n children: unknown | string | SExpr;\n className?: string | SExpr;\n };\n 'qr-scanner': {\n type: 'qr-scanner';\n onScan?: ((...args: unknown[]) => unknown) | string | SExpr;\n scanEvent?: string | SExpr;\n onError?: ((...args: unknown[]) => unknown) | string | SExpr;\n facingMode?: string | SExpr;\n paused?: boolean | string | SExpr;\n showOverlay?: boolean | string | SExpr;\n showCameraControls?: boolean | string | SExpr;\n fallback?: unknown | string | SExpr;\n className?: string | SExpr;\n };\n 'quiz-block': {\n type: 'quiz-block';\n question: string | SExpr;\n answer: string | SExpr;\n className?: string | SExpr;\n };\n 'radio': {\n type: 'radio';\n className?: string | SExpr;\n options?: unknown[] | string | SExpr;\n value?: string | SExpr;\n action?: string | SExpr;\n label?: string | SExpr;\n helperText?: string | SExpr;\n error?: string | SExpr;\n size?: string | SExpr;\n };\n 'range-slider': {\n type: 'range-slider';\n className?: string | SExpr;\n min?: number | string | SExpr;\n max?: number | string | SExpr;\n value?: number | string | SExpr;\n step?: number | string | SExpr;\n showTooltip?: boolean | string | SExpr;\n showTicks?: boolean | string | SExpr;\n buffered?: number | string | SExpr;\n size?: string | SExpr;\n disabled?: boolean | string | SExpr;\n action?: string | SExpr;\n actionPayload?: PatternPropValue | string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n formatValue?: ((...args: unknown[]) => unknown) | string | SExpr;\n };\n 'reflection-block': {\n type: 'reflection-block';\n prompt: string | SExpr;\n index: number | string | SExpr;\n savedNote?: string | SExpr;\n saveEvent?: string | SExpr;\n className?: string | SExpr;\n };\n 'relation-select': {\n type: 'relation-select';\n value?: string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n options: unknown[] | string | SExpr;\n placeholder?: string | SExpr;\n required?: boolean | string | SExpr;\n disabled?: boolean | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: string | SExpr;\n clearable?: boolean | string | SExpr;\n name?: string | SExpr;\n className?: string | SExpr;\n searchPlaceholder?: string | SExpr;\n emptyMessage?: string | SExpr;\n };\n 'repeatable-form-section': {\n type: 'repeatable-form-section';\n sectionType: string | SExpr;\n title: string | SExpr;\n items: unknown[] | string | SExpr;\n renderItem: ((...args: unknown[]) => unknown) | string | SExpr;\n minItems?: number | string | SExpr;\n maxItems?: number | string | SExpr;\n allowReorder?: boolean | string | SExpr;\n addLabel?: string | SExpr;\n emptyMessage?: string | SExpr;\n readOnly?: boolean | string | SExpr;\n className?: string | SExpr;\n onAdd?: ((...args: unknown[]) => unknown) | string | SExpr;\n onRemove?: ((...args: unknown[]) => unknown) | string | SExpr;\n onReorder?: ((...args: unknown[]) => unknown) | string | SExpr;\n trackAddedInState?: boolean | string | SExpr;\n currentState?: string | SExpr;\n showAuditInfo?: boolean | string | SExpr;\n };\n 'reply-tree': {\n type: 'reply-tree';\n nodes: PatternPropValue | unknown[] | string | SExpr;\n maxDepth?: number | string | SExpr;\n onVote?: ((...args: unknown[]) => unknown) | string | SExpr;\n onReply?: ((...args: unknown[]) => unknown) | string | SExpr;\n onFlag?: ((...args: unknown[]) => unknown) | string | SExpr;\n onContinueThread?: ((...args: unknown[]) => unknown) | string | SExpr;\n voteEvent?: string | SExpr;\n replyEvent?: string | SExpr;\n flagEvent?: string | SExpr;\n continueThreadEvent?: string | SExpr;\n showActions?: boolean | string | SExpr;\n className?: string | SExpr;\n };\n 'rich-block-editor': {\n type: 'rich-block-editor';\n initialBlocks?: PatternPropValue | unknown[] | string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n changeEvent?: string | SExpr;\n readOnly?: boolean | string | SExpr;\n placeholder?: string | SExpr;\n enableBlocks?: boolean | string | SExpr;\n showToolbar?: boolean | string | SExpr;\n className?: string | SExpr;\n };\n 'runtime-debugger': {\n type: 'runtime-debugger';\n position?: string | SExpr;\n defaultCollapsed?: boolean | string | SExpr;\n className?: string | SExpr;\n mode?: string | SExpr;\n defaultTab?: string | SExpr;\n schema?: PatternPropValue | string | SExpr;\n };\n 'scaled-diagram': {\n type: 'scaled-diagram';\n children: unknown | string | SExpr;\n className?: string | SExpr;\n };\n 'score-display': {\n type: 'score-display';\n assetUrl?: PatternPropValue | string | SExpr;\n value: number | string | SExpr;\n score?: number | string | SExpr;\n label?: string | SExpr;\n icon?: unknown | string | SExpr;\n size?: string | SExpr;\n className?: string | SExpr;\n locale?: string | SExpr;\n };\n 'search-input': {\n type: 'search-input';\n value?: string | SExpr;\n onSearch?: ((...args: unknown[]) => unknown) | string | SExpr;\n debounceMs?: number | string | SExpr;\n isLoading?: boolean | string | SExpr;\n placeholder?: string | SExpr;\n clearable?: boolean | string | SExpr;\n className?: string | SExpr;\n event?: string | SExpr;\n entity?: string | SExpr;\n query?: string | SExpr;\n };\n 'section': {\n type: 'section';\n title?: string | SExpr;\n description?: string | SExpr;\n action?: unknown | string | SExpr;\n padding?: string | SExpr;\n variant?: string | SExpr;\n divider?: boolean | string | SExpr;\n className?: string | SExpr;\n children: unknown | string | SExpr;\n headerClassName?: string | SExpr;\n contentClassName?: string | SExpr;\n as?: unknown | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n };\n 'section-header': {\n type: 'section-header';\n title: string | SExpr;\n subtitle?: string | SExpr;\n align?: string | SExpr;\n level?: number | string | SExpr;\n className?: string | SExpr;\n };\n 'segment-renderer': {\n type: 'segment-renderer';\n segments: unknown[] | string | SExpr;\n className?: string | SExpr;\n containerClassName?: string | SExpr;\n userProgress?: PatternPropValue | string | SExpr;\n onRunCodeSimulation?: ((...args: unknown[]) => unknown) | string | SExpr;\n onRenderVisualization?: ((...args: unknown[]) => unknown) | string | SExpr;\n };\n 'select': {\n type: 'select';\n className?: string | SExpr;\n options?: unknown[] | string | SExpr;\n groups?: unknown[] | string | SExpr;\n placeholder?: string | SExpr;\n value?: string | unknown[] | SExpr;\n action?: string | SExpr;\n error?: string | SExpr;\n multiple?: boolean | string | SExpr;\n searchable?: boolean | string | SExpr;\n clearable?: boolean | string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n onValueChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n };\n 'sequence-bar': {\n type: 'sequence-bar';\n slots: unknown[] | string | SExpr;\n maxSlots: number | string | SExpr;\n onSlotDrop?: ((...args: unknown[]) => unknown) | string | SExpr;\n onSlotRemove?: ((...args: unknown[]) => unknown) | string | SExpr;\n slotDropEvent?: string | SExpr;\n slotRemoveEvent?: string | SExpr;\n playing?: boolean | string | SExpr;\n currentStep?: number | string | SExpr;\n categoryColors?: PatternPropValue | string | SExpr;\n slotFeedback?: unknown[] | string | SExpr;\n size?: string | SExpr;\n className?: string | SExpr;\n };\n 'service-catalog': {\n type: 'service-catalog';\n services: unknown[] | string | SExpr;\n className?: string | SExpr;\n };\n 'showcase-card': {\n type: 'showcase-card';\n title: string | SExpr;\n description?: string | SExpr;\n image: PatternPropValue | string | SExpr;\n href?: string | SExpr;\n badge?: string | SExpr;\n accentColor?: string | SExpr;\n className?: string | SExpr;\n };\n 'showcase-organism': {\n type: 'showcase-organism';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n columns?: number | string | SExpr;\n heading?: string | SExpr;\n subtitle?: string | SExpr;\n };\n 'side-panel': {\n type: 'side-panel';\n title: string | SExpr;\n children: unknown | string | SExpr;\n isOpen: boolean | string | SExpr;\n onClose: ((...args: unknown[]) => unknown) | string | SExpr;\n width?: string | SExpr;\n position?: string | SExpr;\n showOverlay?: boolean | string | SExpr;\n className?: string | SExpr;\n closeEvent?: string | SExpr;\n };\n 'sidebar': {\n type: 'sidebar';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n logo?: unknown | string | SExpr;\n logoSrc?: unknown | string | SExpr;\n brandName?: string | SExpr;\n items: unknown[] | string | SExpr;\n userSection?: unknown | string | SExpr;\n footerContent?: unknown | string | SExpr;\n collapsed?: boolean | string | SExpr;\n defaultCollapsed?: boolean | string | SExpr;\n collapseChangeEvent?: string | SExpr;\n hideCollapseButton?: boolean | string | SExpr;\n showCloseButton?: boolean | string | SExpr;\n closeEvent?: string | SExpr;\n logoClickEvent?: string | SExpr;\n };\n 'signature-pad': {\n type: 'signature-pad';\n label?: string | SExpr;\n helperText?: string | SExpr;\n strokeColor?: string | SExpr;\n strokeWidth?: number | string | SExpr;\n height?: number | string | SExpr;\n readOnly?: boolean | string | SExpr;\n value?: string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n signEvent?: string | SExpr;\n clearEvent?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'simple-grid': {\n type: 'simple-grid';\n minChildWidth?: number | string | SExpr;\n maxCols?: number | string | SExpr;\n cols?: number | string | SExpr;\n gap?: string | SExpr;\n className?: string | SExpr;\n children: unknown | string | SExpr;\n };\n 'skeleton': {\n type: 'skeleton';\n variant?: string | SExpr;\n rows?: number | string | SExpr;\n columns?: number | string | SExpr;\n fields?: number | string | SExpr;\n className?: string | SExpr;\n };\n 'social-proof': {\n type: 'social-proof';\n items: unknown[] | string | SExpr;\n variant?: string | SExpr;\n className?: string | SExpr;\n };\n 'sortable-list': {\n type: 'sortable-list';\n items: PatternPropValue | unknown[] | string | SExpr;\n renderItem: ((...args: unknown[]) => unknown) | string | SExpr;\n reorderEvent: string | SExpr;\n reorderPayload?: PatternPropValue | string | SExpr;\n dragHandlePosition?: string | SExpr;\n className?: string | SExpr;\n };\n 'spacer': {\n type: 'spacer';\n size?: string | SExpr;\n axis?: string | SExpr;\n className?: string | SExpr;\n };\n 'sparkline': {\n type: 'sparkline';\n data: unknown[] | string | SExpr;\n color?: string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n strokeWidth?: number | string | SExpr;\n fill?: boolean | string | SExpr;\n className?: string | SExpr;\n };\n 'spinner': {\n type: 'spinner';\n className?: string | SExpr;\n size?: string | SExpr;\n overlay?: boolean | string | SExpr;\n };\n 'split': {\n type: 'split';\n ratio?: string | SExpr;\n gap?: string | SExpr;\n reverse?: boolean | string | SExpr;\n stackOnMobile?: boolean | string | SExpr;\n stackBreakpoint?: string | SExpr;\n align?: string | SExpr;\n className?: string | SExpr;\n leftClassName?: string | SExpr;\n rightClassName?: string | SExpr;\n children: unknown[] | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n };\n 'split-pane': {\n type: 'split-pane';\n direction?: string | SExpr;\n ratio?: number | string | SExpr;\n minSize?: number | string | SExpr;\n resizable?: boolean | string | SExpr;\n left: unknown | string | SExpr;\n right: unknown | string | SExpr;\n className?: string | SExpr;\n leftClassName?: string | SExpr;\n rightClassName?: string | SExpr;\n };\n 'split-section': {\n type: 'split-section';\n title: string | SExpr;\n description: string | unknown | SExpr;\n bullets?: unknown[] | string | SExpr;\n image?: PatternPropValue | string | SExpr;\n imagePosition?: string | SExpr;\n background?: string | SExpr;\n children?: unknown | string | SExpr;\n className?: string | SExpr;\n };\n 'stack': {\n type: 'stack';\n direction?: string | SExpr;\n gap?: string | SExpr;\n align?: string | SExpr;\n justify?: string | SExpr;\n wrap?: boolean | string | SExpr;\n reverse?: boolean | string | SExpr;\n flex?: boolean | string | SExpr;\n className?: string | SExpr;\n style?: PatternPropValue | string | SExpr;\n children?: unknown | string | SExpr;\n as?: unknown | string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onKeyDown?: ((...args: unknown[]) => unknown) | string | SExpr;\n role?: string | SExpr;\n tabIndex?: number | string | SExpr;\n action?: string | SExpr;\n actionPayload?: PatternPropValue | string | SExpr;\n responsive?: boolean | string | SExpr;\n };\n 'star-rating': {\n type: 'star-rating';\n value?: number | string | SExpr;\n max?: number | string | SExpr;\n readOnly?: boolean | string | SExpr;\n precision?: string | SExpr;\n size?: string | SExpr;\n action?: string | SExpr;\n actionPayload?: PatternPropValue | string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n label?: string | SExpr;\n };\n 'stat-badge': {\n type: 'stat-badge';\n assetUrl?: PatternPropValue | string | SExpr;\n iconUrl?: PatternPropValue | string | SExpr;\n label: string | SExpr;\n value?: number | string | SExpr;\n max?: number | string | SExpr;\n source?: string | SExpr;\n field?: string | SExpr;\n format?: string | SExpr;\n icon?: unknown | string | SExpr;\n size?: string | SExpr;\n variant?: string | SExpr;\n className?: string | SExpr;\n };\n 'stat-card': {\n type: 'stat-card';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n label?: string | SExpr;\n title?: string | SExpr;\n value?: string | number | unknown[] | SExpr;\n previousValue?: number | string | SExpr;\n currentValue?: number | string | SExpr;\n trend?: number | string | SExpr;\n trendDirection?: string | SExpr;\n invertTrend?: boolean | string | SExpr;\n icon?: unknown | string | SExpr;\n iconBg?: string | SExpr;\n iconColor?: string | SExpr;\n subtitle?: string | SExpr;\n action?: PatternPropValue | string | SExpr;\n metrics?: unknown[] | string | SExpr;\n compact?: boolean | string | SExpr;\n sparklineData?: unknown[] | string | SExpr;\n };\n 'stat-display': {\n type: 'stat-display';\n label: string | SExpr;\n value: number | string | SExpr;\n max?: number | string | SExpr;\n target?: number | string | SExpr;\n trend?: number | string | SExpr;\n trendPolarity?: string | SExpr;\n trendFormat?: string | SExpr;\n sparklineData?: unknown[] | string | SExpr;\n clickEvent?: string | SExpr;\n prefix?: string | SExpr;\n suffix?: string | SExpr;\n icon?: unknown | string | SExpr;\n iconBg?: string | SExpr;\n iconColor?: string | SExpr;\n format?: string | SExpr;\n size?: string | SExpr;\n variant?: string | SExpr;\n compact?: boolean | string | SExpr;\n look?: string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n };\n 'state-graph': {\n type: 'state-graph';\n states: unknown[] | string | SExpr;\n transitions?: unknown[] | string | SExpr;\n currentState?: string | SExpr;\n selectedState?: string | SExpr;\n addingFrom?: string | SExpr;\n initialState?: string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n nodeClickEvent?: string | SExpr;\n className?: string | SExpr;\n };\n 'state-json-view': {\n type: 'state-json-view';\n name: string | SExpr;\n initialState: string | SExpr;\n states: unknown[] | string | SExpr;\n transitions: unknown[] | string | SExpr;\n label?: string | SExpr;\n defaultExpanded?: boolean | string | SExpr;\n className?: string | SExpr;\n };\n 'state-machine-view': {\n type: 'state-machine-view';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n layoutData?: PatternPropValue | string | SExpr;\n renderStateNode?: ((...args: unknown[]) => unknown) | string | SExpr;\n };\n 'stats-grid': {\n type: 'stats-grid';\n stats: unknown[] | string | SExpr;\n columns?: number | string | SExpr;\n className?: string | SExpr;\n };\n 'stats-organism': {\n type: 'stats-organism';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n columns?: number | string | SExpr;\n };\n 'status-dot': {\n type: 'status-dot';\n className?: string | SExpr;\n status?: string | SExpr;\n pulse?: boolean | string | SExpr;\n size?: string | SExpr;\n label?: string | SExpr;\n };\n 'step-flow': {\n type: 'step-flow';\n steps: unknown[] | string | SExpr;\n orientation?: string | SExpr;\n showConnectors?: boolean | string | SExpr;\n className?: string | SExpr;\n };\n 'step-flow-organism': {\n type: 'step-flow-organism';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n orientation?: string | SExpr;\n showConnectors?: boolean | string | SExpr;\n heading?: string | SExpr;\n subtitle?: string | SExpr;\n };\n 'subagent-trace-panel': {\n type: 'subagent-trace-panel';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n subagents: unknown[] | string | SExpr;\n focusedOrbital?: string | SExpr;\n disclosureLevel: number | string | SExpr;\n open: boolean | string | SExpr;\n onClose?: ((...args: unknown[]) => unknown) | string | SExpr;\n coordinatorActivities?: unknown[] | string | SExpr;\n coordinatorMessages?: unknown[] | string | SExpr;\n mode?: string | SExpr;\n };\n 'svg-branch': {\n type: 'svg-branch';\n x?: number | string | SExpr;\n y?: number | string | SExpr;\n variant?: string | SExpr;\n branches?: number | string | SExpr;\n size?: number | string | SExpr;\n color?: string | SExpr;\n opacity?: number | string | SExpr;\n className?: string | SExpr;\n asRoot?: boolean | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n };\n 'svg-connection': {\n type: 'svg-connection';\n x1?: number | string | SExpr;\n y1?: number | string | SExpr;\n x2?: number | string | SExpr;\n y2?: number | string | SExpr;\n variant?: string | SExpr;\n color?: string | SExpr;\n strokeWidth?: number | string | SExpr;\n opacity?: number | string | SExpr;\n className?: string | SExpr;\n asRoot?: boolean | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n };\n 'svg-flow': {\n type: 'svg-flow';\n points?: unknown[] | string | SExpr;\n color?: string | SExpr;\n strokeWidth?: number | string | SExpr;\n animated?: boolean | string | SExpr;\n opacity?: number | string | SExpr;\n className?: string | SExpr;\n asRoot?: boolean | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n };\n 'svg-grid': {\n type: 'svg-grid';\n x?: number | string | SExpr;\n y?: number | string | SExpr;\n cols?: number | string | SExpr;\n rows?: number | string | SExpr;\n spacing?: number | string | SExpr;\n nodeRadius?: number | string | SExpr;\n color?: string | SExpr;\n opacity?: number | string | SExpr;\n className?: string | SExpr;\n highlights?: unknown[] | string | SExpr;\n asRoot?: boolean | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n };\n 'svg-lobe': {\n type: 'svg-lobe';\n cx?: number | string | SExpr;\n cy?: number | string | SExpr;\n rx?: number | string | SExpr;\n ry?: number | string | SExpr;\n rotation?: number | string | SExpr;\n shells?: number | string | SExpr;\n color?: string | SExpr;\n opacity?: number | string | SExpr;\n className?: string | SExpr;\n asRoot?: boolean | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n };\n 'svg-mesh': {\n type: 'svg-mesh';\n cx?: number | string | SExpr;\n cy?: number | string | SExpr;\n nodes?: number | string | SExpr;\n radius?: number | string | SExpr;\n color?: string | SExpr;\n connectionDensity?: number | string | SExpr;\n opacity?: number | string | SExpr;\n className?: string | SExpr;\n asRoot?: boolean | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n };\n 'svg-morph': {\n type: 'svg-morph';\n x?: number | string | SExpr;\n y?: number | string | SExpr;\n size?: number | string | SExpr;\n variant?: string | SExpr;\n color?: string | SExpr;\n opacity?: number | string | SExpr;\n className?: string | SExpr;\n asRoot?: boolean | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n };\n 'svg-node': {\n type: 'svg-node';\n x?: number | string | SExpr;\n y?: number | string | SExpr;\n r?: number | string | SExpr;\n variant?: string | SExpr;\n color?: string | SExpr;\n opacity?: number | string | SExpr;\n className?: string | SExpr;\n label?: string | SExpr;\n asRoot?: boolean | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n };\n 'svg-pulse': {\n type: 'svg-pulse';\n cx?: number | string | SExpr;\n cy?: number | string | SExpr;\n rings?: number | string | SExpr;\n maxRadius?: number | string | SExpr;\n color?: string | SExpr;\n animated?: boolean | string | SExpr;\n opacity?: number | string | SExpr;\n className?: string | SExpr;\n asRoot?: boolean | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n };\n 'svg-ring': {\n type: 'svg-ring';\n cx?: number | string | SExpr;\n cy?: number | string | SExpr;\n r?: number | string | SExpr;\n variant?: string | SExpr;\n color?: string | SExpr;\n strokeWidth?: number | string | SExpr;\n opacity?: number | string | SExpr;\n className?: string | SExpr;\n label?: string | SExpr;\n asRoot?: boolean | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n };\n 'svg-shield': {\n type: 'svg-shield';\n x?: number | string | SExpr;\n y?: number | string | SExpr;\n size?: number | string | SExpr;\n variant?: string | SExpr;\n color?: string | SExpr;\n opacity?: number | string | SExpr;\n className?: string | SExpr;\n asRoot?: boolean | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n };\n 'svg-stack': {\n type: 'svg-stack';\n x?: number | string | SExpr;\n y?: number | string | SExpr;\n layers?: number | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n color?: string | SExpr;\n opacity?: number | string | SExpr;\n className?: string | SExpr;\n labels?: unknown[] | string | SExpr;\n asRoot?: boolean | string | SExpr;\n svgWidth?: number | string | SExpr;\n svgHeight?: number | string | SExpr;\n };\n 'swipeable-row': {\n type: 'swipeable-row';\n leftActions?: unknown[] | string | SExpr;\n rightActions?: unknown[] | string | SExpr;\n threshold?: number | string | SExpr;\n children: unknown | string | SExpr;\n itemData?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'switch': {\n type: 'switch';\n checked?: boolean | string | SExpr;\n defaultChecked?: boolean | string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n disabled?: boolean | string | SExpr;\n label?: string | SExpr;\n id?: string | SExpr;\n name?: string | SExpr;\n className?: string | SExpr;\n };\n 'tabbed-container': {\n type: 'tabbed-container';\n tabs: unknown[] | string | SExpr;\n defaultTab?: string | SExpr;\n activeTab?: string | SExpr;\n onTabChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n position?: string | SExpr;\n className?: string | SExpr;\n };\n 'table-view': {\n type: 'table-view';\n dragGroup?: string | SExpr;\n accepts?: string | SExpr;\n sortable?: boolean | string | SExpr;\n dropEvent?: string | SExpr;\n reorderEvent?: string | SExpr;\n positionEvent?: string | SExpr;\n dndItemIdField?: string | SExpr;\n dndRoot?: boolean | string | SExpr;\n entity: PatternPropValue | unknown[] | string | SExpr;\n columns?: unknown[] | string | SExpr;\n fields?: unknown[] | string | SExpr;\n itemActions?: unknown[] | string | SExpr;\n maxInlineActions?: number | string | SExpr;\n itemClickEvent?: string | SExpr;\n selectable?: boolean | string | SExpr;\n selectEvent?: string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n sortEvent?: string | SExpr;\n sortColumn?: string | SExpr;\n sortDirection?: string | SExpr;\n className?: string | SExpr;\n emptyMessage?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n groupBy?: string | SExpr;\n pageSize?: number | string | SExpr;\n children?: ((...args: unknown[]) => unknown) | string | SExpr;\n renderItem?: ((...args: unknown[]) => unknown) | string | SExpr;\n look?: string | SExpr;\n };\n 'tabs': {\n type: 'tabs';\n items?: unknown[] | string | SExpr;\n tabs?: unknown[] | string | SExpr;\n defaultActiveTab?: string | SExpr;\n activeTab?: string | SExpr;\n onTabChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n tabChangeEvent?: string | SExpr;\n variant?: string | SExpr;\n orientation?: string | SExpr;\n className?: string | SExpr;\n };\n 'tag-cloud': {\n type: 'tag-cloud';\n tags: unknown[] | string | SExpr;\n variant?: string | SExpr;\n className?: string | SExpr;\n };\n 'tag-input': {\n type: 'tag-input';\n value: unknown[] | string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n placeholder?: string | SExpr;\n disabled?: boolean | string | SExpr;\n variant?: string | SExpr;\n unique?: boolean | string | SExpr;\n helperText?: string | SExpr;\n className?: string | SExpr;\n addEvent?: string | SExpr;\n removeEvent?: string | SExpr;\n };\n 'team-card': {\n type: 'team-card';\n name: string | SExpr;\n nameAr?: string | SExpr;\n role: string | SExpr;\n bio: string | SExpr;\n avatar?: unknown | PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'team-organism': {\n type: 'team-organism';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n heading?: string | SExpr;\n subtitle?: string | SExpr;\n };\n 'text-highlight': {\n type: 'text-highlight';\n highlightType: string | SExpr;\n isActive?: boolean | string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onMouseEnter?: ((...args: unknown[]) => unknown) | string | SExpr;\n onMouseLeave?: ((...args: unknown[]) => unknown) | string | SExpr;\n annotationId?: string | SExpr;\n className?: string | SExpr;\n children: unknown | string | SExpr;\n action?: string | SExpr;\n hoverEvent?: string | SExpr;\n };\n 'textarea': {\n type: 'textarea';\n className?: string | SExpr;\n placeholder?: string | SExpr;\n rows?: number | string | SExpr;\n action?: string | SExpr;\n error?: string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n };\n 'theme-toggle': {\n type: 'theme-toggle';\n className?: string | SExpr;\n size?: string | SExpr;\n showLabel?: boolean | string | SExpr;\n };\n 'time-slot-cell': {\n type: 'time-slot-cell';\n time: string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n children?: unknown | string | SExpr;\n isOccupied?: boolean | string | SExpr;\n };\n 'timeline': {\n type: 'timeline';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n title?: string | SExpr;\n items?: unknown[] | string | SExpr;\n fields: unknown[] | string | SExpr;\n itemActions?: unknown[] | string | SExpr;\n look?: string | SExpr;\n };\n 'timer-display': {\n type: 'timer-display';\n seconds: number | string | SExpr;\n running?: boolean | string | SExpr;\n format?: string | SExpr;\n size?: string | SExpr;\n className?: string | SExpr;\n lowThreshold?: number | string | SExpr;\n iconAsset?: PatternPropValue | string | SExpr;\n };\n 'toast-slot': {\n type: 'toast-slot';\n children?: unknown | string | SExpr;\n variant?: string | SExpr;\n title?: string | SExpr;\n duration?: number | string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n entity?: string | SExpr;\n sourceTrait?: string | SExpr;\n };\n 'tooltip': {\n type: 'tooltip';\n content: unknown | string | SExpr;\n children: unknown | string | SExpr;\n position?: string | SExpr;\n delay?: number | string | SExpr;\n hideDelay?: number | string | SExpr;\n showArrow?: boolean | string | SExpr;\n className?: string | SExpr;\n };\n 'trait-frame': {\n type: 'trait-frame';\n traitName: string | SExpr;\n fallback?: unknown | string | SExpr;\n };\n 'trait-slot': {\n type: 'trait-slot';\n slotNumber: number | string | SExpr;\n equippedItem?: PatternPropValue | string | SExpr;\n locked?: boolean | string | SExpr;\n lockLabel?: string | SExpr;\n selected?: boolean | string | SExpr;\n size?: string | SExpr;\n showTooltip?: boolean | string | SExpr;\n categoryColors?: PatternPropValue | string | SExpr;\n tooltipFrameUrl?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n onItemDrop?: ((...args: unknown[]) => unknown) | string | SExpr;\n draggable?: boolean | string | SExpr;\n onDragStart?: ((...args: unknown[]) => unknown) | string | SExpr;\n feedback?: string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onRemove?: ((...args: unknown[]) => unknown) | string | SExpr;\n clickEvent?: string | SExpr;\n removeEvent?: string | SExpr;\n dropEvent?: string | SExpr;\n };\n 'trend-indicator': {\n type: 'trend-indicator';\n className?: string | SExpr;\n value?: number | string | SExpr;\n direction?: string | SExpr;\n showValue?: boolean | string | SExpr;\n invert?: boolean | string | SExpr;\n label?: string | SExpr;\n size?: string | SExpr;\n };\n 'typewriter-text': {\n type: 'typewriter-text';\n text: string | SExpr;\n speed?: number | string | SExpr;\n startDelay?: number | string | SExpr;\n className?: string | SExpr;\n onComplete?: ((...args: unknown[]) => unknown) | string | SExpr;\n };\n 'typography': {\n type: 'typography';\n variant?: string | SExpr;\n level?: number | string | SExpr;\n color?: string | SExpr;\n align?: string | SExpr;\n weight?: string | SExpr;\n size?: string | SExpr;\n truncate?: boolean | string | SExpr;\n overflow?: string | SExpr;\n as?: unknown | string | SExpr;\n id?: string | SExpr;\n className?: string | SExpr;\n style?: PatternPropValue | string | SExpr;\n format?: string | SExpr;\n content?: unknown | string | SExpr;\n children?: unknown | string | SExpr;\n };\n 'ui-slot-renderer': {\n type: 'ui-slot-renderer';\n includeHud?: boolean | string | SExpr;\n hudMode?: string | SExpr;\n includeFloating?: boolean | string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n entity?: string | SExpr;\n suspense?: boolean | PatternPropValue | string | SExpr;\n };\n 'upload-drop-zone': {\n type: 'upload-drop-zone';\n accept?: string | SExpr;\n maxSize?: number | string | SExpr;\n maxFiles?: number | string | SExpr;\n label?: string | SExpr;\n description?: string | SExpr;\n icon?: unknown | string | SExpr;\n disabled?: boolean | string | SExpr;\n action?: string | SExpr;\n actionPayload?: PatternPropValue | string | SExpr;\n onFiles?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n };\n 'version-diff': {\n type: 'version-diff';\n revisions: unknown[] | PatternPropValue | string | SExpr;\n beforeId?: string | SExpr;\n afterId?: string | SExpr;\n view?: string | SExpr;\n onSelectBefore?: ((...args: unknown[]) => unknown) | string | SExpr;\n onSelectAfter?: ((...args: unknown[]) => unknown) | string | SExpr;\n onRevert?: ((...args: unknown[]) => unknown) | string | SExpr;\n selectBeforeEvent?: string | SExpr;\n selectAfterEvent?: string | SExpr;\n revertEvent?: string | SExpr;\n language?: string | SExpr;\n className?: string | SExpr;\n };\n 'violation-alert': {\n type: 'violation-alert';\n violation: PatternPropValue | string | SExpr;\n severity?: string | SExpr;\n dismissible?: boolean | string | SExpr;\n onDismiss?: ((...args: unknown[]) => unknown) | string | SExpr;\n onNavigateToField?: ((...args: unknown[]) => unknown) | string | SExpr;\n compact?: boolean | string | SExpr;\n className?: string | SExpr;\n message?: string | SExpr;\n };\n 'vote-stack': {\n type: 'vote-stack';\n count: number | string | SExpr;\n userVote?: string | SExpr;\n onVote?: ((...args: unknown[]) => unknown) | string | SExpr;\n voteEvent?: string | SExpr;\n disabled?: boolean | string | SExpr;\n size?: string | SExpr;\n variant?: string | SExpr;\n className?: string | SExpr;\n label?: string | SExpr;\n };\n 'vstack': {\n type: 'vstack';\n gap?: string | SExpr;\n align?: string | SExpr;\n justify?: string | SExpr;\n wrap?: boolean | string | SExpr;\n reverse?: boolean | string | SExpr;\n flex?: boolean | string | SExpr;\n className?: string | SExpr;\n style?: PatternPropValue | string | SExpr;\n children?: unknown | string | SExpr;\n as?: unknown | string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onKeyDown?: ((...args: unknown[]) => unknown) | string | SExpr;\n role?: string | SExpr;\n tabIndex?: number | string | SExpr;\n action?: string | SExpr;\n actionPayload?: PatternPropValue | string | SExpr;\n responsive?: boolean | string | SExpr;\n };\n 'wizard-container': {\n type: 'wizard-container';\n steps: unknown[] | string | SExpr;\n currentStep?: number | string | SExpr;\n onStepChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n onComplete?: ((...args: unknown[]) => unknown) | string | SExpr;\n showProgress?: boolean | string | SExpr;\n allowBack?: boolean | string | SExpr;\n compact?: boolean | string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n nextEvent?: string | SExpr;\n backEvent?: string | SExpr;\n completeEvent?: string | SExpr;\n };\n 'wizard-navigation': {\n type: 'wizard-navigation';\n currentStep: number | string | SExpr;\n totalSteps: number | string | SExpr;\n isValid?: boolean | string | SExpr;\n showBack?: boolean | string | SExpr;\n showNext?: boolean | string | SExpr;\n showComplete?: boolean | string | SExpr;\n backLabel?: string | SExpr;\n nextLabel?: string | SExpr;\n completeLabel?: string | SExpr;\n onBack?: string | SExpr;\n onNext?: string | SExpr;\n onComplete?: string | SExpr;\n onBackClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onNextClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onCompleteClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n compact?: boolean | string | SExpr;\n className?: string | SExpr;\n };\n 'wizard-progress': {\n type: 'wizard-progress';\n steps?: unknown[] | string | SExpr;\n currentStep: number | string | SExpr;\n onStepClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n allowNavigation?: boolean | string | SExpr;\n compact?: boolean | string | SExpr;\n className?: string | SExpr;\n stepClickEvent?: string | SExpr;\n };\n}\n\n/**\n * Get the props type for a specific pattern.\n */\nexport type PatternProps<T extends PatternType> = PatternPropsMap[T];\n\n/**\n * Type-safe pattern configuration.\n */\nexport type PatternConfig<T extends PatternType = PatternType> = PatternPropsMap[T];\n\n/**\n * Discriminated union of all pattern configs.\n */\nexport type AnyPatternConfig = PatternPropsMap[PatternType];\n\n/**\n * Array of all pattern type names (for runtime validation).\n */\nexport const PATTERN_TYPES: PatternType[] = [\n 'about-page-template',\n 'accordion',\n 'action-palette',\n 'action-tile',\n 'activation-block',\n 'alert',\n 'algorithm-canvas',\n 'animated-counter',\n 'animated-graphic',\n 'animated-reveal',\n 'article-section',\n 'aside',\n 'atlas-image',\n 'atlas-panel',\n 'auth-layout',\n 'avatar',\n 'badge',\n 'behavior-view',\n 'biology-canvas',\n 'bloom-quiz-block',\n 'book-chapter-view',\n 'book-cover-page',\n 'book-nav-bar',\n 'book-table-of-contents',\n 'book-viewer',\n 'box',\n 'branching-logic-builder',\n 'breadcrumb',\n 'button',\n 'calendar-grid',\n 'canvas',\n 'canvas-2d',\n 'card',\n 'carousel',\n 'case-study-card',\n 'case-study-organism',\n 'center',\n 'chart',\n 'chart-legend',\n 'chat-bar',\n 'checkbox',\n 'chemistry-canvas',\n 'choice-button',\n 'code-block',\n 'code-runner-panel',\n 'community-links',\n 'conditional-wrapper',\n 'confetti-effect',\n 'confirm-dialog',\n 'connection-block',\n 'container',\n 'content-renderer',\n 'content-section',\n 'control-button',\n 'control-grid',\n 'counter-template',\n 'cta-banner',\n 'dashboard-grid',\n 'dashboard-layout',\n 'data-grid',\n 'data-list',\n 'date-range-picker',\n 'date-range-selector',\n 'day-cell',\n 'detail-panel',\n 'dialog',\n 'dialogue-bubble',\n 'divider',\n 'doc-breadcrumb',\n 'doc-pagination',\n 'doc-search',\n 'doc-sidebar',\n 'doc-toc',\n 'document-viewer',\n 'draw-group',\n 'draw-shape',\n 'draw-shape-layer',\n 'draw-sprite',\n 'draw-sprite-layer',\n 'draw-text',\n 'draw-text-layer',\n 'drawer',\n 'drawer-slot',\n 'edge-decoration',\n 'emoji-picker',\n 'empty-state',\n 'entity-cards',\n 'entity-list',\n 'entity-table',\n 'error-boundary',\n 'error-state',\n 'feature-card',\n 'feature-detail-page-template',\n 'feature-grid',\n 'feature-grid-organism',\n 'file-tree',\n 'filter-group',\n 'filter-pill',\n 'flex',\n 'flip-card',\n 'flip-container',\n 'floating-action-button',\n 'form',\n 'form-actions',\n 'form-field',\n 'form-layout',\n 'form-section',\n 'form-section-header',\n 'game-audio-toggle',\n 'game-hud',\n 'game-icon',\n 'game-menu',\n 'game-shell',\n 'generic-app-template',\n 'geometric-pattern',\n 'gradient-divider',\n 'graph-canvas',\n 'graph-view',\n 'grid',\n 'header',\n 'health-bar',\n 'hero-organism',\n 'hero-section',\n 'hstack',\n 'icon',\n 'import-preview-tree',\n 'import-progress',\n 'import-source-picker',\n 'infinite-scroll-sentinel',\n 'input',\n 'input-group',\n 'install-box',\n 'jazari-state-machine',\n 'label',\n 'landing-page-template',\n 'law-reference-tooltip',\n 'learning-canvas',\n 'lightbox',\n 'likert-scale',\n 'line-chart',\n 'loading-state',\n 'map-view',\n 'markdown-content',\n 'marketing-footer',\n 'marketing-stat-card',\n 'master-detail',\n 'master-detail-layout',\n 'math-canvas',\n 'matrix-question',\n 'media-gallery',\n 'menu',\n 'meter',\n 'modal',\n 'modal-slot',\n 'module-card',\n 'navigation',\n 'notification',\n 'number-stepper',\n 'option-constraint-group',\n 'orbital-visualization',\n 'overlay',\n 'page-header',\n 'page-transition',\n 'pagination',\n 'pattern-tile',\n 'physics-canvas',\n 'popover',\n 'positioned-canvas',\n 'presence',\n 'pricing-card',\n 'pricing-grid',\n 'pricing-organism',\n 'pricing-page-template',\n 'progress-bar',\n 'progress-dots',\n 'pull-quote',\n 'pull-to-refresh',\n 'qr-scanner',\n 'quiz-block',\n 'radio',\n 'range-slider',\n 'reflection-block',\n 'relation-select',\n 'repeatable-form-section',\n 'reply-tree',\n 'rich-block-editor',\n 'runtime-debugger',\n 'scaled-diagram',\n 'score-display',\n 'search-input',\n 'section',\n 'section-header',\n 'segment-renderer',\n 'select',\n 'sequence-bar',\n 'service-catalog',\n 'showcase-card',\n 'showcase-organism',\n 'side-panel',\n 'sidebar',\n 'signature-pad',\n 'simple-grid',\n 'skeleton',\n 'social-proof',\n 'sortable-list',\n 'spacer',\n 'sparkline',\n 'spinner',\n 'split',\n 'split-pane',\n 'split-section',\n 'stack',\n 'star-rating',\n 'stat-badge',\n 'stat-card',\n 'stat-display',\n 'state-graph',\n 'state-json-view',\n 'state-machine-view',\n 'stats-grid',\n 'stats-organism',\n 'status-dot',\n 'step-flow',\n 'step-flow-organism',\n 'subagent-trace-panel',\n 'svg-branch',\n 'svg-connection',\n 'svg-flow',\n 'svg-grid',\n 'svg-lobe',\n 'svg-mesh',\n 'svg-morph',\n 'svg-node',\n 'svg-pulse',\n 'svg-ring',\n 'svg-shield',\n 'svg-stack',\n 'swipeable-row',\n 'switch',\n 'tabbed-container',\n 'table-view',\n 'tabs',\n 'tag-cloud',\n 'tag-input',\n 'team-card',\n 'team-organism',\n 'text-highlight',\n 'textarea',\n 'theme-toggle',\n 'time-slot-cell',\n 'timeline',\n 'timer-display',\n 'toast-slot',\n 'tooltip',\n 'trait-frame',\n 'trait-slot',\n 'trend-indicator',\n 'typewriter-text',\n 'typography',\n 'ui-slot-renderer',\n 'upload-drop-zone',\n 'version-diff',\n 'violation-alert',\n 'vote-stack',\n 'vstack',\n 'wizard-container',\n 'wizard-navigation',\n 'wizard-progress',\n];\n\n/**\n * Check if a string is a valid pattern type.\n */\nexport function isValidPatternType(type: string): type is PatternType {\n return PATTERN_TYPES.includes(type as PatternType);\n}\n","/**\n * Pattern Type for Orbital Units\n *\n * Re-exports pattern type definitions from @almadar/core/patterns,\n * which is the single source of truth for all pattern types.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Pattern Type - Re-exported from @almadar/core/patterns\n// ============================================================================\n\n/**\n * All valid pattern type names, imported from the @almadar/core/patterns registry.\n * The authoritative list is auto-generated from patterns-registry.json.\n */\nexport {\n PATTERN_TYPES,\n isValidPatternType,\n} from '../patterns/index.js';\nexport type { PatternType } from '../patterns/index.js';\n\n/**\n * Zod schema for pattern types.\n * Accepts any string - validation against full registry happens at runtime.\n */\nexport const PatternTypeSchema = z.string();\n","/**\n * Service Contract Types\n *\n * Formalizes the two public surfaces of an Almadar service:\n * 1. Call-Service Contract — what the .orb schema can invoke on the TypeScript package\n * 2. Event Contract — what events enter/leave the service\n *\n * Plus internal-but-standardized patterns:\n * 3. StoreContract — database abstraction boundary\n * 4. LazyService — singleton lifecycle pattern\n *\n * @packageDocumentation\n */\n\nimport type { EventPayload, EventPayloadValue, LogMeta } from './types/expression.js';\nimport type { ServiceParams } from './types/service.js';\n\n// ============================================================================\n// Service Action Names (generated from services-registry.json)\n// ============================================================================\n\n/**\n * All known service action names across all contracts.\n * Kept in sync with `tools/almadar-service-sync/services-registry.json`.\n *\n * Persist operations are listed separately because they also appear\n * as `EffectResult.action` for persist effects.\n */\nexport type PersistActionName =\n | \"create\"\n | \"update\"\n | \"delete\"\n | \"list\"\n | \"query\";\n\n/**\n * Union of all service action names across the registered service contracts.\n */\nexport type ServiceActionName =\n | PersistActionName\n // Data service\n | \"get\"\n | \"getById\"\n | \"set\"\n | \"remove\"\n | \"size\"\n // LLM\n | \"generate\"\n | \"classify\"\n | \"extract\"\n | \"summarize\"\n // Messaging\n | \"send\"\n | \"sendMessage\"\n | \"sendSMS\"\n | \"sendWhatsApp\"\n // Auth / Identity\n | \"authorize\"\n | \"revoke\"\n | \"token\"\n | \"refresh\"\n | \"userinfo\"\n | \"register\"\n // Git / VCS\n | \"cloneRepo\"\n | \"commit\"\n | \"createBranch\"\n | \"createPR\"\n | \"getPRComments\"\n | \"pull\"\n | \"push\"\n // CI / Build\n | \"build\"\n | \"compile\"\n | \"compileSchema\"\n | \"run\"\n | \"validate\"\n | \"validateSchema\"\n | \"publish\"\n // Queue / Jobs\n | \"enqueue\"\n | \"dequeue\"\n | \"cancel\"\n // Storage / Assets\n | \"upload\"\n | \"download\"\n | \"getSignedUrl\"\n // Search / Issues\n | \"search\"\n | \"getIssue\"\n | \"listIssues\"\n // Agent / Generation\n | \"generateAll\"\n | \"generateDomainLanguage\"\n | \"generateFix\"\n | \"generateOrbitals\"\n | \"cancelGeneration\"\n | \"getGenerationHistory\"\n | \"recordGeneration\"\n // Telemetry / Metrics\n | \"startSpan\"\n | \"endSpan\"\n | \"getSpan\"\n | \"recordMetric\"\n | \"getMetrics\"\n | \"increment\"\n | \"logs\"\n // Events / Channels\n | \"addEvent\"\n | \"emit\"\n | \"findEmitters\"\n | \"findListeners\"\n | \"getListenerCounts\"\n | \"getChannel\"\n | \"subscribe\"\n // User / Preferences\n | \"getUserPreferences\"\n | \"updateUserPreferences\"\n | \"getThreadHistory\"\n // Migration / Import\n | \"listDocuments\"\n | \"fetchDocument\"\n // Media\n | \"getVideo\"\n // Payments\n | \"createPaymentIntent\"\n | \"confirmPayment\"\n | \"refund\"\n // Lifecycle\n | \"complete\"\n | \"fail\"\n | \"expire\"\n | \"resume\"\n | \"status\"\n | \"stop\"\n | \"lock\"\n | \"unlock\"\n | \"clear\";\n\n// ============================================================================\n// Call-Service Contract\n// ============================================================================\n\n/**\n * Action definition for a service contract.\n *\n * - `params` is bus-payload-shaped (`ServiceParams`): JSON-serializable\n * key/value bag with optional nesting. Service contracts override this\n * with stricter shapes via the generic position on `ServiceContract`.\n *\n * - `result` is JSON-serializable too (`EventPayloadValue`): a primitive,\n * `null`/`undefined`, an array of values, or an `EventPayload` object.\n * This is the same recursive shape the bus accepts when an effect's\n * `success` event fires with the call-service result, so no boundary\n * widening is needed when the runtime forwards the value.\n */\nexport interface ServiceAction {\n params: ServiceParams;\n result: EventPayloadValue;\n}\n\n/**\n * What `[\"call-service\", \"name\", \"action\", {...}]` actually calls at runtime.\n * Each service defines its action map as a Record<string, ServiceAction>.\n *\n * @example\n * ```typescript\n * type LLMActions = {\n * generate: {\n * params: { userPrompt: string; model: string; maxTokens: number };\n * result: { content: string; tokensUsed: number; latencyMs: number };\n * };\n * };\n *\n * class LLMService implements ServiceContract<LLMActions> {\n * async execute(action, params) { ... }\n * }\n * ```\n */\nexport interface ServiceContract<\n Actions extends Record<string, ServiceAction>,\n> {\n execute<A extends keyof Actions & string>(\n action: A,\n params: Actions[A][\"params\"],\n ): Promise<Actions[A][\"result\"]>;\n}\n\n// ============================================================================\n// Event Contract\n// ============================================================================\n\n/**\n * Event contract — what events the service emits/listens with typed payloads.\n * Derived from the `.orb` schema's `emits` and `listens` declarations.\n *\n * @example\n * ```typescript\n * type LLMEventMap = {\n * AGENT_LLM_REQUEST: { requestId: string; prompt: string };\n * LLM_RESPONSE: { requestId: string; content: string; tokensUsed: number };\n * LLM_ERROR: { requestId: string; error: string };\n * };\n *\n * const events: ServiceEvents<LLMEventMap> = getEventBus();\n * events.emit('LLM_RESPONSE', { requestId: '1', content: '...', tokensUsed: 42 });\n * ```\n */\nexport interface ServiceEvents<\n EventMap extends Record<string, EventPayload>,\n> {\n emit<E extends keyof EventMap & string>(\n event: E,\n payload: EventMap[E],\n ): void;\n on<E extends keyof EventMap & string>(\n event: E,\n handler: (payload: EventMap[E]) => void,\n ): () => void;\n}\n\n/**\n * Create a typed view of an untyped EventBus. Wraps the raw EventBus\n * with compile-time type checking while keeping runtime behavior identical.\n *\n * @example\n * ```typescript\n * type LLMEventMap = {\n * LLM_RESPONSE: { requestId: string; content: string };\n * LLM_ERROR: { requestId: string; error: string };\n * };\n *\n * const typedBus = createTypedEventBus<LLMEventMap>(getServerEventBus());\n * typedBus.emit('LLM_RESPONSE', { requestId: '1', content: '...' }); // type-safe\n * typedBus.on('LLM_ERROR', (payload) => { payload.error; }); // payload is typed\n * ```\n */\n/**\n * Creates a typed event bus from an untyped bus implementation.\n * \n * This wrapper adds TypeScript type safety to event emission and listening.\n * The generic `EventMap` defines the shape of all events and their payloads.\n * \n * @template EventMap - Type mapping event names to their payload types\n * @param {Object} bus - Untyped event bus implementation\n * @param {Function} bus.emit - Function to emit events\n * @param {Function} bus.on - Function to listen to events\n * @returns {ServiceEvents<EventMap>} Typed event bus interface\n * \n * @example\n * interface MyEvents {\n * 'user.created': { id: string; name: string };\n * 'user.deleted': { id: string };\n * }\n * \n * const typedBus = createTypedEventBus<MyEvents>(rawBus);\n * typedBus.emit('user.created', { id: '123', name: 'Alice' });\n */\nexport function createTypedEventBus<\n EventMap extends Record<string, EventPayload>,\n>(bus: {\n emit(event: string, payload?: unknown, meta?: LogMeta): void;\n on(event: string, handler: (payload: unknown, meta?: LogMeta) => void): () => void;\n}): ServiceEvents<EventMap> {\n return {\n emit<E extends keyof EventMap & string>(event: E, payload: EventMap[E]): void {\n bus.emit(event, payload);\n },\n on<E extends keyof EventMap & string>(\n event: E,\n handler: (payload: EventMap[E]) => void,\n ): () => void {\n return bus.on(event, handler as (payload: unknown) => void);\n },\n };\n}\n\n// ============================================================================\n// Store Contract\n// ============================================================================\n\n/** Filter operator for store queries. */\nexport type StoreFilterOp =\n | \"==\"\n | \"!=\"\n | \"<\"\n | \"<=\"\n | \">\"\n | \">=\"\n | \"in\"\n | \"not-in\"\n | \"contains\";\n\n/** A single filter clause for store queries. */\nexport interface StoreFilter<T> {\n field: keyof T & string;\n op: StoreFilterOp;\n value: unknown;\n}\n\n/**\n * Database abstraction boundary. Services receive `StoreContract<T>`,\n * not raw database clients. Swappable per database engine.\n *\n * @example\n * ```typescript\n * interface LLMRequest { id: string; prompt: string; status: string }\n *\n * class FirestoreLLMRequestStore implements StoreContract<LLMRequest> {\n * async getById(id) { ... }\n * async create(data) { ... }\n * async update(id, data) { ... }\n * async delete(id) { ... }\n * async query(filters) { ... }\n * }\n * ```\n */\nexport interface StoreContract<T extends { id: string }> {\n getById(id: string): Promise<T | null>;\n create(data: Omit<T, \"id\">): Promise<T>;\n update(id: string, data: Partial<T>): Promise<T>;\n delete(id: string): Promise<void>;\n query(filters: StoreFilter<T>[]): Promise<T[]>;\n}\n\n// ============================================================================\n// Lazy Service (Singleton Pattern)\n// ============================================================================\n\n/**\n * Standardized singleton lifecycle. Replaces ad-hoc\n * `let x = null; export function getX()` patterns.\n *\n * @example\n * ```typescript\n * const llmClient = createLazyService(() => new LLMClient({ apiKey: process.env.LLM_KEY }));\n *\n * // In request handler:\n * const client = llmClient.get(); // created on first call, cached after\n *\n * // In test teardown:\n * llmClient.reset(); // next get() creates a fresh instance\n * ```\n */\nexport interface LazyService<T> {\n /** Get the singleton instance (creates on first call). */\n get(): T;\n /** Reset the singleton (next get() creates fresh). For test isolation. */\n reset(): void;\n}\n\n/**\n * Create a lazy singleton from a factory function.\n * \n * Creates a service that lazily initializes on first access and caches the instance.\n * Useful for expensive resources like database connections or API clients.\n * \n * @template T - The type of service to create\n * @param {() => T} factory - Factory function that creates the service instance\n * @returns {LazyService<T>} Lazy service with get() and reset() methods\n * \n * @example\n * const dbService = createLazyService(() => new DatabaseClient(config));\n * const db = dbService.get(); // Initializes on first call\n */\nexport function createLazyService<T>(factory: () => T): LazyService<T> {\n let instance: T | null = null;\n return {\n get(): T {\n if (instance === null) {\n instance = factory();\n }\n return instance;\n },\n reset(): void {\n instance = null;\n },\n };\n}\n","/**\n * Shared Intermediate Representation Types\n *\n * Unified IR types used by both the compiler and runtime.\n * This is the single source of truth for IR structures.\n *\n * @packageDocumentation\n */\n\nimport type { SExpr } from './expression.js';\nimport type { Entity, EntityRow, FieldValue } from './entity.js';\nimport type { JsonValue, RuntimeValue } from './json.js';\nimport type { ListenSource } from './trait.js';\nimport type { AnyPatternConfig } from '../patterns/index.js';\n\n// ============================================================================\n// Transition Types\n// ============================================================================\n\n/**\n * Transition source state specification.\n * - string: Single state name (e.g., 'Idle')\n * - '*': Wildcard - matches any current state\n * - string[]: Array of states - matches any of the listed states\n */\nexport type TransitionFrom = string | '*' | string[];\n\n// ============================================================================\n// Field Types\n// ============================================================================\n\nexport interface ResolvedField {\n name: string;\n type: string;\n tsType: string;\n description?: string;\n /** Field default — JSON-shaped, mirroring `EntityField.default`. */\n default?: JsonValue;\n required: boolean;\n /** Validation constraints carried from the schema (enum whitelist). */\n validation?: { enum?: string[] };\n /** Enum values for enum or constrained string fields */\n values?: string[];\n /** Enum values (alias for values, for compatibility) */\n enumValues?: string[];\n /** Relation configuration for foreign key references */\n relation?: {\n entity: string;\n cardinality?: string;\n field?: string;\n };\n}\n\n// ============================================================================\n// Entity Types\n// ============================================================================\n\nexport interface ResolvedEntity {\n name: string;\n description?: string;\n icon?: string;\n collection: string;\n fields: ResolvedField[];\n\n /** Whether this entity only exists in runtime (not persisted to Firestore) */\n runtime?: boolean;\n\n /** Whether this entity's state is shared across every bound trait (vs a per-trait copy). Orthogonal to `runtime`. */\n shared?: boolean;\n\n /** Whether this entity has pre-authored instances in the schema */\n hasInstances?: boolean;\n\n /** Pre-authored instances from the schema (seed data or static reference data) */\n instances?: EntityRow[];\n\n /** Default field values from schema (for spawning singletons) */\n defaults?: Record<string, FieldValue>;\n\n // Cross-references\n usedByTraits: string[];\n usedByPages: string[];\n}\n\nexport interface ResolvedEntityBinding {\n /** Binding name in code */\n name: string;\n\n /** Entity being bound */\n entity: ResolvedEntity;\n\n /** CRUD operations to generate */\n operations: ('list' | 'get' | 'create' | 'update' | 'delete')[];\n}\n\n// ============================================================================\n// Trait Types\n// ============================================================================\n\nexport interface ResolvedTraitState {\n name: string;\n isInitial: boolean;\n isFinal: boolean;\n}\n\nexport interface ResolvedTraitEvent {\n key: string;\n name: string;\n payload?: Record<string, string>;\n}\n\nexport interface ResolvedTraitTransition {\n /** Source state(s): string, '*' for wildcard, or array of states */\n from: TransitionFrom;\n to: string;\n event: string;\n guard?: SExpr;\n effects: SExpr[];\n}\n\nexport interface ResolvedTraitGuard {\n name: string;\n condition: SExpr;\n}\n\nexport interface ResolvedTraitTick {\n name: string;\n /**\n * `number` (ms), `'frame'`, a duration string (`'5s'`/`'1m'`/`'1h'`), or a\n * 5-field cron expression (`'0 9 * * *'`) — `schema-to-ir.ts`'s\n * `interval: tick.interval || 0` passes the source schema's raw\n * `string | number` straight through with no normalization, so this must\n * match that reality rather than the narrower `number | 'frame'` it used\n * to declare (which made every non-'frame' string an unchecked cast at\n * every consumer).\n */\n interval: number | string;\n guard?: SExpr;\n effects: SExpr[];\n priority: number;\n appliesTo: string[];\n}\n\nexport interface ResolvedTraitListener {\n event: string;\n triggers: string;\n guard?: SExpr;\n /** `with { ... }` payload rewrite: `{ targetField: SExpr }`, evaluated against the source payload. */\n payloadMapping?: Record<string, SExpr>;\n /** Source scoping (see `ListenSource` in types/trait). */\n source?: ListenSource;\n}\n\nexport interface ResolvedTraitDataEntity {\n name: string;\n fields: ResolvedField[];\n runtime: boolean;\n singleton: boolean;\n}\n\n/**\n * UI binding for interaction traits - maps states to presentations\n */\nexport interface ResolvedTraitUIBinding {\n [stateName: string]: {\n /** Presentation type: modal, drawer, popover, inline, confirm-dialog */\n presentation: string;\n /** Content pattern(s) to render */\n content: AnyPatternConfig | AnyPatternConfig[];\n /** Presentation props */\n props?: {\n size?: string;\n position?: string;\n title?: string;\n closable?: boolean;\n width?: string;\n showProgress?: boolean;\n step?: number;\n totalSteps?: number;\n };\n };\n}\n\n/**\n * Fully resolved trait - expanded from schema OR library.\n * The compiler generates code from this structure universally,\n * without knowing which specific trait it is.\n */\nexport interface ResolvedTrait {\n /** Unique trait identifier */\n name: string;\n\n /** Human-readable description */\n description?: string;\n\n /** Where this trait came from */\n source: 'schema' | 'library' | 'inline';\n\n /** Category for organizing traits */\n category?: 'lifecycle' | 'temporal' | 'validation' | 'notification' | 'integration' | 'interaction' | 'agent' |\n 'game-core' | 'game-character' | 'game-ai' | 'game-combat' | 'game-items' | 'game-cards' | 'game-board' | 'game-puzzle';\n\n // State Machine (all optional - not all traits have state machines)\n states: ResolvedTraitState[];\n events: ResolvedTraitEvent[];\n transitions: ResolvedTraitTransition[];\n guards: ResolvedTraitGuard[];\n\n // Behavior\n ticks: ResolvedTraitTick[];\n\n // Communication\n listens: ResolvedTraitListener[];\n\n // Data\n dataEntities: ResolvedTraitDataEntity[];\n\n /**\n * Atom-declared linked entity. The atom (e.g. std-pagination)\n * declares which entity its `@entity.X` bindings resolve against\n * (e.g. `PagedItem`). Distinct from the call-site rebind on\n * `ResolvedTraitBinding.linkedEntity`, which a molecule may use\n * to override the atom's default. Either side may be undefined\n * for traits that don't bind any entity (pure interaction).\n */\n linkedEntity?: string;\n\n /**\n * The trait's DECLARED `config { }` schema (per-field\n * `{ type, default? }`). Drives `@config.X` substitution: each\n * field's `default` seeds the binding context behind any caller-\n * supplied call-site `config: { ... }` override on the trait\n * reference. Authored on the atom; flows through verbatim from\n * `Trait.config`.\n *\n * (Caller-supplied call-site overrides live on the page-trait\n * binding's `config: TraitConfig` — see `ResolvedTraitBinding`.)\n */\n config?: import('./trait.js').DeclaredTraitConfig;\n\n // UI Bindings for interaction traits\n ui?: ResolvedTraitUIBinding;\n}\n\n/**\n * Trait binding on a page - links a resolved trait to the page\n */\nexport interface ResolvedTraitBinding {\n /** Reference name */\n ref?: string;\n\n /** Fully resolved trait */\n trait: ResolvedTrait;\n\n /** Entity this trait operates on (if any) */\n linkedEntity?: string;\n\n /** Instance configuration */\n config?: import('./trait.js').TraitConfig;\n}\n\n// ============================================================================\n// Pattern & Section Types\n// ============================================================================\n\nexport interface ResolvedPattern {\n /** Pattern type (e.g., 'page-header', 'entity-list', 'game-canvas') */\n type: string;\n\n /** Pattern configuration */\n config: AnyPatternConfig;\n\n /** Shell component to use */\n shellComponent?: string;\n}\n\nexport interface ResolvedSectionEvent {\n event: string;\n action: string;\n target?: string;\n}\n\nexport interface ResolvedSection {\n /** Section identifier */\n id: string;\n\n /** Resolved pattern */\n pattern: ResolvedPattern;\n\n /** Events emitted by this section */\n events: ResolvedSectionEvent[];\n\n /** Position in page layout */\n position?: number;\n\n /** Entity binding for this section */\n binding?: ResolvedEntityBinding;\n}\n\n// ============================================================================\n// Page Types\n// ============================================================================\n\nexport interface ResolvedNavigation {\n event?: string;\n from?: string;\n to: string;\n trigger?: string;\n params?: Record<string, string>;\n label?: string;\n path?: string;\n icon?: string;\n}\n\nexport interface ResolvedPage {\n /** Page identifier */\n name: string;\n\n /** URL path */\n path: string;\n\n /** Feature folder name */\n featureName: string;\n\n /** Layout component */\n layout?: string;\n\n /** View type (dashboard, list, detail, create, edit) */\n viewType?: 'dashboard' | 'list' | 'detail' | 'create' | 'edit';\n\n /** Resolved sections */\n sections: ResolvedSection[];\n\n /** Resolved trait bindings */\n traits: ResolvedTraitBinding[];\n\n /** Entity data bindings */\n entityBindings: ResolvedEntityBinding[];\n\n /** Navigation wiring */\n navigation: ResolvedNavigation[];\n\n /** Singleton entities to spawn on this page (runtime singletons) */\n singletonEntities: ResolvedEntity[];\n}\n\n// ============================================================================\n// IR Types\n// ============================================================================\n\n/**\n * Complete resolved IR - all references expanded\n */\nexport interface ResolvedIR {\n /** App name */\n appName: string;\n\n /** App description */\n description?: string;\n\n /** App version */\n version?: string;\n\n /** All resolved entities (Map for lookup) */\n entities: Map<string, ResolvedEntity>;\n\n /** All resolved traits (Map for lookup) */\n traits: Map<string, ResolvedTrait>;\n\n /** All resolved pages (Map for lookup) */\n pages: Map<string, ResolvedPage>;\n\n /** Entity bindings (used for data hook generation) */\n entityBindings: ResolvedEntityBinding[];\n\n /** Raw data entities (used for instance data generation) */\n rawEntities?: Entity[];\n\n /** Generation timestamp */\n generatedAt: string;\n}\n\n// ============================================================================\n// Factory Functions\n// ============================================================================\n\n/**\n * Create an empty resolved trait with defaults\n */\nexport function createEmptyResolvedTrait(name: string, source: 'schema' | 'library' | 'inline'): ResolvedTrait {\n return {\n name,\n source,\n states: [],\n events: [],\n transitions: [],\n guards: [],\n ticks: [],\n listens: [],\n dataEntities: [],\n };\n}\n\n/**\n * Create an empty resolved page with defaults\n */\nexport function createEmptyResolvedPage(name: string): ResolvedPage {\n return {\n name,\n path: `/${name.toLowerCase()}`,\n featureName: name.toLowerCase(),\n sections: [],\n traits: [],\n entityBindings: [],\n navigation: [],\n singletonEntities: [],\n };\n}\n\n/**\n * Infer TypeScript type from schema type\n */\nexport function inferTsType(schemaType: string): string {\n const typeMap: Record<string, string> = {\n string: 'string',\n number: 'number',\n boolean: 'boolean',\n date: 'Date',\n datetime: 'Date',\n timestamp: 'number',\n array: 'unknown[]',\n object: 'Record<string, unknown>',\n any: 'unknown',\n };\n\n // Handle array types like \"string[]\"\n if (schemaType.endsWith('[]')) {\n const baseType = schemaType.slice(0, -2);\n return `${typeMap[baseType] || baseType}[]`;\n }\n\n // Handle the typed-map form `Map<K,V>` (the orbital `Map K V` type) →\n // `Record<K, V>`. Mirrors the Rust `parse_payload_field_type` map branch so\n // TS-land type derivation agrees with codegen. Key is comma-free (split on\n // the first comma; value may itself be `Map<…>`).\n if (schemaType.startsWith('Map<') && schemaType.endsWith('>')) {\n const inner = schemaType.slice(4, -1);\n const comma = inner.indexOf(',');\n if (comma !== -1) {\n const key = inferTsType(inner.slice(0, comma).trim());\n const value = inferTsType(inner.slice(comma + 1).trim());\n return `Record<${key}, ${value}>`;\n }\n }\n\n return typeMap[schemaType] || schemaType;\n}\n\n/**\n * Create a resolved field with TypeScript type inference\n */\nexport function createResolvedField(field: {\n name: string;\n type: string;\n description?: string;\n default?: JsonValue;\n required?: boolean;\n validation?: { enum?: string[] };\n values?: string[];\n}): ResolvedField {\n return {\n name: field.name,\n type: field.type,\n tsType: inferTsType(field.type),\n description: field.description,\n default: field.default,\n required: field.required ?? false,\n validation: field.validation,\n values: field.values,\n };\n}\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\n/**\n * Type guard to check if an object is a ResolvedIR.\n * \n * Validates that an unknown value conforms to the ResolvedIR structure.\n * Checks for required properties and correct types. Used for runtime\n * type checking and validation.\n * \n * @param {unknown} ir - Value to check\n * @returns {boolean} True if value is ResolvedIR, false otherwise\n * \n * @example\n * if (isResolvedIR(schema)) {\n * // Type-safe access to ResolvedIR properties\n * console.log('Valid IR:', schema.appName);\n * }\n */\nexport function isResolvedIR(ir: RuntimeValue): ir is ResolvedIR {\n if (!ir || typeof ir !== 'object') return false;\n const r = ir as ResolvedIR;\n return typeof r.appName === 'string' && r.traits instanceof Map && r.pages instanceof Map;\n}\n","/**\n * Validation error types — the shape emitted by every\n * `.orb` / `.lolo` validator pass.\n *\n * `ValidationError` is the wire shape: `{ code, path, message, suggestion? }`.\n * `code` is `ValidationErrorCode`, which is an OPEN `string` to let the\n * Rust validator emit new codes without an `@almadar/core` rev. The\n * `KNOWN_VALIDATION_ERROR_CODES` const documents the codes currently\n * emitted by the validator + lolo lower pipeline (extracted from\n * `orbital-rust/crates/orbital-compiler/src/phases/validation/` +\n * `orbital-rust/crates/orbital-lolo/src/`).\n *\n * Consumers that want to narrow a code to the closed known set use\n * `KnownValidationErrorCode`:\n *\n * ```ts\n * if (err.code in KNOWN_VALIDATION_ERROR_CODES) {\n * // err.code is now narrowable to KnownValidationErrorCode for\n * // exhaustive switch handling.\n * }\n * ```\n *\n * @packageDocumentation\n */\n\n/**\n * One validation diagnostic emitted by the validator / lolo lower pipeline.\n *\n * - `code`: machine-readable identifier (see `KNOWN_VALIDATION_ERROR_CODES`).\n * - `path`: JSON pointer-like path into the failing schema location,\n * e.g. `'orbitals[0].traits[2].stateMachine.transitions[1].effects[0]'`.\n * - `message`: human-readable description of the failure.\n * - `suggestion`: optional hint the validator may add to help the\n * author / LLM fix the issue.\n */\nexport interface ValidationError {\n code: ValidationErrorCode;\n path: string;\n message: string;\n suggestion?: string;\n}\n\n/**\n * Validation error code — open `string` for forward-compat with the\n * Rust validator's evolving code set. Narrow to the closed known set\n * via `KnownValidationErrorCode` when exhaustive handling is needed.\n */\nexport type ValidationErrorCode = string;\n\n/**\n * The result of a single validator pass: a boolean verdict plus the errors\n * and warnings (the validator wire shape, `ValidationError`).\n *\n * Distinct from `ValidationResults` (app.ts): that is the Firestore-persisted\n * app-document shape keyed on `ValidationIssue` (with `severity` + array path\n * + `validatedAt`). This `ValidationResult` is the in-process pass result keyed\n * on `ValidationError` (code + JSON-pointer string path + `suggestion`).\n * `ok === true` iff there are zero errors AND zero warnings.\n */\nexport interface ValidationResult {\n ok: boolean;\n errors: ValidationError[];\n warnings: ValidationError[];\n}\n\n/**\n * Closed set of validation codes the Rust validator + lolo lower\n * pipeline currently emit. Source-tagged: codes are extracted from\n * `orbital-rust/crates/orbital-compiler/src/phases/validation/**.rs`\n * and `orbital-rust/crates/orbital-lolo/src/**.rs`. Keep this in sync\n * with the Rust side; mismatches are caught by the Rust validator's\n * own unit tests, which assert the emitted code-set matches an\n * exported manifest.\n *\n * Categories (prefix → meaning):\n * - `ORB_BINDING_*` — binding (`@entity.X`, `@payload.Y`, ...) issues\n * - `ORB_E_*` / `ORB_EFF_*` / `ORB_EMIT_*` — entity / effect / emit\n * - `ORB_GEN_*` — generic / cross-cutting structure\n * - `ORB_O_*` / `ORB_P_*` / `ORB_S_*` / `ORB_SM_*` / `ORB_T_*` —\n * orbital / page / schema / state-machine / trait\n * - `ORB_QUERY_*` — query / search behaviors\n * - `ORB_RUI_*` — render-UI binding + prop validation\n * - `ORB_SLOT_*` — UI-slot conflict / contention\n * - `ORB_SVC_*` / `ORB_UI_*` — service / UI primitives\n * - `ORB_X_*` — cross-orbital constraints (listens, emits, IDs)\n * - `ORB_ID_*` — V4 dual-carry id integrity (unknown ref, name/kind\n * mismatch, ledger orphan)\n */\nexport const KNOWN_VALIDATION_ERROR_CODES = {\n // Binding (`@entity.X`, `@payload.Y`, `@state.Z`, `@now`, ...)\n ORB_BINDING_ENTITY_FIELD_NEVER_SET: 'ORB_BINDING_ENTITY_FIELD_NEVER_SET',\n ORB_BINDING_ENTITY_FIELD_NOT_FOUND: 'ORB_BINDING_ENTITY_FIELD_NOT_FOUND',\n ORB_BINDING_INVALID_FIELD_NAME: 'ORB_BINDING_INVALID_FIELD_NAME',\n ORB_BINDING_INVALID_FORMAT: 'ORB_BINDING_INVALID_FORMAT',\n ORB_BINDING_INVALID_PATH: 'ORB_BINDING_INVALID_PATH',\n ORB_BINDING_NOW_NO_PATH: 'ORB_BINDING_NOW_NO_PATH',\n ORB_BINDING_PAYLOAD_FIELD_UNDECLARED: 'ORB_BINDING_PAYLOAD_FIELD_UNDECLARED',\n ORB_BINDING_PAYLOAD_IN_TICK: 'ORB_BINDING_PAYLOAD_IN_TICK',\n ORB_BINDING_PAYLOAD_TYPE_INCOMPATIBLE: 'ORB_BINDING_PAYLOAD_TYPE_INCOMPATIBLE',\n ORB_BINDING_SET_TARGET_MISSING_PATH: 'ORB_BINDING_SET_TARGET_MISSING_PATH',\n ORB_BINDING_STATE_NO_PATH: 'ORB_BINDING_STATE_NO_PATH',\n ORB_BINDING_TRAIT_CYCLE: 'ORB_BINDING_TRAIT_CYCLE',\n ORB_BINDING_TRAIT_INVALID_FORMAT: 'ORB_BINDING_TRAIT_INVALID_FORMAT',\n ORB_BINDING_TRAIT_INVALID_POSITION: 'ORB_BINDING_TRAIT_INVALID_POSITION',\n ORB_BINDING_TRAIT_MISSING_NAME: 'ORB_BINDING_TRAIT_MISSING_NAME',\n ORB_BINDING_TRAIT_SELF_REFERENCE: 'ORB_BINDING_TRAIT_SELF_REFERENCE',\n ORB_BINDING_TRAIT_UNKNOWN: 'ORB_BINDING_TRAIT_UNKNOWN',\n ORB_BINDING_UNKNOWN_ENTITY: 'ORB_BINDING_UNKNOWN_ENTITY',\n ORB_BINDING_UNKNOWN_ROOT: 'ORB_BINDING_UNKNOWN_ROOT',\n\n // Entity / field\n ORB_E_DUPLICATE_FIELD: 'ORB_E_DUPLICATE_FIELD',\n ORB_E_EMPTY_ENUM_VALUES: 'ORB_E_EMPTY_ENUM_VALUES',\n ORB_E_INVALID_FIELD_NAME: 'ORB_E_INVALID_FIELD_NAME',\n ORB_E_INVALID_FIELD_TYPE: 'ORB_E_INVALID_FIELD_TYPE',\n ORB_E_INVALID_RELATION: 'ORB_E_INVALID_RELATION',\n ORB_E_LITERAL_UNION_DEFAULT_MISMATCH: 'ORB_E_LITERAL_UNION_DEFAULT_MISMATCH',\n ORB_E_MISSING_COLLECTION: 'ORB_E_MISSING_COLLECTION',\n ORB_E_MISSING_NAME: 'ORB_E_MISSING_NAME',\n ORB_E_NO_FIELDS: 'ORB_E_NO_FIELDS',\n\n // Effect / emit\n ORB_EFF_CALL_SERVICE_MISSING_ACTION: 'ORB_EFF_CALL_SERVICE_MISSING_ACTION',\n ORB_EFF_CALL_SERVICE_MISSING_HANDLERS: 'ORB_EFF_CALL_SERVICE_MISSING_HANDLERS',\n ORB_EFF_CALL_SERVICE_MISSING_SERVICE: 'ORB_EFF_CALL_SERVICE_MISSING_SERVICE',\n ORB_EFF_EMIT_INVALID_NAME: 'ORB_EFF_EMIT_INVALID_NAME',\n ORB_EFF_EMIT_KEY_INVALID: 'ORB_EFF_EMIT_KEY_INVALID',\n ORB_EFF_EMIT_UNDECLARED_EVENT: 'ORB_EFF_EMIT_UNDECLARED_EVENT',\n ORB_EFF_FETCH_INVALID_ENTITY: 'ORB_EFF_FETCH_INVALID_ENTITY',\n ORB_EFF_FETCH_INVALID_INCLUDE: 'ORB_EFF_FETCH_INVALID_INCLUDE',\n ORB_EFF_MISSING_FETCH_FOR_ENTITY: 'ORB_EFF_MISSING_FETCH_FOR_ENTITY',\n ORB_EFF_MISSING_REQUIRED_EMIT: 'ORB_EFF_MISSING_REQUIRED_EMIT',\n ORB_EFF_NAVIGATE_MISSING_PAYLOAD: 'ORB_EFF_NAVIGATE_MISSING_PAYLOAD',\n ORB_EFF_NAVIGATE_TARGET_UNREACHABLE: 'ORB_EFF_NAVIGATE_TARGET_UNREACHABLE',\n ORB_EFF_SET_INVALID_BINDING: 'ORB_EFF_SET_INVALID_BINDING',\n ORB_EFF_SET_PAYLOAD_NOT_ALLOWED: 'ORB_EFF_SET_PAYLOAD_NOT_ALLOWED',\n ORB_EFF_SLOT_CONFLICT: 'ORB_EFF_SLOT_CONFLICT',\n ORB_EFF_UNKNOWN_TYPE: 'ORB_EFF_UNKNOWN_TYPE',\n ORB_EMIT_DECLARED_BUT_UNFIRED: 'ORB_EMIT_DECLARED_BUT_UNFIRED',\n ORB_EMIT_PAYLOAD_EXTRA_FIELD: 'ORB_EMIT_PAYLOAD_EXTRA_FIELD',\n ORB_EMIT_PAYLOAD_FIELD_TYPE_MISMATCH: 'ORB_EMIT_PAYLOAD_FIELD_TYPE_MISMATCH',\n ORB_EMIT_PAYLOAD_MISSING_REQUIRED: 'ORB_EMIT_PAYLOAD_MISSING_REQUIRED',\n ORB_EMIT_SUCCESS_PAYLOAD_RETURN_MISMATCH: 'ORB_EMIT_SUCCESS_PAYLOAD_RETURN_MISMATCH',\n\n // Generic / cross-cutting structure\n ORB_GEN_DUPLICATE: 'ORB_GEN_DUPLICATE',\n ORB_GEN_INVALID_REFERENCE: 'ORB_GEN_INVALID_REFERENCE',\n ORB_GEN_INVALID_VALUE: 'ORB_GEN_INVALID_VALUE',\n ORB_GEN_MISSING_FIELD: 'ORB_GEN_MISSING_FIELD',\n\n // Orbital\n ORB_O_MISSING_PAGES: 'ORB_O_MISSING_PAGES',\n\n // Page\n ORB_P_DUPLICATE_PATH: 'ORB_P_DUPLICATE_PATH',\n ORB_P_EMPTY_TRAITS: 'ORB_P_EMPTY_TRAITS',\n ORB_P_INVALID_PATH: 'ORB_P_INVALID_PATH',\n ORB_P_INVALID_TRAIT_REF: 'ORB_P_INVALID_TRAIT_REF',\n ORB_P_INVALID_VIEW_TYPE: 'ORB_P_INVALID_VIEW_TYPE',\n ORB_P_MISSING_NAME: 'ORB_P_MISSING_NAME',\n ORB_P_MISSING_PATH: 'ORB_P_MISSING_PATH',\n ORB_P_MISSING_TRAITS: 'ORB_P_MISSING_TRAITS',\n ORB_P_SECTIONS_FORBIDDEN: 'ORB_P_SECTIONS_FORBIDDEN',\n\n // Query / search behaviors\n ORB_QUERY_MISSING_RECOMMENDED: 'ORB_QUERY_MISSING_RECOMMENDED',\n ORB_QUERY_MISSING_SEARCH: 'ORB_QUERY_MISSING_SEARCH',\n ORB_QUERY_UNKNOWN_SINGLETON: 'ORB_QUERY_UNKNOWN_SINGLETON',\n ORB_QUERY_UNSUPPORTED_PATTERN: 'ORB_QUERY_UNSUPPORTED_PATTERN',\n ORB_QUERY_UNUSED_SINGLETON: 'ORB_QUERY_UNUSED_SINGLETON',\n\n // Render-UI binding + prop validation\n ORB_RUI_BINDING_TYPE_MISMATCH: 'ORB_RUI_BINDING_TYPE_MISMATCH',\n ORB_RUI_ELEMENT_SHAPE_MISMATCH: 'ORB_RUI_ELEMENT_SHAPE_MISMATCH',\n ORB_RUI_EVENT_BINDING_PAYLOAD_MISMATCH: 'ORB_RUI_EVENT_BINDING_PAYLOAD_MISMATCH',\n ORB_RUI_INVALID_FIELD_PATH: 'ORB_RUI_INVALID_FIELD_PATH',\n ORB_RUI_INVALID_ITEM_ACTION: 'ORB_RUI_INVALID_ITEM_ACTION',\n ORB_RUI_INVALID_PATTERN: 'ORB_RUI_INVALID_PATTERN',\n ORB_RUI_INVALID_PROP: 'ORB_RUI_INVALID_PROP',\n ORB_RUI_INVALID_SLOT: 'ORB_RUI_INVALID_SLOT',\n ORB_RUI_MISSING_ACTION: 'ORB_RUI_MISSING_ACTION',\n ORB_RUI_MISSING_PATTERN_TYPE: 'ORB_RUI_MISSING_PATTERN_TYPE',\n ORB_RUI_MISSING_REQUIRED_PROP: 'ORB_RUI_MISSING_REQUIRED_PROP',\n ORB_RUI_PROP_TYPE_MISMATCH: 'ORB_RUI_PROP_TYPE_MISMATCH',\n ORB_RUI_UNKNOWN_ITEM_ACTION_PROP: 'ORB_RUI_UNKNOWN_ITEM_ACTION_PROP',\n\n // Schema-level\n ORB_S_EMPTY_VERSION: 'ORB_S_EMPTY_VERSION',\n ORB_S_MISSING_NAME: 'ORB_S_MISSING_NAME',\n ORB_S_NO_ORBITALS: 'ORB_S_NO_ORBITALS',\n\n // UI slots\n ORB_SLOT_CONTENTION: 'ORB_SLOT_CONTENTION',\n ORB_SLOT_CONTENTION_RUNTIME: 'ORB_SLOT_CONTENTION_RUNTIME',\n ORB_SLOT_HUD_NON_GAME: 'ORB_SLOT_HUD_NON_GAME',\n ORB_SLOT_INVALID_NAME: 'ORB_SLOT_INVALID_NAME',\n ORB_SLOT_INVALID_NESTING: 'ORB_SLOT_INVALID_NESTING',\n ORB_SLOT_MAIN_NOT_COVERED: 'ORB_SLOT_MAIN_NOT_COVERED',\n ORB_SLOT_PRIORITY_CONFLICT: 'ORB_SLOT_PRIORITY_CONFLICT',\n\n // Service\n ORB_SVC_DUPLICATE_NAME: 'ORB_SVC_DUPLICATE_NAME',\n ORB_SVC_INVALID_INTEGRATOR: 'ORB_SVC_INVALID_INTEGRATOR',\n ORB_SVC_INVALID_URL: 'ORB_SVC_INVALID_URL',\n ORB_SVC_MISSING_BASE_URL: 'ORB_SVC_MISSING_BASE_URL',\n ORB_SVC_MISSING_CAPABILITIES: 'ORB_SVC_MISSING_CAPABILITIES',\n ORB_SVC_MISSING_EVENTS: 'ORB_SVC_MISSING_EVENTS',\n ORB_SVC_MISSING_SERVER_PATH: 'ORB_SVC_MISSING_SERVER_PATH',\n ORB_SVC_RESERVED_EVENT: 'ORB_SVC_RESERVED_EVENT',\n ORB_SVC_UNKNOWN_TYPE: 'ORB_SVC_UNKNOWN_TYPE',\n\n // Trait\n ORB_T_CONFIG_OBJECT_ARRAY_FORBIDDEN: 'ORB_T_CONFIG_OBJECT_ARRAY_FORBIDDEN',\n ORB_T_CONFIG_SHAPE_MISMATCH: 'ORB_T_CONFIG_SHAPE_MISMATCH',\n ORB_T_CONFIG_TIER_INVALID: 'ORB_T_CONFIG_TIER_INVALID',\n ORB_T_DEPRECATED_UI: 'ORB_T_DEPRECATED_UI',\n ORB_T_DUPLICATE_NAME: 'ORB_T_DUPLICATE_NAME',\n ORB_T_DUPLICATE_STATE: 'ORB_T_DUPLICATE_STATE',\n ORB_T_DUPLICATE_TRANSITION: 'ORB_T_DUPLICATE_TRANSITION',\n ORB_T_ENTITY_NAME_SHADOWS_TRAIT_UNION: 'ORB_T_ENTITY_NAME_SHADOWS_TRAIT_UNION',\n ORB_T_EVENT_TYPE_WRONG_KIND: 'ORB_T_EVENT_TYPE_WRONG_KIND',\n ORB_T_EVT_DUPLICATE: 'ORB_T_EVT_DUPLICATE',\n ORB_T_EVT_EXTERNAL_MISSING_PAYLOAD: 'ORB_T_EVT_EXTERNAL_MISSING_PAYLOAD',\n ORB_T_EVT_INVALID_NAME: 'ORB_T_EVT_INVALID_NAME',\n ORB_T_EVT_SCOPE_MISMATCH: 'ORB_T_EVT_SCOPE_MISMATCH',\n ORB_T_EVT_TICK_UNDECLARED: 'ORB_T_EVT_TICK_UNDECLARED',\n ORB_T_EVT_UNDECLARED: 'ORB_T_EVT_UNDECLARED',\n ORB_T_INIT_MISSING_FETCH: 'ORB_T_INIT_MISSING_FETCH',\n ORB_T_INVALID_CATEGORY: 'ORB_T_INVALID_CATEGORY',\n ORB_T_INVALID_FORMAT: 'ORB_T_INVALID_FORMAT',\n ORB_T_INVALID_PATTERN_DEFAULT: 'ORB_T_INVALID_PATTERN_DEFAULT',\n ORB_T_INVALID_SLOT_DEFAULT: 'ORB_T_INVALID_SLOT_DEFAULT',\n ORB_T_INVALID_TRANSITION: 'ORB_T_INVALID_TRANSITION',\n ORB_T_MISSING_INIT_TRANSITION: 'ORB_T_MISSING_INIT_TRANSITION',\n ORB_T_MISSING_RENDER_UI: 'ORB_T_MISSING_RENDER_UI',\n ORB_T_MULTIPLE_INITIAL_STATES: 'ORB_T_MULTIPLE_INITIAL_STATES',\n ORB_T_NO_INITIAL_STATE: 'ORB_T_NO_INITIAL_STATE',\n ORB_T_TYPE_ANNOTATION_MISMATCH: 'ORB_T_TYPE_ANNOTATION_MISMATCH',\n ORB_T_TYPE_COMPOSITION_CONFLICT: 'ORB_T_TYPE_COMPOSITION_CONFLICT',\n ORB_T_TYPE_CYCLE: 'ORB_T_TYPE_CYCLE',\n ORB_T_TYPE_KIND_MISMATCH: 'ORB_T_TYPE_KIND_MISMATCH',\n ORB_T_TYPE_UNKNOWN: 'ORB_T_TYPE_UNKNOWN',\n ORB_T_TYPE_UNKNOWN_PARAM: 'ORB_T_TYPE_UNKNOWN_PARAM',\n ORB_T_TYPE_WRONG_ARG_COUNT: 'ORB_T_TYPE_WRONG_ARG_COUNT',\n ORB_T_UNDEFINED_EVENT: 'ORB_T_UNDEFINED_EVENT',\n ORB_T_UNDEFINED_TRAIT: 'ORB_T_UNDEFINED_TRAIT',\n\n // UI primitives (icons, etc.)\n ORB_UI_ICON_EMPTY: 'ORB_UI_ICON_EMPTY',\n ORB_UI_ICON_INVALID_FORMAT: 'ORB_UI_ICON_INVALID_FORMAT',\n ORB_UI_ICON_NOT_FOUND: 'ORB_UI_ICON_NOT_FOUND',\n\n // Cross-orbital constraints (listens, emits, IDs, payloads)\n ORB_X_CIRCULAR_DEPENDENCY: 'ORB_X_CIRCULAR_DEPENDENCY',\n ORB_X_CROSS_EMITTER_DECLARED_PAYLOAD_MISMATCH: 'ORB_X_CROSS_EMITTER_DECLARED_PAYLOAD_MISMATCH',\n ORB_X_DUPLICATE_ENTITY: 'ORB_X_DUPLICATE_ENTITY',\n ORB_X_EVENT_COLLISION: 'ORB_X_EVENT_COLLISION',\n ORB_X_INTERNAL_EVENT_EXPOSED: 'ORB_X_INTERNAL_EVENT_EXPOSED',\n ORB_X_LISTEN_SOURCE_UNRESOLVED: 'ORB_X_LISTEN_SOURCE_UNRESOLVED',\n ORB_X_MISSING_ORBITAL_NAME: 'ORB_X_MISSING_ORBITAL_NAME',\n ORB_X_ORPHAN_LISTENER: 'ORB_X_ORPHAN_LISTENER',\n ORB_X_PAYLOAD_MISMATCH: 'ORB_X_PAYLOAD_MISMATCH',\n ORB_X_RENDER_UI_EVENT_LITERAL_STALE: 'ORB_X_RENDER_UI_EVENT_LITERAL_STALE',\n ORB_X_UNRESOLVED_PATTERN_FIELD_REF: 'ORB_X_UNRESOLVED_PATTERN_FIELD_REF',\n ORB_X_UNUSED_EMISSION: 'ORB_X_UNUSED_EMISSION',\n\n // Identity — V4 dual-carry id integrity (`ORB_ID_*`). Mirrors\n // `orbital-compiler/src/phases/validation/id_integrity.rs`.\n ORB_ID_UNKNOWN_REF: 'ORB_ID_UNKNOWN_REF',\n ORB_ID_NAME_MISMATCH: 'ORB_ID_NAME_MISMATCH',\n ORB_ID_KIND_MISMATCH: 'ORB_ID_KIND_MISMATCH',\n ORB_ID_LEDGER_ORPHAN: 'ORB_ID_LEDGER_ORPHAN',\n} as const;\n\n/**\n * Narrow union of the codes documented in `KNOWN_VALIDATION_ERROR_CODES`.\n * Use this in exhaustive `switch` handlers; use the broader\n * `ValidationErrorCode` (open `string`) anywhere a fresh validator-side\n * code could plausibly arrive.\n */\nexport type KnownValidationErrorCode =\n typeof KNOWN_VALIDATION_ERROR_CODES[keyof typeof KNOWN_VALIDATION_ERROR_CODES];\n\n/**\n * Type guard: is the given code a known one? After the guard returns\n * true, the code can be narrowed to `KnownValidationErrorCode` via a\n * separate cast, because the type system can't track `in` against\n * `as const` records without an explicit narrowing helper.\n */\nexport function isKnownValidationErrorCode(\n code: ValidationErrorCode,\n): boolean {\n return code in KNOWN_VALIDATION_ERROR_CODES;\n}\n","/**\n * Living Orbital Schema — Golden Data Structure type system.\n *\n * The Living layer treats an `OrbitalSchema` as a heterogeneous attributed\n * graph: every vertex (orbital, entity, trait, state, transition, page, field,\n * event, effect, config-knob) carries a `SemanticAnnotation` + an embedding\n * vector, and the whole object can embed / validate / compile / similarity-\n * search / evolve itself. These are the canonical TYPE definitions shared by\n * the masar (Python) implementation and any TS implementation (rabit, Phase 5);\n * the numeric implementation lives outside @almadar/core.\n *\n * See `docs/Almadar_Masar_Golden_Data_Structure.md` §II/§III/§VIII. Existing\n * core vocabulary is reused, never re-defined: `SchemaChange`/`SemanticChangeKind`\n * (changeset.ts) back the evolution delta, `ValidationError`/`ValidationResult`\n * (validation.ts) back `validate()`, and the per-vertex payloads ARE the existing\n * structural types.\n *\n * @packageDocumentation\n */\n\nimport type { OrbitalSchema } from \"./schema.js\";\nimport type { OrbitalDefinition } from \"./orbital.js\";\nimport type { Entity } from \"./entity.js\";\nimport type { EntityField } from \"./field.js\";\nimport type { Trait, TraitConfigValue, ConfigFieldDeclaration } from \"./trait.js\";\nimport type { State, Transition, Event } from \"./state-machine.js\";\nimport type { Page } from \"./page.js\";\nimport type { Effect } from \"./effect.js\";\nimport type { SExpr, EvalContext, EventPayload } from \"./expression.js\";\nimport type { SchemaChange } from \"./changeset.js\";\nimport type { ValidationError, ValidationResult } from \"./validation.js\";\n// Type-only import (erased at build): no runtime cycle even though factory/\n// imports from types/. `AnnotationTier` is the documented superset of this.\nimport type { FactoryConfigTier } from \"../factory/types.js\";\n\n// ============================================================================\n// Semantic annotation (the NL → typed bridge)\n// ============================================================================\n\n/**\n * Decision-kind tier for the annotation layer. SUPERSET of the validator-\n * enforced `FactoryConfigTier` (`domain`/`policy`/`infra`/`presentation`/\n * `internal`), adding `essential` and `customization` for non-knob (event)\n * vertices that still carry the old vocabulary. Every `FactoryConfigTier`\n * value must be a member so `widenTier` stays a valid identity widen.\n */\nexport type AnnotationTier =\n | \"essential\"\n | \"domain\"\n | \"policy\"\n | \"infra\"\n | \"presentation\"\n | \"customization\"\n | \"internal\";\n\n/** Widen a knob's `FactoryConfigTier` into the annotation-layer `AnnotationTier`. */\nexport function widenTier(tier: FactoryConfigTier): AnnotationTier {\n return tier;\n}\n\n/**\n * The natural-language metadata attached to every living vertex — the text that\n * gets embedded for `similar()`/`match_intent()`. Today these four members live\n * scattered inline across core types (`EntityField.description`/`synonyms`,\n * `Event`/`TraitEventContract`.`description`/`synonyms`/`tier`,\n * `FactoryConfigParam.label`/`description`/`synonyms`/`tier`); `SemanticAnnotation`\n * is the uniform bundle of them, generalized to every vertex.\n */\nexport interface SemanticAnnotation {\n description: string;\n synonyms: string[];\n label: string;\n tier: AnnotationTier;\n}\n\n// ============================================================================\n// ML scalar/vector aliases\n// ============================================================================\n\n/**\n * A dense semantic embedding. In-memory form is `Float32Array`; the at-rest\n * JSON form (e.g. rabit's `knob-embeddings.json`) is `number[]`.\n */\nexport type SemanticVector = Float32Array;\n\n/** A probability in `[0, 1]`. */\nexport type Probability = number;\n\n/** Whether a semantic gate's transition is open, closed, or ~0.5 ambiguous. */\nexport type GateState = \"open\" | \"closed\" | \"ambiguous\";\n\n// ============================================================================\n// Graph vertex / edge typing\n// ============================================================================\n\n/** The typed vertex kinds of the living attributed graph (§II.1 `V_*`). */\nexport type VertexType =\n | \"orbital\"\n | \"entity\"\n | \"trait\"\n | \"state\"\n | \"transition\"\n | \"page\"\n | \"field\"\n | \"event\"\n | \"effect\"\n | \"value\";\n\n/**\n * A stable, structural, embedding-independent vertex id (path style, e.g.\n * `orb:Cart/trt:AddItem/st:Open`). Re-embedding never changes it.\n */\nexport type VertexId = string;\n\n/** The typed directed edge kinds of the living attributed graph (§II.1 `E_*`). */\nexport type EdgeType =\n | \"belongs_to\"\n | \"has_trait\"\n | \"has_state\"\n | \"has_transition\"\n | \"from_state\"\n | \"to_state\"\n | \"on_event\"\n | \"emits\"\n | \"listens\"\n | \"cross_orbital\"\n | \"has_effect\"\n | \"effect_seq\"\n | \"data_flow\"\n | \"ref_in_effect\"\n | \"has_page\"\n | \"has_field\"\n | \"ref\";\n\n/**\n * An effect vertex's payload. Effects are positional S-expression tuples\n * (`Effect`), so the synthesized coordinates (operator, owning transition,\n * positional index) carry the addressing the raw tuple lacks.\n */\nexport interface EffectPayload {\n sexpr: Effect;\n operator: string;\n transitionId: VertexId;\n index: number;\n}\n\n/**\n * A config-knob vertex's payload — joins a `Trait.config` dict key with its\n * declaration (no single core type carries both).\n */\nexport interface KnobPayload {\n name: string;\n declaration: ConfigFieldDeclaration;\n traitId: VertexId;\n}\n\n/** The union of every kind of vertex payload (the existing structural types). */\nexport type VertexPayload =\n | OrbitalDefinition\n | Entity\n | Trait\n | State\n | Transition\n | Page\n | EntityField\n | Event\n | EffectPayload\n | KnobPayload;\n\n/**\n * One vertex of the living graph: a structural payload plus its annotation and\n * embedding. Identity is `id` (structural); annotation/embedding are derived.\n */\nexport interface LivingVertex<P extends VertexPayload = VertexPayload> {\n id: VertexId;\n vtype: VertexType;\n payload: P;\n annotation: SemanticAnnotation;\n /** Lazily populated — undefined until the schema's `embed()` runs. */\n embedding?: SemanticVector;\n}\n\nexport type LivingOrbital = LivingVertex<OrbitalDefinition>;\nexport type LivingEntity = LivingVertex<Entity>;\nexport type LivingTrait = LivingVertex<Trait>;\nexport type LivingState = LivingVertex<State>;\nexport type LivingTransition = LivingVertex<Transition>;\nexport type LivingPage = LivingVertex<Page>;\nexport type LivingField = LivingVertex<EntityField>;\nexport type LivingEvent = LivingVertex<Event>;\nexport type LivingEffect = LivingVertex<EffectPayload>;\nexport type LivingValue = LivingVertex<KnobPayload>;\n\n/**\n * One directed edge. `via` carries the transition vertex for the ternary\n * `has_transition(from, via, to)` decomposition; `seq` carries the ordering for\n * `effect_seq`.\n */\nexport interface LivingEdge {\n etype: EdgeType;\n src: VertexId;\n dst: VertexId;\n via?: VertexId;\n seq?: number;\n}\n\n// ============================================================================\n// Evolution + lineage (composes changeset.ts vocabulary)\n// ============================================================================\n\n/**\n * A single evolution step over the living graph. `modified` reuses the canonical\n * `SchemaChange` (changeset.ts) rather than inventing a parallel operation enum;\n * `intent` is the natural-language delta that caused the change.\n */\nexport interface EvolutionDelta {\n added: VertexId[];\n removed: VertexId[];\n modified: SchemaChange[];\n intent: string;\n}\n\n/** One immutable entry in a living schema's evolution lineage (§6.2). */\nexport interface LineageEntry {\n root: string;\n parent: string;\n delta: EvolutionDelta;\n intent: string;\n time: number;\n valid: boolean;\n}\n\n// ============================================================================\n// Effect-simulation results\n// ============================================================================\n\n/** The result of simulating one effect's S-expression (§4.6) — pure, no I/O. */\nexport interface EffectResult {\n result: SExpr;\n sideEffects: string[];\n emittedEvents: string[];\n}\n\n// ============================================================================\n// The living schema contract (§VIII) — implemented by masar (Python) + rabit (TS)\n// ============================================================================\n\n/**\n * The operation surface of a living orbital schema. This interface is the shared\n * CONTRACT; the numeric implementation (embedding, cosine, validator shelling)\n * is language-specific. `compile()` is the bridge back to the canonical\n * `OrbitalSchema` (the ML surface — annotations beyond `description`, embeddings,\n * gates — is stripped).\n */\nexport interface LivingOrbitalSchema {\n // Orbital container\n orbitals: LivingOrbital[];\n addOrbital(name: string): LivingOrbital;\n removeOrbital(name: string): void;\n getOrbital(name: string): LivingOrbital;\n\n // Semantic layer\n annotations: Map<VertexId, SemanticAnnotation>;\n embeddings: Map<VertexId, SemanticVector>;\n\n // Structural operations\n embed(): void;\n compile(): OrbitalSchema;\n validate(): ValidationResult;\n\n // Semantic retrieval\n similar(query: string | SemanticVector, k: number, type?: VertexType): LivingVertex[];\n matchIntent(intent: string, threshold?: number): { vertex: LivingVertex; score: number }[];\n\n // Predictive operations\n predictConfig(intent: string, trait: Trait): Record<string, TraitConfigValue>;\n predictPresence(intent: string): Set<string>;\n suggestOrbital(intent: string): LivingOrbital[];\n suggestEntity(intent: string): LivingEntity[];\n suggestTrait(intent: string): LivingTrait[];\n\n // Evolution\n evolve(intentDelta: string): LivingOrbitalSchema;\n compose(other: LivingOrbitalSchema): LivingOrbitalSchema;\n repair(errors: ValidationError[]): LivingOrbitalSchema;\n\n // Cross-orbital wiring\n wireEvents(source: LivingEvent, target: LivingEvent): void;\n findWiringGaps(): LivingEvent[];\n\n // Effect simulation\n simulateEffect(effect: LivingEffect, context: EvalContext): EffectResult;\n simulateInteraction(effect: LivingEffect, path: string[]): { event: LivingEvent; payload: EventPayload };\n traceDataFlow(transition: LivingTransition, inputEntity: LivingEntity): LivingEffect[];\n\n // Gates\n evaluateGates(intentEmbedding: SemanticVector): Map<VertexId, GateState[]>;\n sampleTrajectory(intentEmbedding: SemanticVector, steps: number): LivingVertex[];\n\n // Lineage\n lineage: LineageEntry[];\n checkout(hash: string): LivingOrbitalSchema;\n diff(hash1: string, hash2: string): EvolutionDelta;\n}\n"]}
1
+ {"version":3,"sources":["../../src/types/identity.ts","../../src/types/json.ts","../../src/types/field.ts","../../src/types/asset.ts","../../src/types/expression.ts","../../src/types/entity.ts","../../src/types/effect.ts","../../src/types/state-machine.ts","../../src/types/trait.ts","../../src/types/page.ts","../../src/types/domain.ts","../../src/types/service.ts","../../src/types/orbital.ts","../../src/types/schema.ts","../../src/types/bindings.ts","../../src/types/binding.ts","../../src/types/user.ts","../../src/types/agent.ts","../../src/types/plan.ts","../../src/types/interaction-model.ts","../../src/patterns/pattern-types.ts","../../src/types/pattern.ts","../../src/service-types.ts","../../src/types/ir.ts","../../src/types/validation.ts","../../src/types/living.ts"],"names":["z","ref"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Identity model (Almadar Rabit V4, Phase 1 — types only).\n *\n * Branded, prefix-tagged node ids + a workspace-scoped name ledger. Ids are\n * the durable edge keys of the identity-keyed schema graph; the ledger is the\n * sole name↔id map (names are display labels, one row per rename). This module\n * is pure: no I/O, no side effects. Minting is the only impurity (clock +\n * crypto randomness for the ULID suffix).\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Branded id types\n// ============================================================================\n\ntype Branded<K extends string> = string & { readonly __idBrand: K };\n\nexport type OrbitalId = Branded<'OrbitalId'>;\nexport type EntityId = Branded<'EntityId'>;\nexport type TraitId = Branded<'TraitId'>;\nexport type EventId = Branded<'EventId'>;\nexport type PageId = Branded<'PageId'>;\nexport type ServiceId = Branded<'ServiceId'>;\nexport type ThemeId = Branded<'ThemeId'>;\nexport type PaletteEntryId = Branded<'PaletteEntryId'>;\n\n/** Node kind ↔ id-prefix table. The single source of truth for every prefix. */\nconst ID_PREFIXES = {\n orbital: 'orb_',\n entity: 'ent_',\n trait: 'trt_',\n event: 'evt_',\n page: 'pag_',\n service: 'svc_',\n theme: 'thm_',\n palette: 'pal_',\n} as const;\n\nexport type IdKind = keyof typeof ID_PREFIXES;\n\n/** Compile-time map from kind to its branded id type. */\nexport interface IdForKind {\n orbital: OrbitalId;\n entity: EntityId;\n trait: TraitId;\n event: EventId;\n page: PageId;\n service: ServiceId;\n theme: ThemeId;\n palette: PaletteEntryId;\n}\n\n/**\n * The one controlled brand assertion in this module. A prefix-checked string\n * is asserted into its branded form here and nowhere else.\n */\nfunction brand<Id extends string>(value: string): Id {\n return value as Id;\n}\n\n// ============================================================================\n// Kind guards + constructors (one shared factory, eight kinds)\n// ============================================================================\n\ninterface IdKindApi<Id extends string> {\n readonly prefix: string;\n is(value: string): value is Id;\n as(value: string): Id;\n}\n\nfunction makeIdKind<Id extends string>(kind: IdKind): IdKindApi<Id> {\n const prefix = ID_PREFIXES[kind];\n const is = (value: string): value is Id =>\n value.startsWith(prefix) && value.length > prefix.length;\n const as = (value: string): Id => {\n if (!is(value)) {\n throw new Error(\n `Expected ${kind} id (prefix \"${prefix}\"), got: ${JSON.stringify(value)}`,\n );\n }\n return brand<Id>(value);\n };\n return { prefix, is, as };\n}\n\nconst orbitalKind = makeIdKind<OrbitalId>('orbital');\nconst entityKind = makeIdKind<EntityId>('entity');\nconst traitKind = makeIdKind<TraitId>('trait');\nconst eventKind = makeIdKind<EventId>('event');\nconst pageKind = makeIdKind<PageId>('page');\nconst serviceKind = makeIdKind<ServiceId>('service');\nconst themeKind = makeIdKind<ThemeId>('theme');\nconst paletteKind = makeIdKind<PaletteEntryId>('palette');\n\nexport const isOrbitalId = orbitalKind.is;\nexport const asOrbitalId = orbitalKind.as;\nexport const isEntityId = entityKind.is;\nexport const asEntityId = entityKind.as;\nexport const isTraitId = traitKind.is;\nexport const asTraitId = traitKind.as;\nexport const isEventId = eventKind.is;\nexport const asEventId = eventKind.as;\nexport const isPageId = pageKind.is;\nexport const asPageId = pageKind.as;\nexport const isServiceId = serviceKind.is;\nexport const asServiceId = serviceKind.as;\nexport const isThemeId = themeKind.is;\nexport const asThemeId = themeKind.as;\nexport const isPaletteEntryId = paletteKind.is;\nexport const asPaletteEntryId = paletteKind.as;\n\n/**\n * The id-prefix for a node kind (`'entity' → 'ent_'`). The JS mirror of the\n * Rust `IdKind::prefix`. Single source of truth is {@link ID_PREFIXES}.\n */\nexport function idPrefix(kind: IdKind): string {\n return ID_PREFIXES[kind];\n}\n\n/**\n * The node kind an id's prefix denotes, or `null` for an unrecognized /\n * bare-prefix string. The JS mirror of the Rust `id_kind_of`. Prefixes are\n * mutually non-overlapping, so match order is irrelevant.\n */\nexport function idKindOf(id: string): IdKind | null {\n for (const kind of Object.keys(ID_PREFIXES) as IdKind[]) {\n const prefix = ID_PREFIXES[kind];\n if (id.startsWith(prefix) && id.length > prefix.length) return kind;\n }\n return null;\n}\n\n// ============================================================================\n// Minting — prefix + ULID\n// ============================================================================\n\nconst CROCKFORD = '0123456789ABCDEFGHJKMNPQRSTVWXYZ';\nconst TIME_LEN = 10;\nconst RANDOM_LEN = 16;\n\nfunction randomBytes(len: number): Uint8Array {\n const g = globalThis as { crypto?: { getRandomValues?: (a: Uint8Array) => Uint8Array } };\n if (g.crypto?.getRandomValues) {\n return g.crypto.getRandomValues(new Uint8Array(len));\n }\n throw new Error('mintId: no crypto.getRandomValues available in this runtime');\n}\n\nfunction encodeTime(now: number): string {\n let value = now;\n let out = '';\n for (let i = 0; i < TIME_LEN; i++) {\n const mod = value % 32;\n out = CROCKFORD[mod] + out;\n value = (value - mod) / 32;\n }\n return out;\n}\n\nfunction encodeRandom(): string {\n const bytes = randomBytes(RANDOM_LEN);\n let out = '';\n for (let i = 0; i < RANDOM_LEN; i++) {\n out += CROCKFORD[bytes[i] & 31];\n }\n return out;\n}\n\n/** A 26-char Crockford-base32 ULID: 48-bit ms timestamp + 80 bits of randomness. */\nfunction ulid(): string {\n return encodeTime(Date.now()) + encodeRandom();\n}\n\n/** Mint a fresh, opaque, kind-tagged id: `<prefix><ULID>`. */\nexport function mintId<K extends IdKind>(kind: K): IdForKind[K] {\n return brand<IdForKind[K]>(ID_PREFIXES[kind] + ulid());\n}\n\n// ============================================================================\n// Identity ledger\n// ============================================================================\n\n/** Ledger row kind. `palette` entries are manifest ids, not name-ledger rows. */\nexport type LedgerKind =\n | 'orbital'\n | 'entity'\n | 'trait'\n | 'event'\n | 'page'\n | 'service'\n | 'theme';\n\n/**\n * One ledger row: the workspace's name history for a single node id.\n *\n * For kind `'event'` the row is minted per-(trait, declared event) per the\n * Phase-0 freeze — the owning trait is recorded in `parent`; a call-site event\n * rename is a one-row edit on this same id (the baked-vs-current key namespaces\n * collapse into `bakedName` vs `curName`).\n */\nexport interface LedgerEntry {\n id: string;\n kind: LedgerKind;\n bakedName: string;\n curName: string;\n renames: ReadonlyArray<{ from: string; to: string; at: string }>;\n owner: 'std' | 'io' | 'workspace';\n /** Owning trait for kind `'event'` (per-trait event-id namespace). */\n parent?: TraitId;\n}\n\nexport interface IdentityLedger {\n schemaVersion: 1;\n entries: Record<string, LedgerEntry>;\n}\n\n/** Resolve a name to its id via exact `curName` match within `kind`, else null. */\nexport function ledgerResolveName(\n ledger: IdentityLedger,\n kind: LedgerKind,\n name: string,\n): string | null {\n for (const [id, entry] of Object.entries(ledger.entries)) {\n if (entry.kind === kind && entry.curName === name) return id;\n }\n return null;\n}\n\n/** Immutable rename: returns a new ledger with the id's `curName` + `renames` updated. */\nexport function ledgerRename(\n ledger: IdentityLedger,\n id: string,\n to: string,\n at: string,\n): IdentityLedger {\n const entry = ledger.entries[id];\n if (entry === undefined) return ledger;\n const updated: LedgerEntry = {\n ...entry,\n curName: to,\n renames: [...entry.renames, { from: entry.curName, to, at }],\n };\n return { ...ledger, entries: { ...ledger.entries, [id]: updated } };\n}\n\n/** Current display name for an id, or null when the id is not in the ledger. */\nexport function ledgerCurName(ledger: IdentityLedger, id: string): string | null {\n return ledger.entries[id]?.curName ?? null;\n}\n\n// ============================================================================\n// Zod schemas — the `.orb` load-time activation surface (Rabit V4, Phase 4)\n// ============================================================================\n\n/**\n * Prefix-checked, kind-tagged id schemas. Each narrows a validated string to\n * its branded id type via the module's own kind guard, so a schema that reads\n * `TraitIdSchema.optional()` yields `TraitId | undefined` with no cast. The\n * guard is the single source of prefix truth (`ID_PREFIXES`); the schema is a\n * thin zod wrapper over it.\n */\nexport const OrbitalIdSchema = z\n .string()\n .refine(isOrbitalId, { message: `Expected an orbital id (prefix \"${ID_PREFIXES.orbital}\")` });\nexport const EntityIdSchema = z\n .string()\n .refine(isEntityId, { message: `Expected an entity id (prefix \"${ID_PREFIXES.entity}\")` });\nexport const TraitIdSchema = z\n .string()\n .refine(isTraitId, { message: `Expected a trait id (prefix \"${ID_PREFIXES.trait}\")` });\nexport const EventIdSchema = z\n .string()\n .refine(isEventId, { message: `Expected an event id (prefix \"${ID_PREFIXES.event}\")` });\nexport const PageIdSchema = z\n .string()\n .refine(isPageId, { message: `Expected a page id (prefix \"${ID_PREFIXES.page}\")` });\nexport const ServiceIdSchema = z\n .string()\n .refine(isServiceId, { message: `Expected a service id (prefix \"${ID_PREFIXES.service}\")` });\nexport const ThemeIdSchema = z\n .string()\n .refine(isThemeId, { message: `Expected a theme id (prefix \"${ID_PREFIXES.theme}\")` });\nexport const PaletteEntryIdSchema = z\n .string()\n .refine(isPaletteEntryId, { message: `Expected a palette-entry id (prefix \"${ID_PREFIXES.palette}\")` });\n\nexport const LedgerKindSchema = z.enum([\n 'orbital',\n 'entity',\n 'trait',\n 'event',\n 'page',\n 'service',\n 'theme',\n]);\n\nexport const LedgerEntrySchema = z.object({\n id: z.string(),\n kind: LedgerKindSchema,\n bakedName: z.string(),\n curName: z.string(),\n renames: z.array(\n z.object({ from: z.string(), to: z.string(), at: z.string() }),\n ),\n owner: z.enum(['std', 'io', 'workspace']),\n parent: TraitIdSchema.optional(),\n});\n\nexport const IdentityLedgerSchema = z.object({\n schemaVersion: z.literal(1),\n entries: z.record(LedgerEntrySchema),\n});\n","/**\n * JSON primitives — the universal \"data crossed a boundary\" type.\n *\n * Every value that arrives over the wire from an LLM (tool-call args),\n * from disk (workspace files), or from an HTTP body before\n * domain-specific validation is a `JsonValue`. Narrow with a typed\n * predicate (`is`-guard) at the boundary; don't widen back to `unknown`.\n *\n * `JsonObject` and `ToolArgs` are aliases for the common\n * `Record<string, JsonValue>` shape. `ToolArgs` is the name the\n * agent surface uses for LLM-emitted tool-call arguments; `JsonObject`\n * is the general-purpose alias. They are the same type — the alias\n * exists so call sites read at the right semantic level.\n *\n * Why not `Record<string, unknown>`? Two reasons. (1) `unknown` widens\n * back to anything, which defeats the purpose of typing the boundary.\n * (2) The `@almadar/eslint-plugin/no-record-string-unknown` rule blocks\n * the wider form — `JsonValue`-based records are the typed answer.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n/**\n * Recursive JSON value union — every shape JSON can carry.\n */\nexport type JsonValue =\n | string\n | number\n | boolean\n | null\n | JsonValue[]\n | { [key: string]: JsonValue };\n\n/**\n * JSON object — keyed string→JsonValue. The wire form of arbitrary\n * structured data. Replaces `Record<string, unknown>` at typed\n * boundaries (LLM emits, file reads, HTTP bodies).\n */\nexport type JsonObject = { [key: string]: JsonValue };\n\n/** Zod schema for JsonValue — the one boundary validator for parsed-JSON slots. */\nexport const JsonValueSchema: z.ZodType<JsonValue> = z.lazy(() =>\n z.union([z.string(), z.number(), z.boolean(), z.null(), z.array(JsonValueSchema), z.record(JsonValueSchema)]),\n);\n\n/**\n * LLM tool-call arguments — same shape as `JsonObject`, named for the\n * agent-surface call site. Each tool's `execute(args: ToolArgs)`\n * receives this and narrows via an `is`-guard predicate before any\n * field access.\n */\nexport type ToolArgs = JsonObject;\n\n/**\n * Universal type-guard input — every runtime value shape a predicate can\n * be handed, enumerated instead of `unknown` (the repo bans `unknown`\n * even at guard boundaries). Primitives cover every `typeof` result;\n * `object` covers arrays, records, class instances, and functions.\n */\nexport type RuntimeValue =\n | string\n | number\n | bigint\n | boolean\n | symbol\n | Date\n | null\n | undefined\n | object;\n\n/**\n * Type guard: is the given value a JSON primitive (non-array,\n * non-object)? Used by walkers that decide whether to recurse.\n */\nexport function isJsonPrimitive(\n value: JsonValue,\n): value is string | number | boolean | null {\n return (\n value === null\n || typeof value === 'string'\n || typeof value === 'number'\n || typeof value === 'boolean'\n );\n}\n\n/**\n * Type guard: is the given value a JSON object (non-array, non-null)?\n */\nexport function isJsonObject(value: JsonValue): value is JsonObject {\n return (\n value !== null\n && typeof value === 'object'\n && !Array.isArray(value)\n );\n}\n\n/**\n * Type guard: is the given value a JSON array?\n */\nexport function isJsonArray(value: JsonValue): value is JsonValue[] {\n return Array.isArray(value);\n}\n","/**\n * Field Types for Orbital Units\n *\n * Extracted from schema/data-entities.ts for the orbitals module.\n * These types define the field structure within orbital entities.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\nimport type { EntityId } from './identity.js';\nimport { EntityIdSchema } from './identity.js';\nimport type { JsonValue, RuntimeValue } from './json.js';\nimport { JsonValueSchema } from './json.js';\n\n// ============================================================================\n// Field Types\n// ============================================================================\n\n/**\n * Supported field types for entity fields.\n *\n * @example\n * { name: 'status', type: 'enum', values: ['draft', 'published'] }\n * { name: 'authorId', type: 'relation', relation: { entity: 'User', cardinality: 'one' } }\n */\nexport type FieldType =\n | 'string'\n | 'number'\n | 'boolean'\n | 'date'\n | 'timestamp'\n | 'datetime'\n // Semantic string domains. `.lolo` already types `date`/`datetime` rather\n // than annotating them, so these belong in the type system for the same\n // reason: a field's domain is a declared fact, not a decoration. They\n // replaced the optional `format` property, which had zero producers.\n | 'email'\n | 'url'\n | 'phone'\n | 'uuid'\n | 'image'\n | 'array'\n | 'object'\n | 'enum'\n | 'relation'\n | 'trait'\n | 'slot'\n | 'pattern';\n\n/** Every `FieldType`, as a runtime array. Downstream imports this instead of\n * re-listing the union — five copies had already drifted apart. */\nexport const FIELD_TYPES = [\n 'string',\n 'number',\n 'boolean',\n 'date',\n 'timestamp',\n 'datetime',\n 'email',\n 'url',\n 'phone',\n 'uuid',\n 'image',\n 'array',\n 'object',\n 'enum',\n 'relation',\n 'trait',\n 'slot',\n 'pattern',\n] as const satisfies readonly FieldType[];\n\n/** The semantic string domains — constrained strings, validatable by value. */\nexport const SEMANTIC_STRING_TYPES = ['email', 'url', 'phone', 'uuid', 'image'] as const;\n\nexport type SemanticStringType = (typeof SEMANTIC_STRING_TYPES)[number];\n\n/** Is this a semantic string domain (as opposed to a bare `string`)? */\nexport function isSemanticStringType(type: FieldType): type is SemanticStringType {\n return (SEMANTIC_STRING_TYPES as readonly string[]).includes(type);\n}\n\nexport const FieldTypeSchema = z.enum(FIELD_TYPES);\n\n// ============================================================================\n// Relation Configuration\n// ============================================================================\n\n/**\n * Cardinality for relation fields.\n * Matches Rust compiler's Cardinality enum.\n */\nexport type RelationCardinality = \n | 'one' \n | 'many' \n | 'one-to-many' \n | 'many-to-one' \n | 'many-to-many';\n\nexport const RelationCardinalitySchema = z.enum([\n 'one',\n 'many',\n 'one-to-many',\n 'many-to-one',\n 'many-to-many',\n]);\n\n/**\n * Configuration for relation fields (foreign keys).\n * Matches Rust compiler's RelationDefinition format.\n */\nexport type RelationConfig = {\n /** Target entity name (e.g., 'User', 'Task') - matches Rust's `entity` field */\n entity: string;\n /** V4 dual-carry id sibling of `entity` — optional until the Phase-7 flip. */\n entityId?: EntityId;\n /** Field on target entity (defaults to 'id') */\n field?: string;\n /** \n * Cardinality: one, many, one-to-many, many-to-one, many-to-many\n * Matches Rust compiler's cardinality format\n */\n cardinality?: RelationCardinality;\n /** Delete behavior */\n onDelete?: 'cascade' | 'nullify' | 'restrict';\n /** \n * Foreign key field name (for legacy compatibility).\n * @deprecated Use field instead\n */\n foreignKey?: string;\n /**\n * Target entity name (for legacy compatibility).\n * @deprecated Use entity instead\n */\n target?: string;\n /**\n * Cardinality type alias (for legacy compatibility).\n * @deprecated Use cardinality instead\n */\n type?: RelationCardinality;\n};\n\nexport const RelationConfigSchema = z.object({\n entity: z.string().min(1, 'Target entity is required'),\n entityId: EntityIdSchema.optional(),\n field: z.string().optional(),\n cardinality: RelationCardinalitySchema.optional(),\n onDelete: z.enum(['cascade', 'nullify', 'restrict']).optional(),\n // Legacy compatibility fields\n foreignKey: z.string().optional(),\n target: z.string().optional(),\n type: RelationCardinalitySchema.optional(),\n}).transform((data) => {\n // Normalize legacy format to standard format\n const normalized: RelationConfig = {\n entity: data.entity || data.target || '',\n entityId: data.entityId,\n cardinality: data.cardinality || data.type,\n field: data.field,\n onDelete: data.onDelete,\n };\n return normalized;\n});\n\nexport type RelationConfigInput = z.input<typeof RelationConfigSchema>;\n\n// ============================================================================\n// Field Format\n// ============================================================================\n\n/**\n * Value rules for the semantic string domains — one owner, so the seeders, the\n * validators and the verifiers cannot drift apart on what counts as valid.\n *\n * These replaced the old optional `format` property, which had zero producers\n * anywhere in the repo and no Rust counterpart at all: `format` was unreachable\n * from `.lolo`, so every consumer fell back to guessing from field names.\n */\nconst EMAIL_RE = /^[^\\s@]+@[^\\s@.]+\\.[^\\s@]+$/;\nconst URL_RE = /^https?:\\/\\/[^\\s]+$/;\nconst PHONE_RE = /^[+]?[\\d\\s().-]{7,}$/;\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nexport function isEmailValue(value: string): boolean {\n return EMAIL_RE.test(value);\n}\n\nexport function isUrlValue(value: string): boolean {\n return URL_RE.test(value);\n}\n\nexport function isPhoneValue(value: string): boolean {\n return PHONE_RE.test(value);\n}\n\nexport function isUuidValue(value: string): boolean {\n return UUID_RE.test(value);\n}\n\n/** Does `value` satisfy the declared semantic domain? `image` is a URL. */\nexport function isSemanticStringValue(type: SemanticStringType, value: string): boolean {\n switch (type) {\n case 'email':\n return isEmailValue(value);\n case 'url':\n case 'image':\n return isUrlValue(value);\n case 'phone':\n return isPhoneValue(value);\n case 'uuid':\n return isUuidValue(value);\n }\n}\n\n// ============================================================================\n// Entity Field — discriminated union by `type`\n// ============================================================================\n\n/**\n * Field-type tags that don't carry a type-dependent payload. The base\n * `EntityField` shape applies as-is.\n */\ntype ScalarFieldType =\n | 'string'\n | 'number'\n | 'boolean'\n | 'date'\n | 'timestamp'\n | 'datetime'\n | 'email'\n | 'url'\n | 'phone'\n | 'uuid'\n | 'image'\n | 'trait'\n | 'slot'\n | 'pattern';\n\n/** Fields shared across every variant. */\ntype EntityFieldBase = {\n /**\n * Field name (camelCase). Optional for nested item/property descriptors\n * where the name is implied by the parent (`items`, `properties[k]`).\n * Mirrors Rust's `FieldDefinition.name: Option<String>`.\n */\n name?: string;\n /** Whether the field is required */\n required?: boolean;\n /** Default value — parsed from `.orb`, always JSON-shaped. */\n default?: JsonValue;\n /** Minimum value (for number) or length (for string) */\n min?: number;\n /** Maximum value or length */\n max?: number;\n /** Object property schemas keyed by property name (for object type).\n * Mirrors Rust's `FieldDefinition.properties: Option<HashMap<String,\n * FieldDefinition>>`. Populated by the lolo lowerer when a field /\n * config slot's type expression resolves to a struct shape\n * (`TypeExpr::Object`), including named-type aliases like `[MetricSpec]`. */\n properties?: Record<string, EntityField>;\n /** Runtime-managed widget state (authored `@intrinsic` in `.lolo`). Exempt\n * from the explicit-binding rule and never a domain-data bind target. */\n intrinsic?: boolean;\n /** Human/semantic description (authored `@description \"...\"` in `.lolo`).\n * Authoring/build-time metadata — factory-signature catalog, embeddings,\n * curation field-matching; the runtime ignores it. */\n description?: string;\n /** User-vocabulary synonyms (authored `@synonyms \"...\"` in `.lolo`).\n * Free text feeding catalog search / curation field-matching. */\n synonyms?: string;\n};\n\n/**\n * Scalar / structural fields — no type-dependent payload required.\n * `values?` is permitted as an OPTIONAL UI/validation hint (e.g. lolo's\n * `'a' | 'b' | 'c'` string-union sugar lowers to `type: 'string', values:\n * [...]`). Only `EnumEntityField` MANDATES values.\n */\nexport type ScalarEntityField = EntityFieldBase & {\n type: ScalarFieldType;\n /** Optional vocabulary hint for scalar fields (e.g. string unions\n * authored as `'a'|'b'|'c'` in lolo). Not required at this variant. */\n values?: string[];\n};\n\n/** `type: 'enum'` REQUIRES the closed vocabulary in `values`. */\nexport type EnumEntityField = EntityFieldBase & {\n type: 'enum';\n /** Closed string vocabulary the field accepts. */\n values: string[];\n};\n\n/** `type: 'relation'` REQUIRES the relation target binding. */\nexport type RelationEntityField = EntityFieldBase & {\n type: 'relation';\n /** Relation target binding (entity + cardinality). */\n relation: RelationConfig;\n};\n\n/** `type: 'array'` — element schema in `items` strongly preferred but\n * optional for legacy compatibility with codegen-emitted scalar-array\n * fields (e.g. `{type: 'array', default: []}`). The lolo lowerer + Rust\n * validator catch typed-element-required cases downstream. */\nexport type ArrayEntityField = EntityFieldBase & {\n type: 'array';\n /** Element schema for the array. */\n items?: EntityField;\n};\n\n/**\n * `type: 'object'` — a fixed-key struct (fields in `properties`) OR a\n * dynamic-key map (`Map K V` in `.lolo`; the uniform value schema lives in\n * `items`, mirroring an array's element schema). A distinct variant so `items`\n * is statically allowed only on object/array fields, never on scalars.\n */\nexport type ObjectEntityField = EntityFieldBase & {\n type: 'object';\n /** Uniform value schema for a dynamic-key map (`Map K V`). */\n items?: EntityField;\n};\n\n/**\n * Entity field definition — discriminated union by `type`. Each variant\n * statically enforces its dependent payload (`values` for enum,\n * `relation` for relation, `items` for array) so TS / Zod / JSON Schema\n * consumers all agree on the dependency, not just the Rust validator.\n *\n * @example\n * { name: 'status', type: 'enum', values: ['draft', 'published'] }\n * { name: 'authorId', type: 'relation', relation: { entity: 'User', cardinality: 'one' } }\n * { name: 'tags', type: 'array', items: { type: 'string' } }\n */\nexport type EntityField =\n | ScalarEntityField\n | EnumEntityField\n | RelationEntityField\n | ArrayEntityField\n | ObjectEntityField;\n\n/**\n * Alias map for legacy/loose field-type spellings. Preprocessed into the\n * canonical `FieldType` enum before zod validates. Without this, agent-produced\n * schemas using `text`/`int`/`float`/`ts` were rejected at parse time — this\n * normalizes them so the rest of the pipeline sees only canonical types.\n */\nconst FIELD_TYPE_ALIASES: Record<string, FieldType> = {\n text: 'string',\n int: 'number',\n float: 'number',\n ts: 'timestamp',\n};\n\n/**\n * Zod schema for `EntityField`. Preprocess normalizes:\n * - legacy `type` aliases (text → string, int → number, etc.)\n * - legacy `enum: string[]` alias → `values: string[]`\n *\n * Branches on `type` so TS narrows the parsed output to the matching\n * discriminated-union variant.\n */\n// The third type param stays `unknown`: zod v3 bakes `unknown` into\n// `z.preprocess`'s input type, and the recursion needs the explicit annotation.\nexport const EntityFieldSchema: z.ZodType<EntityField, z.ZodTypeDef, unknown> = z.lazy(() => {\n const baseFieldShape = {\n name: z.string().min(1, 'Field name is required').optional(),\n required: z.boolean().optional(),\n default: JsonValueSchema.optional(),\n min: z.number().optional(),\n max: z.number().optional(),\n properties: z.record(EntityFieldSchema).optional(),\n intrinsic: z.boolean().optional(),\n description: z.string().optional(),\n synonyms: z.string().optional(),\n };\n\n /** Build a scalar variant schema. `values?` is permitted as a hint;\n * only the enum variant mandates a non-empty values array. */\n function scalarVariant<T extends ScalarFieldType>(t: T) {\n return z.object({\n ...baseFieldShape,\n type: z.literal(t),\n values: z.array(z.string()).optional(),\n });\n }\n\n return z.preprocess(\n (input) => {\n if (\n input === null ||\n typeof input !== 'object' ||\n !('type' in input) ||\n typeof (input as { type?: RuntimeValue }).type !== 'string'\n ) {\n return input;\n }\n const obj = input as { type: string; enum?: RuntimeValue; values?: RuntimeValue };\n const next: { type: string; enum?: RuntimeValue; values?: RuntimeValue } = { ...obj };\n const aliased = FIELD_TYPE_ALIASES[obj.type];\n if (aliased !== undefined) next.type = aliased;\n // Fold legacy `enum: string[]` into `values: string[]`.\n if (next.enum !== undefined && next.values === undefined) {\n next.values = next.enum;\n }\n delete next.enum;\n return next;\n },\n z.discriminatedUnion('type', [\n scalarVariant('string'),\n scalarVariant('number'),\n scalarVariant('boolean'),\n scalarVariant('date'),\n scalarVariant('timestamp'),\n scalarVariant('datetime'),\n scalarVariant('email'),\n scalarVariant('url'),\n scalarVariant('phone'),\n scalarVariant('uuid'),\n scalarVariant('image'),\n scalarVariant('trait'),\n scalarVariant('slot'),\n scalarVariant('pattern'),\n // Enum variant — REQUIRES non-empty values.\n z.object({\n ...baseFieldShape,\n type: z.literal('enum'),\n values: z.array(z.string()).min(1, 'Enum field requires a non-empty `values` array'),\n }),\n // Relation variant — REQUIRES relation config.\n z.object({\n ...baseFieldShape,\n type: z.literal('relation'),\n relation: RelationConfigSchema,\n }),\n // Array variant — items optional to match relaxed TS shape.\n z.object({\n ...baseFieldShape,\n type: z.literal('array'),\n items: EntityFieldSchema.optional(),\n }),\n // Object variant — fixed-key struct (`properties`) or dynamic-key\n // map (`Map K V`, uniform value schema in `items`).\n z.object({\n ...baseFieldShape,\n type: z.literal('object'),\n items: EntityFieldSchema.optional(),\n values: z.array(z.string()).optional(),\n }),\n ]),\n );\n});\n\nexport type EntityFieldInput = z.input<typeof EntityFieldSchema>;\n\n// ============================================================================\n// Type Aliases (for cleaner imports)\n// ============================================================================\n\n/** Alias for EntityField - preferred name */\nexport type Field = EntityField;\n\n/** Alias for EntityFieldSchema - preferred name */\nexport const FieldSchema = EntityFieldSchema;\n","/**\n * Asset Types for Semantic Asset References\n *\n * Defines types for abstracting asset paths into semantic references.\n * Assets are resolved from SemanticAssetRef to actual paths at compile time.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Entity Roles\n// ============================================================================\n\n/**\n * Entity roles in game contexts\n */\nexport const ENTITY_ROLES = [\n 'player',\n 'enemy',\n 'npc',\n 'item',\n 'tile',\n 'projectile',\n 'effect',\n 'ui',\n 'decoration',\n 'vehicle',\n] as const;\n\nexport type EntityRole = (typeof ENTITY_ROLES)[number];\n\nexport const EntityRoleSchema = z.enum(ENTITY_ROLES);\n\n// ============================================================================\n// Visual Styles\n// ============================================================================\n\n/**\n * Visual art styles for games\n */\nexport const VISUAL_STYLES = ['pixel', 'vector', 'hd', '1-bit', 'isometric'] as const;\n\nexport type VisualStyle = (typeof VISUAL_STYLES)[number];\n\nexport const VisualStyleSchema = z.enum(VISUAL_STYLES);\n\n// ============================================================================\n// Asset Dimension + Aspect (render metadata carried with the asset / the need)\n// ============================================================================\n\n/**\n * Whether the asset is a 2D sprite/image or a 3D model. Set by the consuming\n * canvas: the same entity role is a 2D sprite-sheet on a tile board and a 3D\n * rigged model on a 3D board.\n */\nexport const ASSET_DIMENSIONS = ['2d', '3d'] as const;\n\nexport type AssetDimension = (typeof ASSET_DIMENSIONS)[number];\n\nexport const AssetDimensionSchema = z.enum(ASSET_DIMENSIONS);\n\n/**\n * Rendering aspect ratio of an asset: square (tiles/sprites/portraits/icons),\n * 16:9 (scene backdrops), 5:7 (cards), 8:1 (effect frame strips).\n */\nexport const ASSET_ASPECTS = ['1:1', '16:9', '5:7', '8:1'] as const;\n\nexport type AssetAspect = (typeof ASSET_ASPECTS)[number];\n\nexport const AssetAspectSchema = z.enum(ASSET_ASPECTS);\n\n// ============================================================================\n// Animation Name + Sheet Direction\n// ============================================================================\n\n/**\n * Animation names matching a sprite sheet's row layout. Canonical home for\n * this vocabulary — `@almadar/ui`'s `spriteAnimationTypes.ts` re-exports it\n * rather than redeclaring, so board `.lolo` config and the render library\n * agree on one enum.\n */\nexport const ANIMATION_NAMES = ['idle', 'walk', 'attack', 'hit', 'death'] as const;\n\nexport type AnimationName = (typeof ANIMATION_NAMES)[number];\n\nexport const AnimationNameSchema = z.enum(ANIMATION_NAMES);\n\n/** Sheet file directions (physical PNG files a sprite sheet ships as). */\nexport const SPRITE_DIRECTIONS = ['se', 'sw'] as const;\n\nexport type SpriteDirection = (typeof SPRITE_DIRECTIONS)[number];\n\nexport const SpriteDirectionSchema = z.enum(SPRITE_DIRECTIONS);\n\n// ============================================================================\n// Animation Definition\n// ============================================================================\n\n/**\n * Definition for a single named animation within a sprite sheet: which row\n * it occupies, how many frames it has, and its playback rate. This is the\n * shape actually consumed by `@almadar/ui`'s sprite-sheet renderer\n * (`spriteAnimation.ts`'s `frameRect`/`getCurrentFrameFromDef`) — moved here\n * verbatim rather than reconciled with a differently-shaped guess, since\n * `@almadar/ui`'s version is the one with real production consumers.\n */\nexport interface AnimationDef {\n /** Row index in the sprite sheet (0-based; each animation occupies one row). */\n row: number;\n /** Number of frames in this animation. */\n frames: number;\n /** Frames per second. */\n frameRate: number;\n /** Whether the animation loops. */\n loop: boolean;\n}\n\nexport const AnimationDefSchema = z.object({\n row: z.number().int().nonnegative(),\n frames: z.number().int().positive(),\n frameRate: z.number().positive(),\n loop: z.boolean(),\n});\n\n// ============================================================================\n// Sprite Sheet Atlas\n// ============================================================================\n\n/**\n * Parsed sprite-sheet atlas JSON — the contract a `spriteSheet`-role `Asset.url`\n * resolves to when fetched (see `Asset.url` usage in `@almadar/ui`'s\n * `useUnitSpriteAtlas`). A unit's `sprite?: Asset` stays the static single-pose\n * image; `spriteSheet?: Asset` is a SEPARATE reference whose URL points at a\n * `SpriteSheetAtlas`-shaped JSON manifest (e.g. `.../guardian-sprite-sheet.json`),\n * not a PNG. Frame-cutting geometry lives here, not inlined onto `Asset` — an\n * `Asset` traveling through `render-ui` every tick stays small.\n */\nexport interface SpriteSheetAtlas {\n /** Unit archetype key. */\n unit?: string;\n /** Visual type key. */\n type?: string;\n /** Width of a single frame in pixels. */\n frameWidth: number;\n /** Height of a single frame in pixels. */\n frameHeight: number;\n /** Number of columns (frames per row). */\n columns: number;\n /** Number of rows (animations). */\n rows: number;\n /** Directions present as physical PNG files. */\n directions: SpriteDirection[];\n /** Relative PNG sheet paths per direction. */\n sheets: Partial<Record<SpriteDirection, string>>;\n /** Animation row layout keyed by animation name. */\n animations: Partial<Record<AnimationName, AnimationDef>>;\n}\n\nexport const SpriteSheetAtlasSchema = z.object({\n unit: z.string().optional(),\n type: z.string().optional(),\n frameWidth: z.number().positive(),\n frameHeight: z.number().positive(),\n columns: z.number().int().positive(),\n rows: z.number().int().positive(),\n directions: z.array(SpriteDirectionSchema),\n sheets: z.record(SpriteDirectionSchema, z.string()),\n animations: z.record(AnimationNameSchema, AnimationDefSchema),\n});\n\n// ============================================================================\n// Texture Atlas — named-subrect packed sheet (the industry standard)\n// ============================================================================\n\n/**\n * One named sub-rectangle inside a packed sheet. Mirrors the ShoeBox /\n * TexturePacker `<SubTexture>` element every Kenney `Spritesheet/*.xml` ships\n * (`x`/`y`/`width`/`height` = the rect in the sheet PNG; `frameX`/`frameY`/\n * `frameWidth`/`frameHeight` = the trim/pad offsets for sprites packed with\n * transparent edges removed — optional, present only on trimmed atlases).\n */\nexport interface SubTexture {\n x: number;\n y: number;\n width: number;\n height: number;\n frameX?: number;\n frameY?: number;\n frameWidth?: number;\n frameHeight?: number;\n}\n\nexport const SubTextureSchema = z.object({\n x: z.number().nonnegative(),\n y: z.number().nonnegative(),\n width: z.number().positive(),\n height: z.number().positive(),\n frameX: z.number().optional(),\n frameY: z.number().optional(),\n frameWidth: z.number().positive().optional(),\n frameHeight: z.number().positive().optional(),\n});\n\n/**\n * A packed sheet + its named sub-rectangles — the canonical parse target for a\n * Kenney `Spritesheet/*.xml` atlas. A STATIC tile/prop/UI Asset references one\n * of these: `{ url: <sheet.png>, atlas: <this.json>, sprite: \"grass.png\" }` →\n * the renderer fetches the sheet + atlas ONCE and blits the named sub-rect,\n * instead of loading N individual PNGs. (Animated actors use `SpriteSheetAtlas`\n * instead; a uniform-grid tile page uses `Tilesheet`.)\n */\nexport interface TextureAtlas {\n /** Relative path to the sheet PNG the sub-rects index into (the atlas's own `imagePath`). */\n imagePath: string;\n /** Sub-rectangles keyed by their atlas name (e.g. `\"grass.png\"`). */\n subTextures: Record<string, SubTexture>;\n}\n\nexport const TextureAtlasSchema = z.object({\n imagePath: z.string(),\n subTextures: z.record(z.string(), SubTextureSchema),\n});\n\n// ============================================================================\n// Tilesheet — uniform-grid packed page (cut by index)\n// ============================================================================\n\n/**\n * A uniform-grid tile page — the shape a Kenney `Tilesheet/` sheet takes (e.g.\n * Pirate Pack: \"each tile is 64×64, no margin\"). Tiles are cut by `(col,row)`\n * index rather than by named rect. `names` is present only when a sibling\n * `.xml`/`.txt` supplies an index→name list; otherwise a tile is addressed by\n * its `\"col,row\"` (or flat index) via `Asset.sprite`.\n */\nexport interface Tilesheet {\n /** Relative path to the tile sheet PNG. */\n imagePath: string;\n /** Width of one tile cell in pixels. */\n tileWidth: number;\n /** Height of one tile cell in pixels. */\n tileHeight: number;\n /** Number of columns in the grid. */\n columns: number;\n /** Number of rows in the grid. */\n rows: number;\n /** Outer margin before the first tile, in pixels (default 0). */\n margin?: number;\n /** Gap between adjacent tiles, in pixels (default 0). */\n spacing?: number;\n /** Optional index→name labels when a descriptor supplies them. */\n names?: string[];\n}\n\nexport const TilesheetSchema = z.object({\n imagePath: z.string(),\n tileWidth: z.number().positive(),\n tileHeight: z.number().positive(),\n columns: z.number().int().positive(),\n rows: z.number().int().positive(),\n margin: z.number().nonnegative().optional(),\n spacing: z.number().nonnegative().optional(),\n names: z.array(z.string()).optional(),\n});\n\n// ============================================================================\n// Semantic Asset Reference\n// ============================================================================\n\n/**\n * Semantic reference to an asset (not a hardcoded path).\n * Resolved to actual paths at compile time via asset maps.\n */\nexport type SemanticAssetRef = {\n /**\n * Entity role — a free string. Core no longer constrains the vocabulary to\n * `EntityRole` (that enum stays an exported shared reference for the asset\n * tool + renderer); genre boards may use their own roles (`boss`, `tower`, …).\n */\n role: string;\n /** Sub-category within role (hero, slime, coin, etc.) */\n category: string;\n /** Required animations for this entity */\n animations?: string[];\n /** Visual style preference */\n style?: VisualStyle;\n /** Variant identifier (for multiple versions) */\n variant?: string;\n /** 2D sprite vs 3D model — the rendering dimension the consuming canvas needs. */\n dimension?: AssetDimension;\n /** Rendering aspect ratio (square sprite/portrait/tile, 16:9 backdrop, 5:7 card, 8:1 fx-strip). */\n aspect?: AssetAspect;\n};\n\nexport const SemanticAssetRefSchema = z.object({\n role: z.string().min(1),\n category: z.string().min(1),\n animations: z.array(z.string()).optional(),\n style: VisualStyleSchema.optional(),\n variant: z.string().optional(),\n dimension: AssetDimensionSchema.optional(),\n aspect: AssetAspectSchema.optional(),\n});\n\n// ============================================================================\n// Asset — the UNIFIED asset type\n// ============================================================================\n\n/**\n * The single asset type: a `SemanticAssetRef` (role/dimension/animations/aspect/style)\n * WITH its resolved URL folded in. Used everywhere an asset is referenced — a lolo\n * board `assetManifest` (`Map string Asset`), every `@almadar/ui` game prop, the\n * asset-workflow's resolved/pool assets, and the inspector picker. Replaces the bare\n * `AssetUrl`-string asset field so the render metadata travels WITH the asset (no\n * pixel-dimension or filename heuristics needed to know sheet-vs-frame / 2d-vs-3d).\n */\nexport interface Asset extends SemanticAssetRef {\n /** The resolved asset URL. When `atlas`/`sprite` are set this is the SHEET png; otherwise a standalone image. */\n url: AssetUrl;\n /**\n * Optional atlas JSON (a `TextureAtlas` or `Tilesheet`) that slices `url`.\n * When present with `sprite`, the renderer fetches sheet + atlas once and\n * blits one sub-rect instead of loading a standalone PNG. Absent → `url` is\n * a plain whole-image asset (the existing, non-atlas path).\n */\n atlas?: AssetUrl;\n /**\n * The sub-texture selector within `atlas`: a `SubTexture` name for a\n * `TextureAtlas` (e.g. `\"grass.png\"`), or a `\"col,row\"`/flat index for a\n * `Tilesheet`. Only meaningful alongside `atlas`.\n */\n sprite?: string;\n /** Optional display name (inspector picker). */\n name?: string;\n /** Optional thumbnail URL (inspector picker grid). */\n thumbnailUrl?: string;\n}\n\nexport const AssetSchema = SemanticAssetRefSchema.extend({\n url: z.string(),\n atlas: z.string().optional(),\n sprite: z.string().optional(),\n name: z.string().optional(),\n thumbnailUrl: z.string().optional(),\n});\n\n// ============================================================================\n// Asset Catalog\n// ============================================================================\n\n/**\n * Single browsable asset in the inspector picker catalog.\n * Backs the asset/icon pickers — a flat list the inspector renders for\n * the user to choose from when a config field's type is `'asset'`.\n */\nexport interface AssetCatalogEntry {\n /** Resolvable URL to the asset. */\n url: string;\n /** Display name for the asset. */\n name: string;\n /** Grouping category within the catalog. */\n category: string;\n /** Asset kind the picker dispatches on. */\n kind: 'image' | 'spritesheet' | 'audio' | 'scene' | 'portrait' | 'model' | 'other';\n /** Optional thumbnail URL for grid previews. */\n thumbnailUrl?: string;\n /** 2D sprite vs 3D model — the asset's actual rendering dimension. */\n dimension?: AssetDimension;\n /** The asset's actual rendering aspect ratio. */\n aspect?: AssetAspect;\n}\n\nexport const AssetCatalogEntrySchema = z.object({\n url: z.string(),\n name: z.string(),\n category: z.string(),\n kind: z.enum(['image', 'spritesheet', 'audio', 'scene', 'portrait', 'model', 'other']),\n thumbnailUrl: z.string().optional(),\n dimension: AssetDimensionSchema.optional(),\n aspect: AssetAspectSchema.optional(),\n});\n\n/**\n * Flat list of browsable assets surfaced by the inspector pickers.\n */\nexport type AssetCatalog = AssetCatalogEntry[];\n\nexport const AssetCatalogSchema = z.array(AssetCatalogEntrySchema);\n\n/**\n * Asset-reference URL marker. A plain alias over `string` — the value is a\n * resolvable asset URL — but the named type lets the pattern-sync tool\n * (`tools/almadar-pattern-sync/parser.ts`) detect a component prop as an asset\n * field (tagged `asset`) the same way `EventKey`/`LucideIcon` are detected by\n * type identity. Components annotate image/url props as `AssetUrl` (`src`,\n * `backgroundImage`, `avatar`, …); the generator emits a `string` config knob\n * declared as the `asset` config type, which the property inspector dispatches\n * an AssetPicker on. Not branded — asset urls originate from user data, so cast\n * friction would buy nothing; the value is the marker the tool finds.\n */\nexport type AssetUrl = string;\n\n// ============================================================================\n// ScenePos — neutral scene coordinate\n// ============================================================================\n\n/**\n * A neutral position in scene space: 2D (`x`,`y`) or optionally 3D (`x`,`y`,`z`).\n * The single coordinate type shared by every drawable descriptor and camera pose\n * across the 2D and 3D canvas hosts, so a scene composes from the same `{x,y,z?}`\n * regardless of projection or painter. Logical, not pixel — the host's projector\n * maps a `ScenePos` to screen space.\n */\nexport interface ScenePos {\n x: number;\n y: number;\n z?: number;\n}\n\nexport const ScenePosSchema = z.object({\n x: z.number(),\n y: z.number(),\n z: z.number().optional(),\n});\n\n// ============================================================================\n// Camera — neutral camera pose shared by the 2D and 3D canvas hosts\n// ============================================================================\n\n/**\n * Camera behaviors, unifying the former per-host vocab (2D `camera` string +\n * 3D `cameraMode`). `isometric`/`top-down` are fixed framings; `follow`/`chase`\n * track a target; `perspective` is the 3D dramatic framing.\n */\nexport const CAMERA_MODES = ['isometric', 'perspective', 'top-down', 'follow', 'chase'] as const;\n\nexport type CameraMode = (typeof CAMERA_MODES)[number];\n\nexport const CameraModeSchema = z.enum(CAMERA_MODES);\n\n/**\n * A neutral camera pose shared by the 2D and 3D canvas hosts, so `type: canvas`\n * carries one camera object regardless of painter. `pos`/`target` are `ScenePos`\n * (logical scene space, not pixels); `zoom` scales the view (the former `scale`);\n * `fov` is the 3D field of view; `mode` selects the framing/tracking behavior.\n * Every field is optional — an omitted camera means the host's default framing.\n */\nexport interface Camera {\n pos?: ScenePos;\n target?: ScenePos;\n zoom?: number;\n fov?: number;\n mode?: CameraMode;\n}\n\nexport const CameraSchema = z.object({\n pos: ScenePosSchema.optional(),\n target: ScenePosSchema.optional(),\n zoom: z.number().optional(),\n fov: z.number().optional(),\n mode: CameraModeSchema.optional(),\n});\n\n// ============================================================================\n// Type Exports\n// ============================================================================\n\nexport type SemanticAssetRefInput = z.input<typeof SemanticAssetRefSchema>;\nexport type AnimationDefInput = z.input<typeof AnimationDefSchema>;\nexport type AssetCatalogEntryInput = z.input<typeof AssetCatalogEntrySchema>;\nexport type SpriteSheetAtlasInput = z.input<typeof SpriteSheetAtlasSchema>;\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Creates a semantic asset key from role and category.\n * \n * Generates a unique asset identifier by combining role and category\n * with a colon separator. Used for asset management and lookup.\n * \n * @param {EntityRole} role - Entity role (e.g., 'player', 'enemy')\n * @param {string} category - Asset category (e.g., 'sprite', 'animation')\n * @returns {string} Asset key in format 'role:category'\n * \n * @example\n * createAssetKey('player', 'sprite'); // returns 'player:sprite'\n * createAssetKey('enemy', 'animation'); // returns 'enemy:animation'\n */\nexport function createAssetKey(role: EntityRole, category: string): string {\n return `${role}:${category}`;\n}\n\n/**\n * Parses an asset key into role and category components.\n * \n * Deconstructs an asset key string (format 'role:category') into its\n * constituent parts. Returns null if the key format is invalid.\n * \n * @param {string} key - Asset key in format 'role:category'\n * @returns {{ role: string; category: string } | null} Parsed components or null\n * \n * @example\n * parseAssetKey('player:sprite'); // returns { role: 'player', category: 'sprite' }\n * parseAssetKey('enemy:animation'); // returns { role: 'enemy', category: 'animation' }\n * parseAssetKey('invalid'); // returns null\n */\nexport function parseAssetKey(key: string): { role: string; category: string } | null {\n const parts = key.split(':');\n if (parts.length !== 2) return null;\n return { role: parts[0], category: parts[1] };\n}\n\n/**\n * Gets common animations for an entity role.\n * \n * Returns an array of default animation names appropriate for the\n * specified entity role. Used for asset configuration and validation.\n * \n * @param {EntityRole} role - Entity role\n * @returns {string[]} Array of default animation names\n * \n * @example\n * getDefaultAnimationsForRole('player'); // returns ['idle', 'run', 'jump', 'fall', 'attack', 'hurt', 'die']\n * getDefaultAnimationsForRole('enemy'); // returns ['idle', 'walk', 'attack', 'hurt', 'die']\n */\nexport function getDefaultAnimationsForRole(role: EntityRole): string[] {\n switch (role) {\n case 'player':\n return ['idle', 'run', 'jump', 'fall', 'attack', 'hurt', 'die'];\n case 'enemy':\n return ['idle', 'walk', 'attack', 'hurt', 'die'];\n case 'npc':\n return ['idle', 'walk', 'talk'];\n case 'item':\n return ['idle', 'collected'];\n case 'tile':\n return ['static'];\n case 'projectile':\n return ['fly', 'hit', 'expire'];\n case 'effect':\n return ['play'];\n case 'ui':\n return ['normal', 'hover', 'pressed', 'disabled'];\n case 'decoration':\n return ['idle'];\n case 'vehicle':\n return ['idle', 'move', 'brake'];\n default:\n return ['idle'];\n }\n}\n\n/**\n * Validates that an asset reference has required animations.\n * \n * Checks if an asset reference contains all required animations.\n * Returns an error message if validation fails, or null if valid.\n * \n * @param {SemanticAssetRef} assetRef - Asset reference to validate\n * @param {string[]} requiredAnimations - Required animation names\n * @returns {string | null} Error message or null if valid\n * \n * @example\n * validateAssetAnimations(assetRef, ['idle', 'run']); // returns null if valid\n * validateAssetAnimations(assetRef, ['missing-animation']); // returns error message\n */\nexport function validateAssetAnimations(\n assetRef: SemanticAssetRef,\n requiredAnimations: string[]\n): { valid: boolean; missing: string[] } {\n const provided = assetRef.animations || [];\n const missing = requiredAnimations.filter((anim) => !provided.includes(anim));\n return { valid: missing.length === 0, missing };\n}\n","/**\n * S-Expression Types\n *\n * Defines the S-Expression type system for guards, effects, and computed values.\n * S-expressions are JSON arrays where the first element is an operator string.\n *\n * @example\n * // Guard: health > 0\n * [\">\", \"@entity.health\", 0]\n *\n * // Effect: set x to x + vx\n * [\"set\", \"@entity.x\", [\"+\", \"@entity.x\", \"@entity.vx\"]]\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\nimport type { RuntimeValue } from './json.js';\n\n// ============================================================================\n// S-Expression Type\n// ============================================================================\n\n/**\n * S-Expression type - recursive structure representing expressions.\n *\n * An S-expression is either:\n * - A literal value (string, number, boolean, null)\n * - An object literal (for payload data, props, etc.)\n * - A binding reference (string starting with @)\n * - A call expression (array with operator as first element)\n */\n/** Object literal branch of an S-expression atom (payload data, props, etc.). */\nexport interface SExprObject {\n [key: string]: SExpr;\n}\nexport type SExprAtom = string | number | boolean | null | SExprObject;\nexport type SExpr = SExprAtom | SExpr[];\n\n/**\n * Expression type - S-expressions only.\n * Used for guards, computed values, and effect expressions.\n *\n * NOTE: Legacy string format is no longer supported.\n * All expressions must be S-expression arrays.\n */\nexport type Expression = SExpr;\n\n// ============================================================================\n// S-Expression Schema (Zod)\n// ============================================================================\n\n/**\n * Recursive schema for s-expr-shaped DATA in literal positions (object\n * values, effect arguments). Unlike `SExprSchema`, arrays may be empty or\n * non-operator-headed — literal data lists (`children: []`, `tiles: [...]`)\n * are valid here; only call positions get the operator-head refine.\n */\nexport const SExprDataSchema: z.ZodType<SExpr> = z.lazy(() =>\n z.union([SExprAtomSchema, z.array(SExprDataSchema)]),\n);\n\n/**\n * Schema for atomic S-expression values (non-array)\n * Includes objects for payload data, props, etc.\n */\nexport const SExprAtomSchema: z.ZodType<SExprAtom> = z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.record(SExprDataSchema), // Objects for payload data\n]);\n\n/**\n * Recursive schema for S-expressions.\n * Validates that arrays have at least one element and first element is a string (operator).\n */\nexport const SExprSchema: z.ZodType<SExpr> = z.lazy(() =>\n z.union([\n SExprAtomSchema,\n z\n .array(z.lazy(() => SExprSchema))\n .min(1)\n .refine(\n (arr) => typeof arr[0] === 'string',\n { message: 'S-expression array must have a string operator as first element' }\n ),\n ])\n);\n\n/**\n * Schema for Expression type - S-expressions only.\n * S-expressions are arrays with operator as first element.\n *\n * NOTE: Legacy string format is no longer supported.\n */\nexport const ExpressionSchema: z.ZodType<Expression> = SExprSchema;\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\n/**\n * Type guard for S-expression detection.\n * 100% reliable - structural check, no regex or keyword matching.\n *\n * @param value - Value to check\n * @returns true if value is an S-expression (array with string operator)\n */\nexport function isSExpr(value: RuntimeValue): value is SExpr[] {\n return (\n Array.isArray(value) &&\n value.length > 0 &&\n typeof value[0] === 'string'\n );\n}\n\n/**\n * Type guard for S-expression atoms (non-array values).\n * \n * Validates that a value is an S-expression atom (literal value).\n * Includes null, strings, numbers, booleans, and objects. Used to\n * distinguish atomic values from S-expression calls (arrays).\n * \n * @param {RuntimeValue} value - Value to check\n * @returns {boolean} True if value is an S-expression atom, false otherwise\n *\n * @example\n * isSExprAtom('hello'); // returns true\n * isSExprAtom(42); // returns true\n * isSExprAtom(null); // returns true\n * isSExprAtom({ key: 'value' }); // returns true\n * isSExprAtom(['+', 1, 2]); // returns false\n */\nexport function isSExprAtom(value: RuntimeValue): value is SExprAtom {\n if (value === null) return true;\n if (Array.isArray(value)) return false;\n const type = typeof value;\n return type === 'string' || type === 'number' || type === 'boolean' || type === 'object';\n}\n\n/**\n * Checks if a value is a binding reference.\n * \n * Validates that a string is a binding reference (starts with @).\n * Bindings reference runtime values like @entity.health, @payload.amount, @now.\n * Used for identifying bindings in S-expressions and validation.\n * \n * @param {RuntimeValue} value - Value to check\n * @returns {boolean} True if value is a binding reference, false otherwise\n *\n * @example\n * isBinding('@entity.health'); // returns true\n * isBinding('@payload.amount'); // returns true\n * isBinding('not-a-binding'); // returns false\n * isBinding(123); // returns false\n */\nexport function isBinding(value: RuntimeValue): value is string {\n return typeof value === 'string' && value.startsWith('@');\n}\n\n/**\n * Checks if a value is a valid S-expression call (array with operator).\n * \n * Alias for isSExpr() - validates S-expression call structure.\n * Used to distinguish between S-expression calls and atom values.\n * \n * @param {RuntimeValue} value - Value to check\n * @returns {boolean} True if value is a valid S-expression call, false otherwise\n *\n * @example\n * isSExprCall(['+', 1, 2]); // returns true\n * isSExprCall(['set', '@entity.health', 100]); // returns true\n * isSExprCall('not-a-call'); // returns false\n */\nexport function isSExprCall(value: RuntimeValue): value is SExpr[] {\n return isSExpr(value);\n}\n\n// ============================================================================\n// Binding Parsing\n// ============================================================================\n\n/**\n * Parsed binding reference\n */\nexport interface ParsedBinding {\n /** Type of binding: core (@entity, @payload, @state, @now) or entity (@EntityName) */\n type: 'core' | 'entity';\n /** The root binding name (entity, payload, state, now, or EntityName) */\n root: string;\n /** Path segments after the root (e.g., ['health'] for @entity.health) */\n path: string[];\n /** Full original binding string */\n original: string;\n}\n\n/**\n * Core bindings that are always available.\n * Phase 4.5 adds: config, computed, trait (for behavior support).\n * `user` is the authenticated user / agent context (see binding.ts) and is\n * read-only in guards/effects/ticks — atoms reference `@user.id` and\n * `@user.role` for ownership / role-based gating.\n * `callsitePayload` is the call-site-captured event payload emitted by the\n * compiler's inline-trait hoisting; the runtime BindingResolver resolves it\n * at the composing effect.\n */\nexport const CORE_BINDINGS = ['entity', 'payload', 'state', 'now', 'config', 'computed', 'trait', 'user', 'callsitePayload'] as const;\nexport type CoreBinding = (typeof CORE_BINDINGS)[number];\n\n/**\n * Parses a binding reference into its components.\n * \n * Deconstructs a binding string (e.g., '@entity.health') into its constituent\n * parts: type, root, path, and original string. Does NOT use regex - uses\n * structured string operations for reliability and maintainability.\n * \n * @param {string} binding - Binding string starting with @\n * @returns {ParsedBinding | null} Parsed binding object or null if invalid\n * \n * @example\n * parseBinding('@entity.health'); // returns { type: 'core', root: 'entity', path: ['health'], original: '@entity.health' }\n * parseBinding('@User.name'); // returns { type: 'entity', root: 'User', path: ['name'], original: '@User.name' }\n * parseBinding('not-a-binding'); // returns null\n */\nexport function parseBinding(binding: string): ParsedBinding | null {\n if (!binding.startsWith('@')) {\n return null;\n }\n\n // Remove @ prefix\n const withoutPrefix = binding.slice(1);\n\n // Split by dots\n const parts = withoutPrefix.split('.');\n\n if (parts.length === 0 || parts[0] === '') {\n return null;\n }\n\n const root = parts[0];\n const path = parts.slice(1);\n\n // Determine if core binding or entity reference\n const isCore = (CORE_BINDINGS as readonly string[]).includes(root);\n\n return {\n type: isCore ? 'core' : 'entity',\n root,\n path,\n original: binding,\n };\n}\n\n/**\n * Validate a binding reference format.\n *\n * @param binding - Binding string to validate\n * @returns true if valid binding format\n */\nexport function isValidBinding(binding: string): boolean {\n const parsed = parseBinding(binding);\n if (!parsed) return false;\n\n // Core bindings: @entity, @payload, @state, @now (optionally with path)\n // @state and @now don't have paths\n if (parsed.type === 'core') {\n if (parsed.root === 'state' || parsed.root === 'now') {\n return parsed.path.length === 0;\n }\n // @entity and @payload can have paths\n return true;\n }\n\n // Entity bindings: @EntityName.field - must have at least one path segment\n return parsed.path.length > 0;\n}\n\n// ============================================================================\n// S-Expression Utilities\n// ============================================================================\n\n/**\n * Get the operator from an S-expression call.\n *\n * @param expr - S-expression array\n * @returns The operator string or null if not a valid call\n */\nexport function getOperator(expr: SExpr): string | null {\n if (!isSExpr(expr)) return null;\n return expr[0] as string;\n}\n\n/**\n * Get the arguments from an S-expression call.\n *\n * @param expr - S-expression array\n * @returns Array of arguments (empty if not a valid call)\n */\nexport function getArgs(expr: SExpr): SExpr[] {\n if (!isSExpr(expr)) return [];\n return expr.slice(1);\n}\n\n/**\n * Create an S-expression call.\n *\n * @param operator - The operator string\n * @param args - Arguments to the operator\n * @returns S-expression array\n */\nexport function sexpr(operator: string, ...args: SExpr[]): SExpr[] {\n return [operator, ...args];\n}\n\n/**\n * Walk an S-expression tree and apply a visitor function to each node.\n *\n * @param expr - S-expression to walk\n * @param visitor - Function to call on each node\n */\nexport function walkSExpr(\n expr: SExpr,\n visitor: (node: SExpr, parent: SExpr[] | null, index: number) => void,\n parent: SExpr[] | null = null,\n index: number = 0\n): void {\n visitor(expr, parent, index);\n\n if (isSExpr(expr)) {\n for (let i = 0; i < expr.length; i++) {\n walkSExpr(expr[i], visitor, expr, i);\n }\n }\n}\n\n/**\n * Collect all bindings referenced in an S-expression.\n *\n * @param expr - S-expression to analyze\n * @returns Array of binding strings found\n */\nexport function collectBindings(expr: SExpr): string[] {\n const bindings: string[] = [];\n\n walkSExpr(expr, (node) => {\n if (isBinding(node)) {\n bindings.push(node);\n }\n });\n\n return bindings;\n}\n\n// ============================================================================\n// Type Exports\n// ============================================================================\n\nexport type SExprInput = z.input<typeof SExprSchema>;\nexport type ExpressionInput = z.input<typeof ExpressionSchema>;\n\n// ============================================================================\n// Runtime Evaluation Types\n// ============================================================================\n\n/** Evaluation context for guards and s-expressions. Recursive. */\nexport interface EvalContext {\n [key: string]: string | number | boolean | Date | null | string[] | EvalContext | undefined;\n}\n\n/**\n * A single value carried by an event payload field. The top-level payload\n * is always an object; the VALUES in that object can be primitives, nested\n * objects, or arrays of the same. Arrays are allowed so real-world emits\n * like `{ files: [{ name, size, type }, ...] }` or `{ selected: string[] }`\n * are typed natively instead of forcing consumers to wrap at every call.\n *\n * `Date` is included so `EntityRow` (whose values are `FieldValue`, which\n * includes `Date`) is assignable to a payload field without a cast —\n * emitted entity rows flow through the bus without boundary widening.\n */\nexport type EventPayloadValue =\n | string\n | number\n | boolean\n | Date\n | null\n | undefined\n | EventPayload\n | readonly EventPayloadValue[];\n\n/**\n * Typed event payload. Object-shaped so it's assignable to the bus's\n * `EventPayload` parameter without casts.\n */\nexport interface EventPayload {\n [key: string]: EventPayloadValue;\n}\n\n/**\n * Runtime guard for `EventPayloadValue` — narrows interpreter-produced\n * `unknown` values at typed substrate boundaries (e.g. `TraceContext.emit`).\n */\nexport function isEventPayloadValue(value: RuntimeValue): value is EventPayloadValue {\n if (value === null || value === undefined) return true;\n const kind = typeof value;\n if (kind === 'string' || kind === 'number' || kind === 'boolean') return true;\n if (value instanceof Date) return true;\n if (Array.isArray(value)) return value.every((item: RuntimeValue) => isEventPayloadValue(item));\n if (kind === 'object' && value !== null && typeof value === 'object') {\n return Object.values(value).every((item: RuntimeValue) => isEventPayloadValue(item));\n }\n return false;\n}\n\n/**\n * Allowed leaf value for `LogMeta`. Mirrors `EventPayloadValue` shape so\n * the same row/list data flows through logs without manual flattening,\n * with `Error` added since structured logs carry exception detail.\n */\nexport type LogMetaValue =\n | string\n | number\n | boolean\n | Date\n | null\n | undefined\n | Error\n | LogMeta\n | readonly LogMetaValue[];\n\n/** Structured log/event metadata. Recursive to support nested log data. */\nexport interface LogMeta {\n [key: string]: LogMetaValue;\n}\n","/**\n * Entity Types for Orbital Units\n *\n * Defines the OrbitalEntity type - the nucleus of an Orbital Unit.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\nimport type { EntityId } from './identity.js';\nimport { EntityFieldSchema, type EntityField } from './field.js';\nimport { SemanticAssetRefSchema, type SemanticAssetRef } from './asset.js';\nimport { JsonValueSchema, type RuntimeValue } from './json.js';\nimport { SExprSchema, type SExpr } from './expression.js';\n\n// ============================================================================\n// Entity Persistence\n// ============================================================================\n\n/**\n * Entity persistence types.\n *\n * - persistent: Stored in database (has collection)\n * - runtime: Exists only at runtime (not persisted)\n */\nexport type EntityPersistence = 'persistent' | 'runtime';\n\nexport const EntityPersistenceSchema = z.enum([\n 'persistent',\n 'runtime',\n]);\n\n// ============================================================================\n// Orbital Entity\n// ============================================================================\n\n/**\n * OrbitalEntity - the nucleus of an Orbital Unit.\n *\n * This is a simplified entity definition optimized for orbital composition.\n * Collection names are derived automatically from persistence type if not provided.\n */\nexport type OrbitalEntity = {\n /** V4 dual-carry id sibling of `name` — optional until the Phase-7 flip. */\n id?: EntityId;\n\n /** Entity name (PascalCase, e.g., \"Task\", \"User\") */\n name: string;\n\n /** Entity persistence type (defaults to 'persistent' if not specified) */\n persistence?: EntityPersistence;\n\n /** Whether this entity's state is shared across all bound traits (vs per-trait copy). Orthogonal to persistence. */\n shared?: boolean;\n\n /**\n * Whether this entity types the ambient `@user` viewer. Orthogonal to both\n * `persistence` and `shared`: `[persistent: people, identity]` is an\n * app-owned user directory, `[runtime, identity]` the provider-supplied\n * current viewer. At most one per composed program.\n */\n identity?: boolean;\n\n /**\n * `@read` — a per-row predicate (`@entity` = candidate row, `@user` =\n * viewer) ANDed with any call-site `filter:`. The un-bypassable twin of\n * `filter:`, enforced once for every trait that fetches this entity.\n */\n read_policy?: SExpr;\n\n /** `@create` — `@entity` binds the incoming data about to become a row. */\n create_policy?: SExpr;\n\n /** `@update` — `@entity` binds the existing row before mutation. */\n update_policy?: SExpr;\n\n /** `@delete` — same binding shape as `@update`. */\n delete_policy?: SExpr;\n\n /** Collection name (auto-derived if not provided for persistent entities) */\n collection?: string;\n\n /** Entity fields */\n fields: EntityField[];\n\n /** Pre-authored instances (seed data or static reference data) */\n instances?: EntityRow[];\n\n /** Auto-add createdAt/updatedAt timestamps */\n timestamps?: boolean;\n\n /** Soft delete support */\n softDelete?: boolean;\n\n /** Human-readable description */\n description?: string;\n\n /** Visual prompt for AI generation */\n visual_prompt?: string;\n\n /** Semantic asset reference for visual representation (games) */\n assetRef?: SemanticAssetRef;\n};\n\nexport const OrbitalEntitySchema = z.object({\n name: z.string().min(1, 'Entity name is required'),\n persistence: EntityPersistenceSchema.default('persistent'),\n shared: z.boolean().optional(),\n // Must stay in step with the Rust serde field (`EntityDefinition.identity`,\n // orbital-core/src/schema/types.rs). `z.object()` STRIPS unknown keys rather\n // than rejecting them, so a Rust-only field works on the compiled path and\n // silently vanishes on the interpreter path.\n identity: z.boolean().optional(),\n // Same \"must stay in step with Rust serde\" hazard as `identity` above —\n // these four mirror `EntityDefinition.{read,create,update,delete}_policy`.\n // Rust has no `rename_all` on this struct, so the wire key IS snake_case\n // (unlike this file's other camelCase fields, which are Rust-side-absent\n // and so never hit this cross-language constraint — see `visual_prompt`\n // just below for the existing precedent).\n read_policy: SExprSchema.optional(),\n create_policy: SExprSchema.optional(),\n update_policy: SExprSchema.optional(),\n delete_policy: SExprSchema.optional(),\n collection: z.string().optional(),\n fields: z.array(EntityFieldSchema).min(1, 'At least one field is required'),\n instances: z.array(z.record(JsonValueSchema)).optional(),\n timestamps: z.boolean().optional(),\n softDelete: z.boolean().optional(),\n description: z.string().optional(),\n visual_prompt: z.string().optional(),\n assetRef: SemanticAssetRefSchema.optional(),\n});\n\nexport type OrbitalEntityInput = z.input<typeof OrbitalEntitySchema>;\n\n// ============================================================================\n// Type Aliases (for cleaner imports)\n// ============================================================================\n\n/** Alias for OrbitalEntity - preferred name */\nexport type Entity = OrbitalEntity;\n\n/** Alias for OrbitalEntitySchema - preferred name */\nexport const EntitySchema = OrbitalEntitySchema;\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Derives the collection name for a persistent entity.\n * \n * Generates the database collection name by converting the entity name\n * to lowercase and adding an 's' suffix (simple pluralization).\n * Returns undefined for non-persistent (runtime) entities.\n * \n * @param {OrbitalEntity} entity - Entity to derive collection name for\n * @returns {string | undefined} Collection name or undefined for non-persistent entities\n * \n * @example\n * deriveCollection({ name: 'User', persistence: 'persistent' }); // returns 'users'\n * deriveCollection({ name: 'Task', persistence: 'runtime' }); // returns undefined\n */\nexport function deriveCollection(entity: OrbitalEntity): string | undefined {\n if (entity.persistence !== 'persistent') {\n return undefined;\n }\n // Lowercase + 's' suffix (simple pluralization)\n return entity.name.toLowerCase() + 's';\n}\n\n/**\n * Checks if an entity is runtime-only (not persisted).\n * \n * Type guard to determine if an entity exists only at runtime\n * and is not stored in the database.\n * \n * @param {OrbitalEntity} entity - Entity to check\n * @returns {boolean} True if entity is runtime-only, false otherwise\n * \n * @example\n * isRuntimeEntity({ persistence: 'runtime' }); // returns true\n * isRuntimeEntity({ persistence: 'persistent' }); // returns false\n */\nexport function isRuntimeEntity(entity: OrbitalEntity): boolean {\n return entity.persistence === 'runtime';\n}\n\n/**\n * Checks whether an entity's persistence mode allows `persistence` /\n * `collection` overrides at the factory call site.\n *\n * Only `persistent` entities (explicit or default) support these overrides.\n * Runtime entities are fixed; callers must not expose `persistence` or\n * `collection` params for them.\n *\n * @param persistence - The entity persistence mode (undefined = default persistent)\n * @returns True when overrides are allowed, false otherwise\n *\n * @example\n * persistenceModeAllowsOverrides('persistent'); // returns true\n * persistenceModeAllowsOverrides('runtime'); // returns false\n * persistenceModeAllowsOverrides(undefined); // returns true (default persistent)\n */\nexport function persistenceModeAllowsOverrides(\n persistence: EntityPersistence | undefined,\n): boolean {\n return persistence === 'persistent' || persistence === undefined;\n}\n\n// ============================================================================\n// Entity Instance Data (Runtime)\n// ============================================================================\n\n/**\n * A single field value at runtime.\n * Union of all possible types from FieldType: string, number, boolean, date, array, nested.\n * The nested-record branch's index signature tolerates `undefined` so that\n * TypeScript optional properties (`x?: string`, carrying `string | undefined`)\n * on EntityRow extenders typecheck without ceremony. At JSON serialization\n * time `undefined` is equivalent to \"key absent\" and never appears on the\n * wire; the inclusion here is a pure type-surface accommodation.\n */\nexport type FieldValue = string | number | boolean | Date | null | string[] | FieldValue[] | { [key: string]: FieldValue | undefined };\n\n/**\n * Runtime guard for `FieldValue` — narrows interpreter-produced `unknown`\n * values at typed substrate boundaries (e.g. `IntegrationContext.http` body).\n */\nexport function isFieldValue(value: RuntimeValue): value is FieldValue {\n if (value === null) return true;\n const kind = typeof value;\n if (kind === 'string' || kind === 'number' || kind === 'boolean') return true;\n if (value instanceof Date) return true;\n if (Array.isArray(value)) return value.every((item: RuntimeValue) => isFieldValue(item));\n if (kind === 'object' && value !== null && typeof value === 'object') {\n return Object.values(value).every((item: RuntimeValue) => item === undefined || isFieldValue(item));\n }\n return false;\n}\n\n/**\n * One instance of an entity with actual field values.\n * The shape is determined by the Entity definition at schema time.\n *\n * @example\n * // Entity defines: Patient { fullName: string, age: number, active: boolean }\n * // EntityRow is: { id: \"p1\", fullName: \"Sarah\", age: 34, active: true }\n */\nexport type EntityRow = { id?: string } & Record<string, FieldValue | undefined>;\n\n/**\n * A field-TYPED `EntityRow` — the SINGLE entity type, refined with a concrete\n * field SHAPE `S`. Non-optional members of `S` are REQUIRED, each with its real\n * type; the result stays `& EntityRow`, so the index signature is intact and\n * every other field is still field-open — any domain entity that provides those\n * fields satisfies it.\n *\n * One declaration, two jobs: (1) TypeScript enforces the bound entity has the\n * fields WITH their types (a behavior binding a thinner/mistyped entity fails to\n * typecheck); and (2) pattern-sync reads the same type and writes the entity\n * prop's field shape (`properties` + `requiredFields`) onto the registry, so\n * lolo-ui emits a COMPLETE `entity { … }` (every field, typed + demo-seeded) and\n * the `ORB_X_ENTITY_PROP_CONTRACT` validator rejects an incompatible bind at\n * `orbital validate`. (A raw `EntityRow & { rating: number }` intersection is\n * equivalent for one-off shapes.)\n *\n * @example\n * // HeroOrganism renders entity.title / entity.subtitle:\n * entity?: EntityWith<{ title: string; subtitle?: string }>;\n * // entity.title → string (required)\n * // entity.subtitle → string | undefined (optional)\n * // entity.other → FieldValue | undefined (still field-open)\n */\n// `S extends object` (not `Record<string, FieldValue>`) so a plain `interface`\n// row shape satisfies it — interfaces lack the implicit index signature `Record`\n// requires. FieldValue-compatibility is still enforced structurally: `& EntityRow`\n// intersects every field with the `FieldValue | undefined` index signature, so a\n// non-FieldValue field (e.g. a React `LucideIcon`) collapses to `never` at use.\nexport type EntityWith<S extends object> = EntityRow & S;\n\n/**\n * Collection of entity instances keyed by entity name.\n * Used by OrbPreview mockData, OrbitalServerRuntime state, data grids, etc.\n *\n * @example\n * const data: EntityData = {\n * Patient: [{ id: \"1\", fullName: \"Sarah\", age: 34 }],\n * QueueEntry: [{ id: \"1\", patientName: \"Sarah\", waitMinutes: 12 }],\n * };\n */\nexport type EntityData = Record<string, EntityRow[]>;\n","/**\n * Effect Types (Self-Contained)\n *\n * Defines effect types for trait transitions and ticks.\n * Effects are S-expressions (arrays) that describe actions to perform.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\nimport { type SExpr, type Expression, type EventPayload, SExprDataSchema } from './expression.js';\nimport type { RuntimeValue } from './json.js';\nimport { type ServiceParams } from './service.js';\nimport { type EntityRow } from './entity.js';\n\n// ============================================================================\n// UI Slots\n// ============================================================================\n\n/**\n * Known UI slots where content can be rendered\n */\nexport const UI_SLOTS = [\n // App slots\n 'main',\n 'sidebar',\n 'modal',\n 'drawer',\n 'overlay',\n 'center',\n 'toast',\n 'floating',\n 'system', // For invisible system components (InputListener, CollisionDetector)\n 'content',\n 'screen',\n // Game HUD slots\n 'hud',\n 'hud-top',\n 'hud-bottom',\n 'hud.health',\n 'hud.score',\n 'hud.inventory',\n 'hud.stamina',\n // Game overlay slots\n 'overlay.inventory',\n 'overlay.dialogue',\n 'overlay.menu',\n 'overlay.pause',\n] as const;\n\nexport type UISlot = (typeof UI_SLOTS)[number];\n\nexport const UISlotSchema = z.enum(UI_SLOTS);\n\n// ============================================================================\n// Pattern Config (for render-ui effects)\n// ============================================================================\n\n// Import pattern types for local use and re-export for consumers\nimport type {\n PatternType,\n PatternConfig,\n PatternProps,\n PatternPropsMap,\n AnyPatternConfig,\n} from '../patterns/index.js';\n\n/**\n * Type-safe pattern configuration for render-ui effects.\n *\n * Re-exported from @almadar/patterns. Generated from patterns-registry.json.\n *\n * @example\n * // Type-safe with specific pattern type\n * const config: PatternConfig<'entity-table'> = {\n * patternType: 'entity-table',\n * columns: ['name', 'email'], // ✅ Required prop\n * entity: 'User',\n * };\n *\n * // Error: Property 'columns' is missing (required prop)\n * const bad: PatternConfig<'entity-table'> = { patternType: 'entity-table' };\n *\n * // Error: 'fake-pattern' is not assignable to PatternType\n * const invalid: PatternConfig = { patternType: 'fake-pattern' };\n */\nexport type {\n PatternType,\n PatternConfig,\n PatternProps,\n PatternPropsMap,\n AnyPatternConfig,\n};\n\n// ============================================================================\n// Service Config (for call-service effects)\n// ============================================================================\n\n/**\n * Configuration extracted from call-service effects\n */\nexport type CallServiceConfig = {\n service: string;\n action: string;\n endpoint?: string;\n method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n params?: ServiceParams;\n onSuccess?: string;\n onError?: string;\n};\n\n// ============================================================================\n// Typed Effect Tuples\n// ============================================================================\n\n/**\n * A binding reference to a render tree stored elsewhere — a trait `config`\n * knob or a payload field — e.g. `\"@config.bodyContent\"`. Resolved to a pattern\n * node at render time. This is how an atom renders a tree that contains data\n * bindings (`entity: \"@payload.data\"`, `fields: \"@config.fields\"`): the tree is\n * a permissive `TraitConfigValue` stored in `config` (a binding string is not a\n * valid `AnyPatternConfig` prop value), and the render-ui effect points at it.\n * Worked example: `std-browse`'s loaded transition is `['render-ui', 'main',\n * '@config.bodyContent']`. The Rust validator accepts this form; this variant\n * lets the TS effect type express it.\n */\nexport type RenderBinding = `@${string}`;\n\n/**\n * Render UI effect - displays a pattern in a UI slot.\n * @example ['render-ui', 'main', { patternType: 'entity-table', columns: ['name'] }]\n * @example ['render-ui', 'main', '@config.bodyContent'] // a {@link RenderBinding} target\n */\nexport type RenderUIEffect =\n | ['render-ui', UISlot, AnyPatternConfig]\n | ['render-ui', UISlot, AnyPatternConfig, ResolvedPatternProps]\n | ['render-ui', UISlot, RenderBinding]\n | ['render-ui', UISlot, null];\n\n/**\n * Lambda expression for per-item rendering in data-grid/data-list.\n * The compiler generates: {(paramName: Record<string, unknown>) => (<>JSX</>)}\n * where @{paramName}.field bindings reference the current iteration item.\n *\n * @example [\"fn\", \"item\", { \"type\": \"stack\", \"children\": [{ \"type\": \"typography\", \"content\": \"@item.title\" }] }]\n */\nexport type RenderItemLambda = ['fn', string, AnyPatternConfig];\n\n/**\n * Dynamic-collection children entry: renders one child per item of a collection\n * expression, authored inline in a `children:` position and kept verbatim as IR\n * (no new node kind). The collection expression is an {@link SExpr} evaluated at\n * render time; the {@link RenderItemLambda} body is instantiated per item with\n * the lambda param bound as an `@item`-scope binding. Both execution paths lower\n * onto the one lambda + `@item` + splice machinery.\n *\n * @example [\"array/map\", \"@entity.tasks\", [\"fn\", \"item\", { \"type\": \"typography\", \"content\": \"@item.title\" }]]\n */\nexport type RenderChildrenMap = ['array/map', SExpr, RenderItemLambda];\n\n/**\n * Navigate effect - navigates to an internal page path or an external URL.\n * @example ['navigate', '/tasks'] or ['navigate', '/tasks/:id', { id: '123' }]\n * @example ['navigate', 'https://example.com']\n */\nexport type NavigateEffect =\n | ['navigate', string | SExpr]\n | ['navigate', string | SExpr, Record<string, string>];\n\n/**\n * Emit effect - emits an event, optionally with payload.\n * @example ['emit', 'SAVE'] or ['emit', 'PLAYER_DIED', { playerId: '@entity.id' }]\n * @example ['emit', 'FILTER_CHANGED', '@entity.filters']\n */\nexport type EmitEffect = ['emit', string] | ['emit', string, EventPayload | string];\n\n/**\n * `emit:` config block attached to async / reactive data operators.\n *\n * Each key names an event the runtime should fire on the bus when the\n * effect reaches the corresponding lifecycle point. The set of keys an\n * operator actually supports is enforced by the compiler validator:\n *\n * | Operator | Supported keys |\n * |------------------|---------------------------|\n * | `fetch` | `success`, `failure` |\n * | `persist` | `success`, `failure` |\n * | `call-service` | `success`, `failure` |\n * | `set` | `success` |\n * | `ref` | `on_change`, `failure` |\n * | `os/watch-*` | `on_message`, `failure` |\n *\n * Payload convention:\n * - `success` / `on_change` → the effect's result (fetched entity, new value)\n * - `failure` → `{ error: string, code?: string }`\n * - `on_message` → the incoming message (os/watch-* streams)\n *\n * See `docs/Almadar_Std_Gaps.md` §3.1 for the close-the-circuit design.\n */\nexport interface EmitConfig {\n /** Fires after a one-shot async effect resolves successfully. */\n success?: string;\n /** Fires when the effect throws; payload is `{ error: string }`. */\n failure?: string;\n /** Reactive-subscription event (per update for `ref`). */\n on_change?: string;\n /** Per-event fire for `os/watch-*` streams. */\n on_message?: string;\n}\n\n/**\n * Set effect - sets a binding to a value.\n *\n * Two forms are supported to match the runtime's `set` handler signature\n * `(targetId, field, value)`:\n *\n * - 3-element binding form (legacy / std behaviors): ['set', '@entity.field', value]\n * - 4-element target form (canonical runtime): ['set', entityId, fieldName, value]\n *\n * The 4-element form is what `OrbitalServerRuntime`'s set handler\n * dispatches directly (`update(entityType, targetId, { field: value })`).\n * Prefer the 4-element form when authoring schemas in TypeScript that\n * load directly into the runtime.\n *\n * @example ['set', '@entity.health', 100] // 3-element\n * @example ['set', '@entity.id', 'health', 100] // 4-element\n * @example ['set', '@entity.id', 'count', ['+', '@entity.count', 1]]\n */\nexport type SetEffect =\n | ['set', string, SExpr]\n | ['set', string, string, SExpr];\n\n/**\n * Trailing config object on persist effects. When present, it carries the\n * `emit` map specifying which events to fire on persist success/failure.\n * Mirrors what the runtime's `EffectExecutor` reads at the 5th tuple\n * position. See `(persist create Entity @payload.data { emit: { success:\n * \"Saved\", failure: \"SaveFailed\" } })` in `.lolo` source.\n */\nexport type PersistEmitConfig = {\n emit?: { success?: string; failure?: string };\n};\n\n/**\n * Persist effect data argument: an entity row literal (field map), a\n * binding string referencing a row in scope (e.g. `@payload.data`,\n * `@entity`), or an expression form that evaluates to a row (e.g.\n * `[\"object/merge\", \"@payload.data\", { sender: \"@user.id\" }]`). At\n * runtime, binding strings and expressions resolve to `EntityRow` values\n * before the persist op runs — both paths evaluate the expression first.\n */\nexport type PersistData = EntityRow | string | SExpr[];\n\n/**\n * Persist effect - creates, updates, deletes, or clears entities.\n *\n * Each operation accepts an optional trailing `PersistEmitConfig` so the\n * runtime can fire success / failure events when the operation completes.\n *\n * @example ['persist', 'create', 'Task', { title: '@payload.title' }]\n * @example ['persist', 'update', '@entity.entityType', '@payload.data']\n * @example ['persist', 'create', 'Task', '@payload.data', { emit: { success: 'TaskCreated' } }]\n */\nexport type PersistEffect =\n | ['persist', 'create', string, PersistData]\n | ['persist', 'create', string, PersistData, PersistEmitConfig]\n | ['persist', 'update', string, PersistData]\n | ['persist', 'update', string, PersistData, PersistEmitConfig]\n | ['persist', 'delete', string]\n | ['persist', 'delete', string, PersistData]\n | ['persist', 'delete', string, PersistData, PersistEmitConfig]\n | ['persist', 'clear', string]\n | ['persist', 'clear', string, PersistData]\n | ['persist', 'clear', string, PersistData, PersistEmitConfig];\n\n/**\n * Call service effect - invokes an external service.\n *\n * Two shapes are accepted:\n *\n * 1. Flat form (what the runtime reads and every .orb file uses):\n * `['call-service', serviceName, action, params?]` — args[0]=service,\n * args[1]=action, args[2]=params. This is the canonical form; the\n * runtime's EffectExecutor decodes exactly these positions.\n *\n * 2. Legacy config-object form (kept for the `callService()` helper):\n * `['call-service', serviceName, CallServiceConfig]` — retained so\n * older call sites using the builder helper continue to typecheck.\n *\n * @example ['call-service', 'llm', 'generate', { userPrompt: '@entity.inputText' }]\n * @example ['call-service', 'llm', 'generate', { userPrompt: '...' }, { emit: { success: 'OK', failure: 'ERR' } }]\n * @example ['call-service', 'WeatherAPI', { service: 'weather', action: 'get', onSuccess: 'OK' }]\n */\nexport type CallServiceEffect =\n | ['call-service', string, string]\n | ['call-service', string, string, ServiceParams]\n | ['call-service', string, string, ServiceParams, PersistEmitConfig]\n | ['call-service', string, CallServiceConfig];\n\n/**\n * Spawn effect - creates a new entity instance (games).\n * @example ['spawn', 'Bullet', { x: '@entity.x', y: '@entity.y' }]\n */\nexport type SpawnEffect = ['spawn', string] | ['spawn', string, EntityRow];\n\n/**\n * Despawn effect - removes an entity instance (games).\n * @example ['despawn', '@entity.id']\n */\nexport type DespawnEffect = ['despawn', string];\n\n/**\n * Do effect - executes multiple effects in sequence.\n * Uses SExpr to allow deeply nested conditionals.\n * @example ['do', ['set', '@entity.x', 0], ['set', '@entity.y', 0]]\n */\nexport type DoEffect = ['do', ...SExpr[]];\n\n/**\n * Notify effect - sends a notification.\n * @example ['notify', 'in_app', 'Task created successfully']\n * @example ['notify', 'in_app', ['str/concat', 'Item: ', '@entity.name']]\n */\nexport type NotifyEffect =\n | ['notify', string, string | SExpr]\n | ['notify', string, string | SExpr, string];\n\n/**\n * Options accepted by `fetch` / `ref` / `deref` effects. Mirrors what\n * `OrbitalServerRuntime`'s fetch handler reads at runtime: `id`, `filter`,\n * `limit`, `offset`, `include`, plus the trailing `emit:` map for\n * success/failure event names.\n */\nexport type FetchOptions = {\n /** Fetch a single entity by ID */\n id?: string;\n /** Filter expression (S-expression) */\n filter?: SExpr;\n /** Maximum number of entities to return */\n limit?: number;\n /** Number of entities to skip */\n offset?: number;\n /** Relations to populate (entity field names) */\n include?: string[];\n /** Lifecycle events to emit on resolve / reject */\n emit?: { success?: string; failure?: string };\n};\n\n/**\n * Fetch effect - retrieves entity data (server-side).\n * @example ['fetch', 'User'] or ['fetch', 'User', { id: '@payload.userId' }]\n */\nexport type FetchEffect = ['fetch', string] | ['fetch', string, FetchOptions];\n\n/**\n * Result returned by a fetch / ref / deref handler.\n *\n * `rows` carries the entity (or entities) that survived `filter` AND\n * pagination (`offset`/`limit`). `total` is the count of rows that\n * matched the filter BEFORE pagination, so paginating consumers can\n * compute `totalPages = ceil(total / pageSize)` without a second\n * round-trip. Single-entity fetches by id return `total: 1` (or `0`\n * if not found, in which case the handler returns `null` instead).\n */\nexport interface FetchResult {\n rows: EntityRow | EntityRow[];\n total: number;\n}\n\n/**\n * If effect - conditional effect execution.\n * Uses SExpr to allow deeply nested conditionals.\n * @example ['if', ['>', '@entity.health', 0], ['emit', 'ALIVE'], ['emit', 'DEAD']]\n */\nexport type IfEffect = ['if', Expression, SExpr] | ['if', Expression, SExpr, SExpr];\n\n/**\n * When effect - conditional effect similar to if but without else.\n * Uses SExpr to allow deeply nested conditionals.\n * @example ['when', ['>', '@entity.health', 0], ['emit', 'ALIVE']]\n */\nexport type WhenEffect = ['when', Expression, SExpr];\n\n/**\n * Let effect - creates local bindings for effects.\n * Uses SExpr to allow deeply nested conditionals.\n * @example ['let', ['temp', ['get', '@payload.value']], ['set', '@entity.value', 'temp']]\n */\nexport type LetEffect = ['let', [string, SExpr][], ...SExpr[]];\n\n/**\n * Log effect - logs a message for debugging.\n * @example ['log', 'User created:', '@entity.name']\n */\nexport type LogEffect = ['log', ...SExpr[]];\n\n/**\n * Wait effect - delays execution.\n * @example ['wait', 1000] - wait 1 second\n */\nexport type WaitEffect = ['wait', number];\n\n// ============================================================================\n// Resource Effects (reactive entity subscriptions and atomic operations)\n// ============================================================================\n\n/**\n * Ref effect - creates a reactive entity subscription.\n * Returns a reactive reference that auto-updates when the entity changes.\n * @example ['ref', '@entity.health'] - reactive subscription to health\n * @example ['ref', 'User', { id: '@payload.userId' }] - reactive ref to specific user\n */\nexport type RefEffect =\n | ['ref', string]\n | ['ref', string, FetchOptions];\n\n/**\n * Deref effect - snapshot read of an entity value.\n * Returns the current value without subscribing to changes.\n * @example ['deref', '@entity.health'] - read current health value\n * @example ['deref', 'User', { id: '@payload.userId' }] - read specific user snapshot\n */\nexport type DerefEffect =\n | ['deref', string]\n | ['deref', string, FetchOptions];\n\n/**\n * Swap! effect - atomic compare-and-swap on an entity field.\n * Only updates if the current value matches the expected value.\n * @example ['swap!', '@entity.health', ['fn', ['old'], ['-', 'old', '@payload.damage']]]\n * @example ['swap!', '@entity.counter', ['+', '@entity.counter', 1]]\n */\nexport type SwapEffect = ['swap!', string, SExpr];\n\n/**\n * Options accepted by `watch` effects. Mirrors what the runtime reads when\n * registering the change callback: `debounce` and the trailing `emit:` map.\n */\nexport type WatchOptions = {\n /** Debounce duration in milliseconds */\n debounce?: number;\n /** Lifecycle events to emit on update / failure */\n emit?: { on_message?: string; failure?: string };\n};\n\n/**\n * Watch effect - registers a callback for entity changes.\n * Emits an event whenever the watched binding changes.\n * @example ['watch', '@entity.health', 'HEALTH_CHANGED']\n * @example ['watch', '@entity.status', 'STATUS_UPDATED', { debounce: 100 }]\n */\nexport type WatchEffect =\n | ['watch', string, string]\n | ['watch', string, string, WatchOptions];\n\n/**\n * Atomic effect - groups multiple effects into an atomic transaction.\n * All effects either succeed together or are rolled back.\n * @example ['atomic', ['set', '@entity.x', 10], ['set', '@entity.y', 20]]\n * @example ['atomic', ['persist', 'update', 'User', { balance: 100 }], ['emit', 'BALANCE_UPDATED']]\n */\nexport type AtomicEffect = ['atomic', ...SExpr[]];\n\n// ============================================================================\n// ML Effects (from almadar-std/modules/nn, tensor, train)\n// ============================================================================\n\n/**\n * One layer in an NN architecture description. The set of valid layer kinds\n * lives in `almadar-std/modules/nn`; here we keep the wire shape generic\n * enough for the cross-package runtime + Python bridge to round-trip.\n */\nexport type NnLayer = {\n type: string;\n [key: string]: string | number | boolean | number[] | string[] | undefined;\n};\n\n/**\n * Hyperparameters for `train` and `evaluate`. Recursive to allow nested\n * optimizer / scheduler config blocks without falling back to `unknown`.\n */\nexport type NnConfig = {\n [key: string]: string | number | boolean | string[] | number[] | NnConfig | undefined;\n};\n\n/**\n * Forward-pass config: `input` is a binding string (`@payload.input`), and\n * `on-complete` names the event to fire when the prediction lands.\n */\nexport type ForwardConfig = {\n architecture: NnLayer[];\n input: string;\n 'on-complete'?: string;\n config?: NnConfig;\n};\n\n/**\n * Training-loop config. `dataset` is a binding string referencing the rows\n * to train on. Optimizer / loss / scheduler land inside `config`.\n */\nexport type TrainConfig = {\n architecture: NnLayer[];\n dataset: string;\n config?: NnConfig;\n 'on-complete'?: string;\n};\n\n/**\n * Evaluation config. `metrics` lists named metrics the Python backend\n * computes (`accuracy`, `precision`, ...).\n */\nexport type EvaluateConfig = {\n architecture: NnLayer[];\n dataset: string;\n metrics: string[];\n config?: NnConfig;\n 'on-complete'?: string;\n};\n\n/**\n * Forward effect - runs a neural network forward pass (Python backend).\n * @example ['forward', 'primary', { architecture: [...], input: '@payload.input', 'on-complete': 'PREDICTION_READY' }]\n */\nexport type ForwardEffect = ['forward', string, ForwardConfig];\n\n/**\n * Train effect - runs a training loop (Python backend).\n * @example ['train', { architecture: [...], dataset: '@entity.data', config: { epochs: 10 }, 'on-complete': 'TRAINING_DONE' }]\n */\nexport type TrainEffect = ['train', TrainConfig];\n\n/**\n * Evaluate effect - runs model evaluation (Python backend).\n * @example ['evaluate', { architecture: [...], dataset: '@entity.testData', metrics: ['accuracy'], 'on-complete': 'EVAL_DONE' }]\n */\nexport type EvaluateEffect = ['evaluate', EvaluateConfig];\n\n/**\n * Checkpoint save effect - saves model weights.\n * @example ['checkpoint/save', '/path/to/model.pt', '@entity.weights']\n */\nexport type CheckpointSaveEffect = ['checkpoint/save', string, SExpr];\n\n/**\n * Checkpoint load effect - loads model weights.\n * @example ['checkpoint/load', '/path/to/model.pt']\n */\nexport type CheckpointLoadEffect = ['checkpoint/load', string];\n\n// ============================================================================\n// Agent Effects (from agent/* operator namespace)\n// ============================================================================\n\n/**\n * Agent effect - invokes an agent/* operator.\n * Covers all 22 operators in the std-agent category.\n * @example ['agent/memorize', 'use data-grid for tables', 'preference']\n * @example ['agent/recall', 'user preferences']\n * @example ['agent/generate', 'Summarize this schema']\n */\nexport type AgentEffect = [`agent/${string}`, ...SExpr[]];\n\n/**\n * OS effect - invokes an os/* operator.\n *\n * Covers reactive subscriptions to OS / network resources:\n * - `os/watch-http`, `os/watch-ws`, `os/watch-sse` — long-lived streams\n * that fire `on_message` / `failure` events through a trailing\n * `EmitConfig` block (see `EmitConfig` for the supported keys).\n * - `os/read-file`, `os/exec`, etc. — one-shot OS operations.\n *\n * @example ['os/watch-http', 'wss://push.example.com', { emit: { on_message: 'PUSH_RECEIVED', failure: 'PUSH_DISCONNECTED' } }]\n * @example ['os/read-file', '/etc/hosts']\n */\nexport type OsEffect = [`os/${string}`, ...SExpr[]];\n\n/**\n * Browser effect - invokes a browser/* device operator (client host path).\n * User-initiated, async, resolves via the standard trailing emit envelope.\n * Concrete operators (browser/open-file-picker, browser/clipboard-read,\n * browser/clipboard-write, browser/geolocation-current) and their arity /\n * payload shapes live in @almadar/std BROWSER_OPERATORS.\n * @example ['browser/open-file-picker', { multiple: false }, { emit: { success: 'FILES_PICKED', failure: 'PICK_CANCELLED' } }]\n */\nexport type BrowserEffect = [`browser/${string}`, ...SExpr[]];\n\n/**\n * LLM effect - invokes an llm/* operator (agent path).\n * @example ['llm/generate', '@entity.request', { emit: { success: 'PLANNED', failure: 'PLAN_FAILED' } }]\n */\nexport type LlmEffect = [`llm/${string}`, ...SExpr[]];\n\n/**\n * Behavior effect - invokes a behavior/* operator (agent path).\n * @example ['behavior/instantiate', '@entity.plan', { emit: { failure: 'BUILD_FAILED' } }]\n */\nexport type BehaviorEffect = [`behavior/${string}`, ...SExpr[]];\n\n/**\n * Validate effect - invokes a validate/* operator (agent path).\n * @example ['validate/validate', '@entity.schema', { emit: { failure: 'INVALID' } }]\n */\nexport type ValidateEffect = [`validate/${string}`, ...SExpr[]];\n\n/**\n * Remaining agent-path operator effects: session/* (workspace session ops),\n * compose/* (schema composition), trace/* (trace emission), memory/*\n * (agent memory), application/* (app lifecycle). Expression-only namespaces\n * (array/, math/, object/, str/, …) are deliberately NOT effect heads.\n * @example ['session/write-spec', '@entity.spec']\n * @example ['compose/compose-all', { emit: { failure: 'COMPOSE_FAILED' } }]\n */\nexport type SessionEffect = [`session/${string}`, ...SExpr[]];\nexport type ComposeEffect = [`compose/${string}`, ...SExpr[]];\nexport type TraceEffect = [`trace/${string}`, ...SExpr[]];\nexport type MemoryEffect = [`memory/${string}`, ...SExpr[]];\nexport type ApplicationEffect = [`application/${string}`, ...SExpr[]];\n\n// ============================================================================\n// Async Effects (from almadar-std/modules/async)\n// ============================================================================\n\n/**\n * Async delay effect - wait then execute effects.\n * @example ['async/delay', 2000, ['emit', 'TIMEOUT']]\n */\nexport type AsyncDelayEffect = ['async/delay', number | string, ...Effect[]];\n\n/**\n * Async debounce effect - debounce then execute effect.\n * @example ['async/debounce', 300, ['emit', 'SEARCH_COMPLETE']]\n * @example ['async/debounce', '@entity.debounceMs', ['emit', 'SEARCH_COMPLETE']]\n */\nexport type AsyncDebounceEffect = ['async/debounce', number | string, SExpr];\n\n/**\n * Async throttle effect - throttle then execute effect.\n * @example ['async/throttle', 100, ['emit', 'SCROLL_HANDLED']]\n * @example ['async/throttle', '@entity.throttleMs', ['emit', 'SCROLL_HANDLED']]\n */\nexport type AsyncThrottleEffect = ['async/throttle', number | string, SExpr];\n\n/**\n * Async interval effect - execute effect at intervals.\n * @example ['async/interval', 1000, ['emit', 'TICK']]\n * @example ['async/interval', '@entity.intervalMs', ['emit', 'POLL_TICK']]\n */\nexport type AsyncIntervalEffect = ['async/interval', number | string, SExpr];\n\n/**\n * Async race effect - first effect to complete wins.\n * @example ['async/race', ['call', 'api1'], ['call', 'api2']]\n */\nexport type AsyncRaceEffect = ['async/race', ...Effect[]];\n\n/**\n * Async all effect - wait for all effects to complete.\n * @example ['async/all', ['call', 'api1'], ['call', 'api2']]\n */\nexport type AsyncAllEffect = ['async/all', ...Effect[]];\n\n/**\n * Async sequence effect - execute effects in sequence.\n * @example ['async/sequence', ['call', 'validate'], ['call', 'save']]\n */\nexport type AsyncSequenceEffect = ['async/sequence', ...Effect[]];\n\n/**\n * Union of all typed effects.\n * Provides compile-time validation for common effect types.\n */\nexport type TypedEffect =\n | RenderUIEffect\n | NavigateEffect\n | EmitEffect\n | SetEffect\n | PersistEffect\n | CallServiceEffect\n | SpawnEffect\n | DespawnEffect\n | DoEffect\n | NotifyEffect\n | FetchEffect\n | IfEffect\n | WhenEffect\n | LetEffect\n | LogEffect\n | WaitEffect\n | RefEffect\n | DerefEffect\n | SwapEffect\n | WatchEffect\n | AtomicEffect\n | AsyncDelayEffect\n | AsyncDebounceEffect\n | AsyncThrottleEffect\n | AsyncIntervalEffect\n | AsyncRaceEffect\n | AsyncAllEffect\n | AsyncSequenceEffect\n | ForwardEffect\n | TrainEffect\n | EvaluateEffect\n | CheckpointSaveEffect\n | CheckpointLoadEffect\n | AgentEffect\n | OsEffect\n | BrowserEffect\n | LlmEffect\n | BehaviorEffect\n | ValidateEffect\n | SessionEffect\n | ComposeEffect\n | TraceEffect\n | MemoryEffect\n | ApplicationEffect;\n\n// ============================================================================\n// Effect Type (Strictly Typed)\n// ============================================================================\n\n/**\n * Effect type - typed S-expression format.\n *\n * Effects are strongly typed tuples that enforce:\n * - Valid effect operators (render-ui, emit, set, persist, navigate, call-service)\n * - Valid UISlots for render-ui\n * - Valid PatternTypes and props for render-ui\n * - Correct argument types for each effect\n *\n * Available typed effects:\n * - RenderUIEffect: ['render-ui', UISlot, PatternConfig]\n * - NavigateEffect: ['navigate', path] or ['navigate', path, params]\n * - EmitEffect: ['emit', eventName] or ['emit', eventName, payload]\n * - SetEffect: ['set', binding, value]\n * - PersistEffect: ['persist', operation, entity, data?]\n * - CallServiceEffect: ['call-service', serviceName, config]\n *\n * @example\n * [\"set\", \"@entity.health\", 100]\n * [\"emit\", \"PLAYER_DIED\", { \"playerId\": \"@entity.id\" }]\n * [\"render-ui\", \"main\", { \"patternType\": \"entity-table\", \"columns\": [\"name\"] }]\n * [\"call-service\", \"WeatherAPI\", { \"action\": \"getWeather\", \"onSuccess\": \"OK\" }]\n * [\"navigate\", \"/tasks\"]\n * [\"persist\", \"create\", \"Task\", { \"title\": \"@payload.title\" }]\n */\nexport type Effect = TypedEffect;\n\n/**\n * Schema for Effect - validates S-expression format. Arguments validate as\n * s-expr-shaped DATA (`SExprDataSchema`) — literal data arrays (empty or\n * non-operator-headed) are valid argument values; the operator-head refine\n * applies to the effect itself, not to every argument.\n */\nexport const EffectSchema = z.array(SExprDataSchema).min(1).refine(\n (arr) => typeof arr[0] === 'string',\n { message: 'Effect must be an S-expression with a string operator as first element' }\n);\n\nexport type EffectInput = z.input<typeof EffectSchema>;\n\n/**\n * Type guard to check if a value is a valid Effect (S-expression).\n * \n * Validates that a value conforms to the Effect structure. Effects are\n * represented as arrays where the first element is a string (effect type)\n * and subsequent elements are parameters. Used for runtime validation\n * of effect structures.\n * \n * @param {RuntimeValue} value - Value to check\n * @returns {boolean} True if value is a valid Effect, false otherwise\n *\n * @example\n * isEffect(['set', '@entity.health', 100]); // returns true\n * isEffect('not-an-effect'); // returns false\n * isEffect([]); // returns false\n */\nexport function isEffect(value: RuntimeValue): value is Effect {\n return Array.isArray(value) && value.length > 0 && typeof value[0] === 'string';\n}\n\n/**\n * Alias for isEffect (for clarity when working with S-expressions)\n */\nexport const isSExprEffect = isEffect;\n\n// ============================================================================\n// Effect Builder Helpers\n// ============================================================================\n\n/**\n * Creates a set effect for state updates.\n * \n * Generates an effect that sets a binding to a value. Used in state\n * machine transitions to update entity fields, UI state, or other\n * mutable data.\n * \n * @param {string} binding - Target binding (e.g., '@entity.health')\n * @param {SExpr} value - Value to set (can be literal or expression)\n * @returns {Effect} Set effect array\n * \n * @example\n * set('@entity.health', 100); // returns [\"set\", \"@entity.health\", 100]\n * set('@state.loading', false); // returns [\"set\", \"@state.loading\", false]\n */\nexport function set(binding: string, value: SExpr): Effect {\n return ['set', binding, value];\n}\n\n/**\n * Creates an emit effect for event dispatching.\n * \n * Generates an effect that emits an event with optional payload.\n * Used in state machine transitions to trigger events that can be\n * handled by other traits, services, or external systems.\n * \n * @param {string} event - Event name to emit\n * @param {EventPayload} [payload] - Optional event payload\n * @returns {Effect} Emit effect array\n * \n * @example\n * emit('PLAYER_DIED', { playerId: '@entity.id' }); // returns [\"emit\", \"PLAYER_DIED\", { playerId: \"@entity.id\" }]\n * emit('GAME_STARTED'); // returns [\"emit\", \"GAME_STARTED\"]\n */\nexport function emit(event: string, payload?: EventPayload): Effect {\n return payload ? ['emit', event, payload] : ['emit', event];\n}\n\n/**\n * Creates a navigation effect for page routing.\n * \n * Generates an effect that navigates to a specified path with optional\n * parameters. Used in state machine transitions to change pages or\n * update URL parameters.\n * \n * @param {string} path - Target path (e.g., '/tasks')\n * @param {Record<string, string>} [params] - Optional URL parameters\n * @returns {NavigateEffect} Navigation effect array\n * \n * @example\n * navigate('/tasks'); // returns [\"navigate\", \"/tasks\"]\n * navigate('/user', { id: '123' }); // returns [\"navigate\", \"/user\", { id: \"123\" }]\n */\nexport function navigate(path: string): NavigateEffect;\nexport function navigate(path: string, params: Record<string, string>): NavigateEffect;\nexport function navigate(path: string, params?: Record<string, string>): NavigateEffect {\n return params ? ['navigate', path, params] : ['navigate', path];\n}\n\n/**\n * Create a render-ui effect\n * @example [\"render-ui\", \"main\", { \"patternType\": \"entity-table\", \"columns\": [\"name\"] }]\n */\nexport function renderUI(\n target: UISlot,\n pattern: AnyPatternConfig\n): RenderUIEffect;\nexport function renderUI(\n target: UISlot,\n pattern: AnyPatternConfig,\n props: ResolvedPatternProps\n): RenderUIEffect;\nexport function renderUI(\n target: UISlot,\n pattern: AnyPatternConfig,\n props?: ResolvedPatternProps\n): RenderUIEffect {\n return props\n ? ['render-ui', target, pattern, props]\n : ['render-ui', target, pattern];\n}\n\n/**\n * Create a persist effect\n * @example [\"persist\", \"create\", \"Task\", { \"title\": \"@payload.title\" }]\n */\nexport function persist(\n action: 'create' | 'update',\n entity: string,\n data: PersistData\n): PersistEffect;\nexport function persist(\n action: 'delete' | 'clear',\n entity: string,\n data?: PersistData\n): PersistEffect;\nexport function persist(\n action: 'create' | 'update' | 'delete' | 'clear',\n entity: string,\n data?: PersistData\n): PersistEffect {\n if (action === 'create' || action === 'update') {\n return ['persist', action, entity, data!] as PersistEffect;\n }\n return data\n ? ['persist', action, entity, data] as PersistEffect\n : ['persist', action, entity] as PersistEffect;\n}\n\n/**\n * Create a call-service effect\n * @example [\"call-service\", \"stripe\", { \"service\": \"stripe\", \"action\": \"charge\", \"onSuccess\": \"OK\", \"onError\": \"ERR\" }]\n */\nexport function callService(\n serviceName: string,\n config: CallServiceConfig\n): CallServiceEffect {\n return ['call-service', serviceName, config];\n}\n\n/**\n * Create a spawn effect (games)\n * @example [\"spawn\", \"Bullet\", { \"x\": \"@entity.x\", \"y\": \"@entity.y\" }]\n */\nexport function spawn(entity: string): SpawnEffect;\nexport function spawn(entity: string, initialState: EntityRow): SpawnEffect;\nexport function spawn(entity: string, initialState?: EntityRow): SpawnEffect {\n return initialState ? ['spawn', entity, initialState] : ['spawn', entity];\n}\n\n/**\n * Create a despawn effect (games)\n * @example [\"despawn\", \"@entity.id\"]\n */\nexport function despawn(entityId: string): DespawnEffect {\n return ['despawn', entityId];\n}\n\n/**\n * Create a do effect (multiple effects)\n * @example [\"do\", [\"set\", \"@entity.x\", 0], [\"set\", \"@entity.y\", 0]]\n */\nexport function doEffects(...effects: SExpr[]): DoEffect {\n return ['do', ...effects];\n}\n\n/**\n * Create a notify effect\n * @example [\"notify\", \"in_app\", \"Task created successfully\"]\n */\nexport function notify(\n channel: 'email' | 'push' | 'sms' | 'in_app',\n message: string\n): NotifyEffect;\nexport function notify(\n channel: 'email' | 'push' | 'sms' | 'in_app',\n message: string,\n recipient: string\n): NotifyEffect;\nexport function notify(\n channel: 'email' | 'push' | 'sms' | 'in_app',\n message: string,\n recipient?: string\n): NotifyEffect {\n return recipient\n ? ['notify', channel, message, recipient]\n : ['notify', channel, message];\n}\n\n/**\n * Create a fetch effect (server-side data retrieval)\n * @example [\"fetch\", \"User\"] - fetch all users\n * @example [\"fetch\", \"User\", { \"id\": \"@payload.userId\" }] - fetch by ID\n * @example [\"fetch\", \"User\", { \"filter\": [\"=\", \"@entity.status\", \"active\"], \"limit\": 10 }]\n */\nexport function fetch(entity: string): FetchEffect;\nexport function fetch(entity: string, options: FetchOptions): FetchEffect;\nexport function fetch(entity: string, options?: FetchOptions): FetchEffect {\n return options ? ['fetch', entity, options] : ['fetch', entity];\n}\n\n// ============================================================================\n// Resource Effect Builder Helpers\n// ============================================================================\n\n/**\n * Create a ref effect (reactive entity subscription).\n *\n * @param {string} binding - Binding or entity name to subscribe to\n * @param {FetchOptions} [selector] - Optional selector for specific entity\n * @returns {RefEffect} Ref effect array\n *\n * @example\n * ref('@entity.health'); // returns [\"ref\", \"@entity.health\"]\n * ref('User', { id: '@payload.userId' }); // returns [\"ref\", \"User\", { id: \"@payload.userId\" }]\n */\nexport function ref(binding: string): RefEffect;\nexport function ref(binding: string, selector: FetchOptions): RefEffect;\nexport function ref(binding: string, selector?: FetchOptions): RefEffect {\n return selector ? ['ref', binding, selector] : ['ref', binding];\n}\n\n/**\n * Create a deref effect (snapshot read).\n *\n * @param {string} binding - Binding or entity name to read\n * @param {FetchOptions} [selector] - Optional selector for specific entity\n * @returns {DerefEffect} Deref effect array\n *\n * @example\n * deref('@entity.health'); // returns [\"deref\", \"@entity.health\"]\n * deref('User', { id: '@payload.userId' }); // returns [\"deref\", \"User\", { id: \"@payload.userId\" }]\n */\nexport function deref(binding: string): DerefEffect;\nexport function deref(binding: string, selector: FetchOptions): DerefEffect;\nexport function deref(binding: string, selector?: FetchOptions): DerefEffect {\n return selector ? ['deref', binding, selector] : ['deref', binding];\n}\n\n/**\n * Create a swap! effect (atomic compare-and-swap).\n *\n * @param {string} binding - Binding to atomically update\n * @param {SExpr} transform - Transformation expression applied to the current value\n * @returns {SwapEffect} Swap effect array\n *\n * @example\n * swap('@entity.counter', ['+', '@entity.counter', 1]);\n * // returns [\"swap!\", \"@entity.counter\", [\"+\", \"@entity.counter\", 1]]\n */\nexport function swap(binding: string, transform: SExpr): SwapEffect {\n return ['swap!', binding, transform];\n}\n\n/**\n * Create a watch effect (entity change callback).\n *\n * @example\n * watch('@entity.health', 'HEALTH_CHANGED');\n * watch('@entity.status', 'STATUS_UPDATED', { debounce: 100 });\n */\nexport function watch(binding: string, event: string): WatchEffect;\nexport function watch(binding: string, event: string, options: WatchOptions): WatchEffect;\nexport function watch(binding: string, event: string, options?: WatchOptions): WatchEffect {\n return options\n ? ['watch', binding, event, options]\n : ['watch', binding, event];\n}\n\n/**\n * Create an atomic effect (transaction group).\n *\n * @param {...SExpr[]} effects - Effects to execute atomically\n * @returns {AtomicEffect} Atomic effect array\n *\n * @example\n * atomic(['set', '@entity.x', 10], ['set', '@entity.y', 20]);\n * // returns [\"atomic\", [\"set\", \"@entity.x\", 10], [\"set\", \"@entity.y\", 20]]\n */\nexport function atomic(...effects: SExpr[]): AtomicEffect {\n return ['atomic', ...effects];\n}\n\n// ============================================================================\n// Runtime Pattern Types\n// ============================================================================\n\n/** Resolved pattern props for render-ui effects at runtime. Recursive for nested pattern configs. */\nexport type ResolvedPatternProps = {\n [prop: string]: string | number | boolean | null | undefined | ResolvedPatternProps | ResolvedPatternProps[];\n};\n\n/** A node in a render-ui effect tree. */\nexport interface RenderUINode {\n type: string;\n props?: ResolvedPatternProps;\n /** Static child nodes and/or dynamic-collection map entries. A\n * {@link RenderChildrenMap} entry expands at render time into resolved\n * `RenderUINode`s, so components always receive a flat, fully-resolved list. */\n children?: Array<RenderUINode | RenderChildrenMap>;\n content?: string;\n entity?: string;\n renderItem?: RenderUINode;\n}\n\n","/**\n * State Machine Types (Self-Contained)\n *\n * Defines state machine types for traits.\n * Copied from schema/state-machine.ts to make orbitals/ self-contained.\n *\n * @packageDocumentation\n */\n\nimport { z } from \"zod\";\nimport type { Effect } from \"./effect.js\";\nimport { EffectSchema } from \"./effect.js\";\nimport type { Expression } from \"./expression.js\";\nimport { ExpressionSchema } from \"./expression.js\";\nimport type { EventId } from \"./identity.js\";\nimport { EventIdSchema } from \"./identity.js\";\n\n// ============================================================================\n// State\n// ============================================================================\n\n/**\n * Represents a state in the state machine\n */\nexport type State = {\n /** State name (unique identifier) */\n name: string;\n /** Whether this is the initial state */\n isInitial?: boolean;\n /** Whether this is a terminal state (no outgoing transitions expected) */\n isTerminal?: boolean;\n /** Whether this is a final state (legacy alias for isTerminal) */\n isFinal?: boolean;\n /** Human-readable description */\n description?: string;\n /** Effect names to run on entry */\n onEntry?: string[];\n /** Effect names to run on exit */\n onExit?: string[];\n};\n\nexport const StateSchema = z.object({\n name: z.string().min(1, \"State name is required\"),\n isInitial: z.boolean().optional(),\n isTerminal: z.boolean().optional(),\n isFinal: z.boolean().optional(),\n description: z.string().optional(),\n onEntry: z.array(z.string()).optional(),\n onExit: z.array(z.string()).optional(),\n});\n\n// ============================================================================\n// Event\n// ============================================================================\n\n/**\n * Payload field definition for events\n */\nexport type PayloadField = {\n name: string;\n /**\n * Field type. Mirrors the Rust validator's acceptance: any non-empty\n * string. Primitives ('string' | 'number' | 'boolean' | 'object' |\n * 'array') are the canonical values; entity-name references like\n * 'CartItem' and array-of-entity references like '[CartItem]' are also\n * valid because the Rust IR's PayloadField.field_type is just a String.\n */\n type: string;\n required?: boolean;\n /** Structured property schema for object-typed payload fields (recursive). */\n properties?: ReadonlyArray<PayloadField>;\n};\n\nexport const PayloadFieldSchema: z.ZodType<PayloadField> = z.object({\n name: z.string().min(1),\n type: z.string().min(1),\n required: z.boolean().optional(),\n properties: z.lazy(() => z.array(PayloadFieldSchema)).optional(),\n});\n\n/**\n * Represents an event that can trigger transitions\n */\nexport type Event = {\n /** Event key (UPPER_SNAKE_CASE) */\n key: string;\n /** V4 dual-carry id sibling of `key` — optional until the Phase-7 flip. */\n id?: EventId;\n /** Human-readable name */\n name: string;\n /** Description (authored `@description` on the emit/listen). */\n description?: string;\n /** User-vocabulary synonyms (comma-separated) — per-event analogue of a\n * field/config `@synonyms`. Feeds the curation event matcher. */\n synonyms?: string;\n /** Authoring tier (`essential`/`customization`/`advanced`/`internal`). */\n tier?: string;\n /** Expected payload structure */\n payloadSchema?: PayloadField[];\n /** Domain vs System classification (optional, for analysis) */\n classification?: \"domain\" | \"system\";\n /** Semantic role of this event (optional, for analysis) */\n semanticRole?: string;\n};\n\nexport const EventSchema = z.object({\n key: z.string().min(1, \"Event key is required\"),\n id: EventIdSchema.optional(),\n name: z.string().min(1, \"Event name is required\"),\n description: z.string().optional(),\n synonyms: z.string().optional(),\n tier: z.string().optional(),\n payloadSchema: z.array(PayloadFieldSchema).optional(),\n classification: z.enum([\"domain\", \"system\"]).optional(),\n semanticRole: z.string().optional(),\n});\n\n// ============================================================================\n// Guard\n// ============================================================================\n\n/**\n * Represents a named guard condition.\n * Expression must be an S-expression.\n *\n * @example\n * {\n * name: \"hasHealth\",\n * expression: [\">\", \"@entity.health\", 0],\n * description: \"Check if entity has health remaining\"\n * }\n */\nexport type Guard = {\n name: string;\n /** Guard expression - S-expression array only */\n expression: Expression;\n description?: string;\n};\n\nexport const GuardSchema = z.object({\n name: z.string().min(1, \"Guard name is required\"),\n expression: ExpressionSchema,\n description: z.string().optional(),\n});\n\n// ============================================================================\n// Transition (Effect imported separately to avoid circular deps)\n// ============================================================================\n\n/**\n * Represents a transition between states.\n * Guards and effects must be S-expressions.\n *\n * @example\n * {\n * from: \"idle\",\n * to: \"running\",\n * event: \"START\",\n * guard: [\">\", \"@entity.fuel\", 0],\n * effects: [\n * [\"set\", \"@entity.status\", \"running\"],\n * [\"emit\", \"ENGINE_STARTED\"]\n * ]\n * }\n */\nexport type Transition = {\n /** Source state name */\n from: string;\n /** Target state name */\n to: string;\n /** Event key that triggers this transition */\n event: string;\n /** V4 dual-carry id sibling of `event` — optional until the Phase-7 flip. */\n eventId?: EventId;\n /** Guard expression - S-expression array */\n guard?: Expression | null;\n /** Effects to execute - S-expression arrays */\n effects?: Effect[];\n /** Description */\n description?: string | null;\n};\n\nexport const TransitionSchema = z.object({\n from: z.string().min(1, \"Transition source state is required\"),\n to: z.string().min(1, \"Transition target state is required\"),\n event: z.string().min(1, \"Transition event is required\"),\n eventId: EventIdSchema.optional(),\n guard: ExpressionSchema.nullish(),\n effects: z.array(EffectSchema).optional(),\n description: z.string().nullish(),\n});\n\n// ============================================================================\n// State Machine\n// ============================================================================\n\n/**\n * Complete state machine definition\n */\nexport type StateMachine = {\n /** All states in the machine */\n states: State[];\n /** All events that can be triggered */\n events: Event[];\n /** All transitions between states */\n transitions: Transition[];\n /** Named guard definitions */\n guards?: Guard[];\n};\n\nexport const StateMachineSchema = z.object({\n states: z.array(StateSchema).min(1, \"At least one state is required\"),\n events: z.array(EventSchema),\n transitions: z.array(TransitionSchema),\n guards: z.array(GuardSchema).optional(),\n});\n\n// ============================================================================\n// Type exports\n// ============================================================================\n\nexport type StateInput = z.input<typeof StateSchema>;\nexport type EventInput = z.input<typeof EventSchema>;\nexport type GuardInput = z.input<typeof GuardSchema>;\nexport type TransitionInput = z.input<typeof TransitionSchema>;\nexport type StateMachineInput = z.input<typeof StateMachineSchema>;\n\n// ============================================================================\n// Event Utilities\n// ============================================================================\n\n/**\n * Check if an event is a circuit event (not internal/system event).\n * Circuit events are user-defined events that participate in the closed circuit pattern.\n * Internal/system events start with underscore (e.g., _INIT, _TICK, _TIMER).\n *\n * @param {string} event - Event name to check\n * @returns {boolean} true if event is a circuit event (doesn't start with underscore)\n *\n * @example\n * isCircuitEvent('CREATE') // true\n * isCircuitEvent('SAVE') // true\n * isCircuitEvent('_INIT') // false (internal)\n * isCircuitEvent('_TICK') // false (internal)\n */\nexport function isCircuitEvent(event: string): boolean {\n return !event.startsWith('_');\n}\n","/**\n * Trait Types (Self-Contained)\n *\n * Defines trait types for behavioral patterns.\n * Self-contained - imports only from local orbital types.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\nimport type { TraitId, EntityId, EventId, PageId, OrbitalId } from './identity.js';\nimport { TraitIdSchema, EntityIdSchema, EventIdSchema, PageIdSchema, OrbitalIdSchema } from './identity.js';\nimport type { StateMachine } from './state-machine.js';\nimport { StateMachineSchema } from './state-machine.js';\nimport type { Effect } from './effect.js';\nimport { EffectSchema } from './effect.js';\nimport type { Entity } from './entity.js';\nimport { EntitySchema } from './entity.js';\nimport type { AnyPatternConfig } from '../patterns/index.js';\nimport type { Expression, SExpr } from './expression.js';\nimport { ExpressionSchema, SExprSchema } from './expression.js';\nimport { JsonValueSchema } from './json.js';\n\n// ============================================================================\n// Trait Configuration\n// ============================================================================\n\n/**\n * A single value in a trait's call-site `config: { ... }` block. Supports\n * scalars (string, number, boolean, null), arrays (e.g. `fields: [\"name\",\n * \"description\"]`), and nested objects. This is the authoring surface for\n * molecules to parameterize imported atoms: the atom's render-ui reads back\n * via `@config.<key>` bindings.\n */\nexport type TraitConfigValue =\n | string\n | number\n | boolean\n | null\n | ReadonlyArray<TraitConfigValue>\n | TraitConfigObject;\n\nexport type TraitConfigObject = {\n readonly [key: string]: TraitConfigValue;\n};\n\nexport type TraitConfig = TraitConfigObject;\n\n/** Zod schema for TraitConfig. Recursive via z.lazy to allow nested structures. */\nexport const TraitConfigValueSchema: z.ZodType<TraitConfigValue> = z.lazy(() =>\n z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(TraitConfigValueSchema),\n z.record(TraitConfigValueSchema),\n ])\n);\n\nexport const TraitConfigSchema: z.ZodType<TraitConfig> = z.record(TraitConfigValueSchema);\n\n/**\n * A single entry in a call-site `config { }` override block. Either a plain\n * wiring value (`TraitConfigValue` — string, number, bool, array, object) or\n * a fully-annotated re-declaration (`ConfigFieldDeclaration` — carries `type`,\n * optional `label`/`description`/`synonyms`/`tier`). Disambiguated at runtime\n * by `isCallSiteConfigDeclaration`: the presence of a `\"type\"` string key\n * marks the annotated form.\n *\n * The `.orb` compiler emits plain values for wiring entries and\n * `{ type, default, ... }` objects for annotated entries. Consumers that only\n * need the value (e.g. `apply-params-to-orb.ts`) read `entry` directly for\n * primitives or `entry.default` for the declaration form.\n */\nexport type CallSiteConfigEntry = TraitConfigValue | ConfigFieldDeclaration;\n\n/** Typed map of call-site config entries (one per knob). */\nexport type CallSiteConfig = Readonly<Record<string, CallSiteConfigEntry>>;\n\n/**\n * Type guard: returns `true` when `entry` is an annotated `ConfigFieldDeclaration`\n * (a config-field SCHEMA: a `\"type\"` string key AND a `\"default\"` value slot)\n * rather than a plain wiring value or a render value object.\n *\n * The `\"default\"` requirement disambiguates a declaration from a `render-ui`\n * VALUE object (e.g. `{ type: \"tabs\", items: \"@entity.items\", ... }`) that\n * coincidentally carries a UI-component `type` key — such a value has no\n * `default` slot and is a `TraitConfigValue`, not a schema declaration. Every\n * annotated config field lowered from `.lolo` carries a `default`; misreading a\n * render value as a declaration drops it straight into the `config` map where\n * Rust's `serde` rejects its inner fields (e.g. `items` is a binding string,\n * not a `FieldDefinition`).\n */\nexport function isCallSiteConfigDeclaration(\n entry: CallSiteConfigEntry,\n): entry is ConfigFieldDeclaration {\n return (\n typeof entry === 'object' &&\n entry !== null &&\n !Array.isArray(entry) &&\n 'type' in entry &&\n typeof entry.type === 'string' &&\n 'default' in entry\n );\n}\n\n/** Metadata keys that only ever appear on a declared config-field SCHEMA\n * (never on a render-value object that merely carries a UI `type` key). */\nconst CONFIG_DECLARATION_META_KEYS = ['label', 'description', 'tier', 'synonyms', 'values'] as const;\n\n/**\n * Type guard: `entry` is a declared config-field SCHEMA — a string `type` plus\n * EITHER a `default` slot OR declaration metadata (`label`/`description`/\n * `tier`/`synonyms`/`values`). Broader than `isCallSiteConfigDeclaration`,\n * which requires a `default`: a field declared with no default (e.g.\n * `leftIcon : icon` → `{ type: \"icon\", label, description, tier }`) is still a\n * schema, and its runtime VALUE is its (absent → `undefined`) default, NOT the\n * schema object itself. A render-value object that coincidentally has a `type`\n * key (e.g. `{ type: \"tabs\", items: … }`) carries none of these metadata keys\n * and is therefore left untouched as a plain value.\n */\nfunction isConfigFieldSchema(entry: CallSiteConfigEntry): entry is ConfigFieldDeclaration {\n if (typeof entry !== 'object' || entry === null || Array.isArray(entry)) return false;\n if (!('type' in entry) || typeof (entry as { type?: TraitConfigValue }).type !== 'string') return false;\n return 'default' in entry || CONFIG_DECLARATION_META_KEYS.some((k) => k in entry);\n}\n\n/**\n * Convert a call-site config map into plain runtime values.\n *\n * A `CallSiteConfig` may contain either plain wiring values\n * (`TraitConfigValue`) or annotated `ConfigFieldDeclaration` objects\n * (`{ type, default, label, ... }`). Both the JS interpreter\n * (`@almadar/runtime`) and the render substrate (`@almadar/ui`) need this\n * extraction, so it lives here — the most-upstream package they share —\n * rather than being duplicated in each.\n *\n * A declared field with no `default` yields no value (dropped) — mirroring\n * `collectDeclaredConfigDefaults`. Leaking such a schema object through as a\n * value made `@config.leftIcon` resolve to `{ type: \"icon\", … }`, which the\n * render substrate then mounted as an element and passed to `Input`'s icon\n * slot → \"Element type is invalid: got <SlotContentRenderer />\".\n */\nexport function normalizeCallSiteConfigToValues(\n config: CallSiteConfig | undefined,\n): TraitConfig | undefined {\n if (config === undefined) {\n return undefined;\n }\n\n const out: Record<string, TraitConfigValue> = {};\n let hasAny = false;\n for (const [key, entry] of Object.entries(config)) {\n const value = isConfigFieldSchema(entry)\n ? entry.default\n : entry;\n if (value !== undefined) {\n out[key] = value;\n hasAny = true;\n }\n }\n\n return hasAny ? out : undefined;\n}\n\n/**\n * Per-field entry in a trait's DECLARED `config { }` schema as it lives\n * on the `.orb` JSON: `{ type: \"string\" | \"[string]\" | \"object\" | ...,\n * default?: <value> }`. Distinct from `TraitConfigValue` (which is the\n * resolved runtime value). The runtime reads `default` to seed the\n * `@config.X` binding context when no call-site override is supplied.\n *\n * Authored as `config { foo : string = \"bar\" }` in `.lolo`; lowered to\n * `{ foo: { type: \"string\", default: \"bar\" } }` in `.orb`. The optional\n * metadata fields below (`label`/`description`/`tier`/`values`/`synonyms`)\n * carry the `.lolo` `@label`/`@description`/`@tier`/`@synonyms` annotations and\n * the enum member list through lowering — consumed by config-driven UI\n * (e.g. the playground property inspector) to render typed controls.\n */\n/**\n * The reference config-field types (V4-W5). A config knob typed `entity`,\n * `trait`, or `event` holds a REFERENCE (an entity/trait/event name), not a\n * plain value — so the stamp records the referenced node's id on the field\n * (`ConfigFieldDeclaration.refId`) and both execution paths resolve the value to\n * the node's CURRENT name by id, exactly like `entityRefIds`/`traitEmbedIds`.\n * This is the deterministic, source-tagged contract that lets a declaration-only\n * rename flow through a config value without any name-scanning heuristic.\n */\nexport const REFERENCE_CONFIG_TYPES = ['entity', 'trait', 'event'] as const;\nexport type ReferenceConfigType = (typeof REFERENCE_CONFIG_TYPES)[number];\n\n/** True when a config field's `type` marks its value as an entity/trait/event reference. */\nexport function isReferenceConfigType(type: string): type is ReferenceConfigType {\n return (REFERENCE_CONFIG_TYPES as readonly string[]).includes(type);\n}\n\n/**\n * The secret config-field types. A config knob typed `secret` holds a\n * CREDENTIAL (or a reference to one): it must never flow into spec.json,\n * traces, plan snapshots, or factory bakes in cleartext — consumers mask it\n * in UI (password-rendered input) and exclude it from serialization. The\n * `.lolo` language does not yet accept `secret` as a config-field type\n * (orbital-lolo parser gate); this contract is the single deterministic\n * source downstream consumers (studio, verifiers, rabit bakes) key on once\n * it lands — until then hosts use a `string` knob plus a password-rendered\n * `ui-input` (the std-service-custom-bearer pattern).\n */\nexport const SECRET_CONFIG_TYPES = ['secret'] as const;\nexport type SecretConfigType = (typeof SECRET_CONFIG_TYPES)[number];\n\n/** True when a config field's `type` marks its value as a credential to be masked. */\nexport function isSecretConfigType(type: string): type is SecretConfigType {\n return (SECRET_CONFIG_TYPES as readonly string[]).includes(type);\n}\n\nexport type ConfigFieldDeclaration = {\n readonly type: string;\n readonly default?: TraitConfigValue;\n /**\n * V4-W5 dual-carry id — set by the stamp when `type` is a reference config\n * type (`entity`/`trait`/`event`): the stable id of the entity/trait/event\n * the field's value names. Readers resolve the value to that node's current\n * name by id (rename-proof); absent for non-reference fields.\n */\n readonly refId?: string;\n /** Marks the knob as mandatory at every call site (own-page binding exempt). `required` + `default` may coexist — the default only serves the trait's own demo page. */\n readonly required?: boolean;\n /** `@label` — human-readable control label. */\n readonly label?: string;\n /** `@description` — help/tooltip text for the field. */\n readonly description?: string;\n /** `@tier` — disclosure tier: `presentation`|`domain`|`policy`|`infra`|`internal`. */\n readonly tier?: string;\n /** Enum members when the field's type is a string union — drives a select control. */\n readonly values?: ReadonlyArray<string>;\n /** `@synonyms` — comma-separated vocabulary synonyms (metadata). */\n readonly synonyms?: string;\n /** Structured per-item schema for array-of-object fields — `edges : [{from: string!, …}]` in `.lolo` lowers to `{ type: \"object\", properties: {…} }`. */\n readonly items?: ConfigFieldItemsDeclaration;\n /** Structured property schema for object-typed config fields (no items wrapper). */\n readonly properties?: Readonly<Record<string, TraitEntityField>>;\n};\n\nexport type ConfigFieldItemsDeclaration = {\n readonly type?: string;\n /** Absent for arrays of scalars (`items: { type: \"string\" }`). */\n readonly properties?: Readonly<Record<string, TraitEntityField>>;\n /** Nested per-item schema for arrays of arrays (recursive). */\n readonly items?: ConfigFieldItemsDeclaration;\n};\n\nexport const ConfigFieldItemsDeclarationSchema: z.ZodType<ConfigFieldItemsDeclaration> = z.lazy(() =>\n z.object({\n type: z.string().optional(),\n properties: z.record(TraitEntityFieldSchema).optional(),\n items: ConfigFieldItemsDeclarationSchema.optional(),\n }),\n);\n\nexport const ConfigFieldDeclarationSchema: z.ZodType<ConfigFieldDeclaration> = z.object({\n type: z.string(),\n default: TraitConfigValueSchema.optional(),\n refId: z.string().optional(),\n required: z.boolean().optional(),\n label: z.string().optional(),\n description: z.string().optional(),\n tier: z.string().optional(),\n values: z.array(z.string()).optional(),\n synonyms: z.string().optional(),\n items: ConfigFieldItemsDeclarationSchema.optional(),\n properties: z.lazy(() => z.record(TraitEntityFieldSchema)).optional(),\n});\n\n/**\n * Map of declared config fields keyed by name. Lives on `Trait.config`\n * and `ResolvedTrait.config` for atoms/molecules that expose typed\n * configuration to consumers.\n */\nexport type DeclaredTraitConfig = Readonly<Record<string, ConfigFieldDeclaration>>;\n\nexport const DeclaredTraitConfigSchema: z.ZodType<DeclaredTraitConfig> = z.record(\n ConfigFieldDeclarationSchema,\n);\n\n// ============================================================================\n// Trait Categories\n// ============================================================================\n\n/**\n * Categories for organizing traits\n */\nexport type TraitCategory =\n | 'lifecycle'\n | 'temporal'\n | 'validation'\n | 'notification'\n | 'integration'\n | 'interaction'\n | 'agent'\n | 'game-core'\n | 'game-character'\n | 'game-ai'\n | 'game-combat'\n | 'game-items'\n | 'game-cards'\n | 'game-board'\n | 'game-puzzle';\n\nexport const TraitCategorySchema = z.enum([\n 'lifecycle',\n 'temporal',\n 'validation',\n 'notification',\n 'integration',\n 'interaction',\n 'agent',\n 'game-core',\n 'game-character',\n 'game-ai',\n 'game-combat',\n 'game-items',\n 'game-cards',\n 'game-board',\n 'game-puzzle',\n]);\n\n// ============================================================================\n// Trait Entity Field (simplified)\n// ============================================================================\n\n/**\n * Field types for trait data entities\n */\nexport type TraitFieldType = 'string' | 'number' | 'boolean' | 'date' | 'array' | 'object' | 'timestamp' | 'datetime' | 'enum' | 'email' | 'url' | 'phone' | 'uuid' | 'image';\n\n/**\n * Simplified field for trait data entities\n */\nexport type TraitEntityField = {\n name: string;\n type: TraitFieldType;\n required?: boolean;\n /** Field default parsed from `.orb` — always a JSON-shaped value. */\n default?: TraitConfigValue;\n values?: string[];\n /** Structured per-item schema for array-of-object fields (recursive). */\n items?: ConfigFieldItemsDeclaration;\n /** Structured property schema for object-typed entity fields. */\n properties?: Readonly<Record<string, TraitEntityField>>;\n};\n\nexport const TraitEntityFieldSchema: z.ZodType<TraitEntityField> = z.object({\n name: z.string().min(1),\n type: z.enum([\n 'string',\n 'number',\n 'boolean',\n 'date',\n 'array',\n 'object',\n 'timestamp',\n 'datetime',\n 'enum',\n 'email',\n 'url',\n 'phone',\n 'uuid',\n 'image',\n ]),\n required: z.boolean().optional(),\n default: TraitConfigValueSchema.optional(),\n values: z.array(z.string()).optional(),\n items: ConfigFieldItemsDeclarationSchema.optional(),\n properties: z.lazy(() => z.record(TraitEntityFieldSchema)).optional(),\n});\n\n// ============================================================================\n// Trait Data Entity\n// ============================================================================\n\n/**\n * Simplified data entity for traits\n */\nexport type TraitDataEntity = {\n name: string;\n collection?: string;\n fields: TraitEntityField[];\n timestamps?: boolean;\n description?: string;\n runtime?: boolean;\n singleton?: boolean;\n pages?: string[];\n};\n\nexport const TraitDataEntitySchema = z.object({\n name: z.string().min(1),\n collection: z.string().optional(),\n fields: z.array(TraitEntityFieldSchema).min(1),\n timestamps: z.boolean().optional(),\n description: z.string().optional(),\n runtime: z.boolean().optional(),\n singleton: z.boolean().optional(),\n pages: z.array(z.string()).optional(),\n});\n\n// ============================================================================\n// Trait Tick\n// ============================================================================\n\n/**\n * Tick rule for traits.\n * Guards can be legacy strings or S-expressions.\n * Effects can be typed Effect objects or S-expressions.\n */\nexport type TraitTick = {\n name: string;\n description?: string;\n priority?: number;\n interval: string | number;\n appliesTo?: string[];\n pages?: string[];\n /** V4 dual-carry id sibling of `pages` — optional until the Phase-7 flip. */\n pageIds?: PageId[];\n /** Guard expression - string (legacy) or S-expression array */\n guard?: Expression;\n /** Effects to execute (S-expressions) */\n effects: Effect[];\n /**\n * Events this tick emits.\n * Must reference events defined in trait's emits array.\n * Used for validation and documentation.\n */\n emits?: string[];\n /** V4 dual-carry id sibling of `emits` — optional until the Phase-7 flip. */\n emitIds?: EventId[];\n};\n\n/** `\"500ms\"` / `\"5s\"` / `\"1m\"` / `\"1h\"` / `\"1d\"` — the duration form both schedulers parse. */\nconst DURATION_INTERVAL = /^\\d+(ms|s|m|h|d)$/;\n/** A 5-field cron expression, e.g. `\"0 9 * * *\"`. */\nconst CRON_INTERVAL = /^\\S+(\\s+\\S+){4}$/;\n\n/**\n * A tick's cadence: `\"frame\"`, a positive number of milliseconds, a duration\n * string, or a cron expression.\n *\n * This schema previously accepted only `\"frame\"` or a number, while `TraitTick`\n * declared `string | number` and BOTH schedulers already parsed durations and cron\n * (`OrbitalServerRuntime.registerTick` → `isValidCronExpression`/\n * `parseDurationString`; Rust `TickScheduler::parse_interval` → `cron::parse_cron`).\n * The gate therefore rejected every cron/duration tick before its runtime could\n * run it — `std-data-erasure`'s hourly `executionScan` made the whole orbital\n * unloadable in the interpreter with only `traits.N: Invalid input` to go on.\n */\nexport const TickIntervalSchema = z.union([\n z.literal('frame'),\n z.number().positive(),\n z.string().refine((v) => DURATION_INTERVAL.test(v) || CRON_INTERVAL.test(v), {\n message:\n 'interval must be \"frame\", a positive number of milliseconds, a duration (\"500ms\"/\"5s\"/\"1m\"/\"1h\"/\"1d\"), or a 5-field cron expression (\"0 9 * * *\")',\n }),\n]);\n\nexport const TraitTickSchema = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n priority: z.number().optional(),\n interval: TickIntervalSchema,\n appliesTo: z.array(z.string()).optional(),\n pages: z.array(z.string()).optional(),\n pageIds: z.array(PageIdSchema).optional(),\n guard: ExpressionSchema.optional(),\n effects: z.array(EffectSchema).min(1),\n emits: z.array(z.string()).optional(),\n emitIds: z.array(EventIdSchema).optional(),\n});\n\n// ============================================================================\n// Event Scope\n// ============================================================================\n\n/**\n * Event scope determines visibility:\n * - 'internal': Trait-to-trait within same orbital (default)\n * - 'external': Exposed for cross-orbital communication\n */\nexport type EventScope = 'internal' | 'external';\n\nexport const EventScopeSchema = z.enum(['internal', 'external']);\n\n// ============================================================================\n// Event Payload Field\n// ============================================================================\n\n/**\n * Payload field definition for events.\n * Defines the structure of data carried by events.\n */\nexport type EventPayloadField = {\n /** Field name */\n name: string;\n /**\n * Field type. Any non-empty string, mirroring the Rust validator's\n * acceptance (Zod schema below uses `z.string().min(1)`). Well-known\n * values include the primitives (`string`, `number`, `boolean`,\n * `object`, `array`, `entity`), date variants (`date`, `datetime`,\n * `timestamp`), entity-name references (`User`), and array-of-entity\n * shorthand (`[User]`). Narrowing happens at the call sites that care\n * (e.g. `orbital-compiler/phases/validation/emit_payload.rs`), not at\n * the structural type level — this keeps `.orb`-emitted payloads\n * round-trippable through TypeScript without losing precision.\n */\n type: string;\n /** Whether field is required in payload */\n required?: boolean;\n /** Human-readable description */\n description?: string;\n /** For 'entity' type: the entity type name */\n entityType?: string;\n /** Structured property schema for object-typed payload fields (recursive). */\n properties?: ReadonlyArray<EventPayloadField>;\n};\n\nexport const EventPayloadFieldSchema: z.ZodType<EventPayloadField> = z.object({\n name: z.string().min(1),\n /**\n * Field type. Mirrors the Rust validator's acceptance: any non-empty\n * string. Primitives ('string' | 'number' | 'boolean' | 'object' |\n * 'array') are the canonical values; entity-name references like\n * 'ModalRecord' and array-of-entity references like '[ModalRecord]'\n * are also valid because the Rust IR's PayloadField.field_type is\n * just a String. Only enforced narrowly at the call site (e.g.\n * emit-literal type-mismatch warnings in\n * orbital-compiler/phases/validation/emit_payload.rs) — not here.\n */\n type: z.string().min(1),\n required: z.boolean().optional(),\n description: z.string().optional(),\n entityType: z.string().optional(),\n properties: z.lazy(() => z.array(EventPayloadFieldSchema)).optional(),\n});\n\n// ============================================================================\n// Trait Event Contract\n// ============================================================================\n\n/**\n * Event contract for events a trait emits.\n * Declares the event name, scope, and payload schema.\n */\nexport type TraitEventContract = {\n /** Event name (UPPER_SNAKE_CASE) */\n event: string;\n /** V4 dual-carry id sibling of `event` — optional until the Phase-7 flip. */\n eventId?: EventId;\n /** Human-readable description */\n description?: string;\n /** User-vocabulary synonyms (comma-separated) — the per-event analogue of a\n * field/config `@synonyms`. Feeds the curation event matcher. */\n synonyms?: string;\n /** Authoring tier (`essential`/`customization`/`advanced`/`internal`). */\n tier?: string;\n /** Payload schema — declarative type info for the event's payload.\n * Distinct from the runtime payload value (`@payload.X` bindings,\n * `EventPayload`) which is a separate concept. */\n payloadSchema?: EventPayloadField[];\n /**\n * Event scope:\n * - 'internal': Trait-to-trait within same orbital (default)\n * - 'external': Exposed for cross-orbital communication\n */\n scope?: EventScope;\n};\n\n/**\n * `@config.<knob>` is the only legal reference form for an emit/listen\n * event name (Option B — the declared event name resolves to a\n * string-typed config knob's value at inline/resolve time). Matches the\n * Rust lexer's dotted-sigil body (`config.<ident>`, no further dots).\n */\nexport const CONFIG_REF_EVENT_PATTERN = /^@config\\.[A-Za-z_][A-Za-z0-9_]*$/;\n\n/** Returns the knob identifier when `event` is a `@config.<knob>` reference, else `undefined`. */\nexport function configRefEventKnob(event: string): string | undefined {\n return CONFIG_REF_EVENT_PATTERN.test(event) ? event.slice('@config.'.length) : undefined;\n}\n\n/** Why a `@config.<knob>` emit/listen event-name reference failed to resolve. */\nexport type ConfigRefEventError = 'unknown-knob' | 'not-string' | 'no-default';\n\n/**\n * Resolve a `@config.<knob>` emit/listen event-name reference to its\n * concrete literal, given the trait's declared config schema and the\n * effective config value map (call-site override folded over declared\n * default — same precedence the Rust inline phase's `effective_config`\n * uses). The single JS-side owner of this resolution rule; mirrors\n * `resolve_config_ref_event_name` in `orbital-core::schema` (Rust).\n * Returns the resolved literal, or the specific contract clause that failed.\n */\nexport function resolveConfigRefEventName(\n event: string,\n declaredConfig: DeclaredTraitConfig | undefined,\n effectiveConfig: Readonly<Record<string, TraitConfigValue>>,\n): { readonly ok: true; readonly value: string } | { readonly ok: false; readonly error: ConfigRefEventError } {\n const knob = configRefEventKnob(event);\n if (knob === undefined) return { ok: false, error: 'unknown-knob' };\n const field = declaredConfig?.[knob];\n if (field === undefined) return { ok: false, error: 'unknown-knob' };\n if (field.type !== 'string') return { ok: false, error: 'not-string' };\n if (field.default === undefined) return { ok: false, error: 'no-default' };\n const value = effectiveConfig[knob];\n if (typeof value !== 'string') return { ok: false, error: 'not-string' };\n return { ok: true, value };\n}\n\nexport const TraitEventContractSchema = z.object({\n /**\n * Event name. Mirrors the Rust validator's `is_valid_event_identifier`:\n * starts with a letter, then any letters / digits / underscores. Both\n * UPPER_SNAKE_CASE and PascalCase shapes are valid identifiers in the\n * post-Phase 2.5 nominal-event type system (events declared via\n * `type X = Event<T>`). A pre-resolution `@config.<knob>` reference\n * (Option B) is also legal — inline/resolve substitutes it with the\n * knob's effective literal before codegen/runtime consume it.\n */\n event: z.string().min(1).regex(\n /^([A-Za-z][A-Za-z0-9_]*|@config\\.[A-Za-z_][A-Za-z0-9_]*)$/,\n 'Event name must start with a letter and contain only letters, digits, and underscores, or be a `@config.<knob>` reference'\n ),\n eventId: EventIdSchema.optional(),\n description: z.string().optional(),\n synonyms: z.string().optional(),\n tier: z.string().optional(),\n payloadSchema: z.array(EventPayloadFieldSchema).optional(),\n scope: EventScopeSchema.optional(),\n});\n\n// ============================================================================\n// Trait Event Listener\n// ============================================================================\n\n/**\n * Event listener for trait communication.\n * Guards can be legacy strings or S-expressions.\n * Enhanced with scope and payloadMapping for cross-orbital communication.\n */\n/**\n * Source-scoping for a `listens {}` entry. Determines which emitters the\n * listener responds to.\n *\n * - `{ kind: \"any\" }`: wildcard (`* EVENT -> TRIGGER`). Any trait, any orbital.\n * - `{ kind: \"trait\", trait: \"X\" }`: intra-orbital (`X EVENT -> TRIGGER`).\n * Only emits from the same orbital's trait `X`.\n * - `{ kind: \"orbital\", orbital: \"O\", trait: \"X\" }`: cross-orbital\n * (`O.X EVENT -> TRIGGER`). Only emits from orbital `O`'s trait `X`.\n *\n * Absent (undefined) means the listener is a local payload-declaration only\n * — pure type metadata, no bus subscription.\n */\nexport type ListenSource =\n | { kind: 'any' }\n | {\n kind: 'trait';\n trait: string;\n /** V4 dual-carry id sibling of `trait` — optional until the Phase-7 flip. */\n traitId?: TraitId;\n }\n | {\n kind: 'orbital';\n orbital: string;\n trait: string;\n /** V4 dual-carry id sibling of `orbital` — optional until the Phase-7 flip. */\n orbitalId?: OrbitalId;\n /** V4 dual-carry id sibling of `trait` — optional until the Phase-7 flip. */\n traitId?: TraitId;\n };\n\nexport const ListenSourceSchema = z.union([\n z.object({ kind: z.literal('any') }),\n z.object({\n kind: z.literal('trait'),\n trait: z.string().min(1),\n traitId: TraitIdSchema.optional(),\n }),\n z.object({\n kind: z.literal('orbital'),\n orbital: z.string().min(1),\n trait: z.string().min(1),\n orbitalId: OrbitalIdSchema.optional(),\n traitId: TraitIdSchema.optional(),\n }),\n]);\n\nexport type TraitEventListener = {\n /** Event key to listen for (bare event name, no source prefix in the new shape) */\n event: string;\n /** V4 dual-carry id sibling of `event` — optional until the Phase-7 flip. */\n eventId?: EventId;\n /** State machine event to trigger */\n triggers: string;\n /** V4 dual-carry id sibling of `triggers` — optional until the Phase-7 flip. */\n triggersId?: EventId;\n /** Human-readable description (authored `@description` on the listen). */\n description?: string;\n /** User-vocabulary synonyms (comma-separated). */\n synonyms?: string;\n /** Authoring tier (`essential`/`customization`/`advanced`/`internal`). */\n tier?: string;\n /** Guard expression - string (legacy) or S-expression array */\n guard?: Expression;\n /**\n * Listener scope:\n * - 'internal': Listen to events within same orbital (default)\n * - 'external': Listen to events from other orbitals\n */\n scope?: EventScope;\n /**\n * `with { ... }` payload rewrite: `{ targetField: SExpr }`. Each value is a\n * full s-expression evaluated against the source payload — a `@payload.<field>`\n * read, a literal, or an operator list. Apply it with\n * `applyListenPayloadMapping`.\n */\n payloadMapping?: Record<string, SExpr>;\n /**\n * Source scoping (see `ListenSource`). Undefined when the listen entry is\n * a local payload declaration rather than a bus subscription.\n */\n source?: ListenSource;\n};\n\nexport const TraitEventListenerSchema = z.object({\n event: z.string().min(1),\n eventId: EventIdSchema.optional(),\n triggers: z.string().min(1),\n triggersId: EventIdSchema.optional(),\n description: z.string().optional(),\n synonyms: z.string().optional(),\n tier: z.string().optional(),\n guard: ExpressionSchema.optional(),\n scope: EventScopeSchema.optional(),\n payloadMapping: z.record(SExprSchema).optional(),\n source: ListenSourceSchema.optional(),\n});\n\n// ============================================================================\n// Required Field\n// ============================================================================\n\n/**\n * Field required by a trait from its linkedEntity\n */\nexport type RequiredField = {\n name: string;\n type: TraitFieldType;\n description?: string;\n};\n\nexport const RequiredFieldSchema = z.object({\n name: z.string().min(1),\n type: z.enum(['string', 'number', 'boolean', 'date', 'array', 'object', 'timestamp', 'datetime', 'enum', 'email', 'url', 'phone', 'uuid', 'image']),\n description: z.string().optional(),\n});\n\n// ============================================================================\n// Trait Reference\n// ============================================================================\n\n/**\n * Reference to a trait from an entity or page.\n *\n * Phase F treats a trait reference as a function call: `ref` names the\n * imported trait and the sibling fields are arguments. The compiler's\n * identifier-substitution pass uses these arguments to rewrite the\n * inlined trait clone before lowering.\n */\nexport type TraitReference = {\n ref: string;\n /** V4 dual-carry id sibling of `ref` — optional until the Phase-7 flip. */\n refId?: TraitId;\n /**\n * V4 LOCAL DECLARATION id — the identity of this trait AS DECLARED in its\n * orbital (`trait X = Alias.traits.Y` declares node X; `refId` carries\n * Y's id). Minted by the stamp so page trait refs and `@trait.X` embeds\n * resolve by id across `name:` renames (the composed-organism surface was\n * the one declaration class without an id).\n */\n id?: TraitId;\n /**\n * Phase 1.2: optional registry path disambiguator. Pairs with `ref` to\n * explicitly name which `uses` entry the alias was imported from\n * (e.g. \"std/behaviors/atoms/std-browse\"). Helpful for programmatic\n * descriptor construction and inline-phase disambiguation when multiple\n * registries expose the same alias prefix.\n */\n from?: string;\n linkedEntity?: string;\n /** V4 dual-carry id sibling of `linkedEntity` — optional until the Phase-7 flip. */\n linkedEntityId?: EntityId;\n /** Phase F: rename the inlined trait at the call site */\n name?: string;\n /** Phase F: rename atom event keys at the call site, e.g. {OPEN: \"ADD_ITEM\"} */\n events?: Record<string, string>;\n /** V4 dual-carry id sibling of `events` (keys = baked event names resolved to ids) — optional until the Phase-7 flip. */\n eventIds?: Record<string, EventId>;\n /**\n * Entity-field remap: rewrite the inlined trait's canonical `@entity.X` /\n * `@payload.row.X` field references to the consumer entity's field names,\n * e.g. `{ name: \"title\", folder: \"parentId\" }`. Mirrors `events` for\n * fields. Applied during inline substitution alongside `linkedEntity`.\n */\n fields?: Record<string, string>;\n /**\n * Call-site config overrides. Each entry is either a plain wiring value\n * (`TraitConfigValue`) or a fully-annotated re-declaration\n * (`ConfigFieldDeclaration` with `type`, optional `label`/`description`/\n * `synonyms`/`tier`). Use `isCallSiteConfigDeclaration` to discriminate.\n *\n * Plain wiring (existing callers): `config: { icon: \"star\", count: 5 }`.\n * Annotated (new): `config: { icon: { type: \"string\", default: \"star\",\n * label: \"Icon\", tier: \"presentation\" } }`.\n */\n config?: CallSiteConfig;\n appliesTo?: string[];\n /**\n * Phase F.7: replace the imported trait's `listens` array with the\n * caller-supplied list. Empty array clears all upstream listens. The\n * inliner applies this AFTER substitution, overwriting whatever the\n * upstream declared. Use sparingly: this drops external event wiring.\n */\n listens?: TraitEventListener[];\n /**\n * Phase F.7: set every emit's `scope` to the caller-supplied value.\n * `'internal'` confines emits to the orbital's internal bus; `'external'`\n * broadcasts them. Applied after substitution and listens replacement.\n */\n emitsScope?: 'internal' | 'external';\n /**\n * Phase F.8: per-transition effects override. The map's keys are event\n * names (the transition triggers, AFTER any rename via `events`). The\n * values are the SExpression effect lists that REPLACE the matching\n * transitions' `effects[]` arrays.\n *\n * This is the unified content + effect override mechanism. Whether the\n * override list contains `[\"render-ui\", ...]` (visual content),\n * `[\"fetch\", ...]` (data load), `[\"persist\", ...]` (mutation), or any\n * combination, the inliner just substitutes the whole list. Identifier\n * substitution (entity refs, event refs) still runs over the merged\n * trait body, so override effects can use either upstream or caller\n * identifiers and the F.3 walker will rewrite them consistently.\n *\n * Example:\n * ```json\n * \"effects\": {\n * \"ADD_ITEM\": [\n * [\"fetch\", \"CartItem\"],\n * [\"render-ui\", \"main\", { ... }]\n * ],\n * \"SAVE\": [\n * [\"persist\", \"create\", \"CartItem\", \"@payload.data\"]\n * ]\n * }\n * ```\n */\n effects?: Record<string, SExpr[]>;\n};\n\nexport const TraitReferenceSchema = z\n .object({\n ref: z.string().min(1),\n refId: TraitIdSchema.optional(),\n // V4 local declaration id (see the interface doc) — declared so the\n // strip-mode zod gate carries it through instead of dropping it.\n id: TraitIdSchema.optional(),\n // Phase 1.2: optional registry path disambiguator, pairs with `ref`.\n from: z.string().optional(),\n linkedEntity: z.string().optional(),\n linkedEntityId: EntityIdSchema.optional(),\n name: z.string().optional(),\n events: z\n .record(\n z.string().min(1, \"events key (atom event name) must be non-empty\"),\n z.string().min(1, \"events value (caller event name) must be non-empty\"),\n )\n .optional(),\n eventIds: z.record(z.string().min(1), EventIdSchema).optional(),\n fields: z\n .record(\n z.string().min(1, \"fields key (canonical field name) must be non-empty\"),\n z.string().min(1, \"fields value (consumer field name) must be non-empty\"),\n )\n .optional(),\n // Each value is either a plain wiring value (TraitConfigValue) or an\n // annotated ConfigFieldDeclaration. Declaration form is tried first\n // (it's more specific — has a `\"type\"` string key); plain values fall\n // through to the recursive TraitConfigValue union.\n config: z.record(z.union([ConfigFieldDeclarationSchema, TraitConfigValueSchema])).optional(),\n appliesTo: z.array(z.string()).optional(),\n // Phase F.7: caller-supplied listen entries are already-resolved\n // structured definitions (see `TraitReference.listens`).\n listens: z.array(TraitEventListenerSchema).optional(),\n emitsScope: z.enum(['internal', 'external']).optional(),\n // Phase F.8: per-transition effects override. The keys are event\n // names (the transition triggers AFTER renames); values are SExpr\n // effect tuples.\n effects: z\n .record(\n z.string().min(1, \"effects override key (event name) must be non-empty\"),\n z.array(SExprSchema),\n )\n .optional(),\n })\n .refine(\n (ref) => {\n if (!ref.events) return true;\n // Phase F.4: reject empty event-name strings on either side of\n // every entry. The substitution pass treats empty strings as\n // no-ops at runtime, but accepting them at the schema boundary\n // hides authoring errors. The per-entry .min(1) above already\n // rejects most cases; this refine is the belt-and-braces check\n // that survives any future relaxation of the inner validators.\n for (const [from, to] of Object.entries(ref.events)) {\n if (from.length === 0 || to.length === 0) return false;\n }\n return true;\n },\n {\n message:\n 'TraitReference \"events\" entries must have non-empty atom and caller event names',\n path: [\"events\"],\n },\n );\n\n/**\n * Simplified trait reference - supports string, reference object, or inline Trait definition\n * - string: \"TraitName\" - reference to a trait by name\n * - { ref: \"TraitName\" }: reference object with optional config / overrides\n * - { name: \"TraitName\", stateMachine: {...} }: inline trait definition\n *\n * Phase F adds `name` and `events` to the reference object form so callers\n * can rename the trait and remap atom event keys.\n */\nexport type TraitRef =\n | string\n | {\n ref: string;\n config?: CallSiteConfig;\n linkedEntity?: string;\n name?: string;\n events?: Record<string, string>;\n }\n | Trait;\n\n// TraitRefSchema is defined after TraitSchema (see below) to avoid forward reference\n\n// ============================================================================\n// Trait UI Binding\n// ============================================================================\n\nexport type PresentationType = 'modal' | 'drawer' | 'popover' | 'inline' | 'confirm-dialog';\n\nexport type TraitUIBinding = {\n [stateName: string]: {\n presentation: PresentationType;\n content: AnyPatternConfig | AnyPatternConfig[];\n props?: {\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n position?: 'left' | 'right' | 'top' | 'bottom' | 'center';\n title?: string;\n closable?: boolean;\n width?: string;\n showProgress?: boolean;\n step?: number;\n totalSteps?: number;\n };\n };\n};\n\n/**\n * Zod schema for {@link TraitUIBinding}. `content` is a pattern config (or\n * list of them); pattern configs have no dedicated zod schema in core, so\n * they are validated as JSON objects here and narrowed by downstream\n * pattern-aware consumers.\n */\nexport const TraitUIBindingSchema = z.record(\n z.object({\n presentation: z.enum(['modal', 'drawer', 'popover', 'inline', 'confirm-dialog']),\n content: z.union([z.record(JsonValueSchema), z.array(z.record(JsonValueSchema))]),\n props: z\n .object({\n size: z.enum(['sm', 'md', 'lg', 'xl', 'full']).optional(),\n position: z.enum(['left', 'right', 'top', 'bottom', 'center']).optional(),\n title: z.string().optional(),\n closable: z.boolean().optional(),\n width: z.string().optional(),\n showProgress: z.boolean().optional(),\n step: z.number().optional(),\n totalSteps: z.number().optional(),\n })\n .optional(),\n }),\n);\n\n// ============================================================================\n// Trait Definition\n// ============================================================================\n\n/**\n * A Trait is a reusable behavioral module with state machine.\n *\n * Traits declare their event contracts via `emits` and `listens`:\n * - `emits`: Events this trait can emit (with scope and payload schema)\n * - `listens`: Events this trait listens for (with optional payloadMapping)\n */\n/**\n * Instance vs collection scope for a trait.\n *\n * Mirrors the `.lolo` trait modifier list (`[interaction, instance]` /\n * `[interaction, collection]`). Instance traits own a single entity record\n * (typed by `linkedEntity`) and read/write `@entity.field`. Collection\n * traits render records of `linkedEntity` without owning any one; data flows\n * through `@payload.data` typed as `Array<linkedEntity>`.\n *\n * Optional today. A future phase (Almadar_Entity_V2_Plan.md Phase 4) makes\n * it required and adds static checks in the compiler.\n */\nexport type TraitScope = 'instance' | 'collection';\n\nexport const TraitScopeSchema = z.enum(['instance', 'collection']);\n\n/**\n * Inferred field contract for a `@rebindable` trait binding. `requires` =\n * entity fields the trait READS via `@entity.<field>`; `provides` = fields it\n * WRITES via `(set @entity.<field> ...)`. A consumer that rebinds the trait\n * (`linkedEntity`) must point at an entity whose fields ⊇ `requires`. Inferred\n * by the lolo lowerer from the trait's own SExpr usage; the orbital-rust L2\n * validator enforces it (`ORB_T_REBIND_MISSING_FIELDS`). Mirrors the Rust\n * `EntityFieldContract` serde shape exactly.\n */\nexport type EntityFieldContract = {\n requires: string[];\n provides: string[];\n};\n\nexport const EntityFieldContractSchema = z.object({\n requires: z.array(z.string()),\n provides: z.array(z.string()),\n});\n\nexport type Trait = {\n /** V4 dual-carry id sibling of `name` — optional until the Phase-7 flip. */\n id?: TraitId;\n name: string;\n description?: string;\n description_visual_prompt?: string;\n category?: TraitCategory;\n /**\n * Opt-in marker authored as `-> @rebindable Entity` in `.lolo`. When\n * `true`, a consuming molecule/organism may rebind this trait's entity via\n * `linkedEntity`; otherwise the binding is fixed and the validator rejects\n * any rebind (`ORB_T_ENTITY_NOT_REBINDABLE`). Absent on traits that don't\n * bind an entity.\n */\n entityRebindable?: boolean;\n /**\n * Inferred field contract a rebind target must satisfy. Emitted only\n * alongside `entityRebindable: true`. See {@link EntityFieldContract}.\n */\n entityContract?: EntityFieldContract;\n /**\n * `@description \"...\"` authored on the `@rebindable` binding in `.lolo`.\n * Surfaced to catalog prose + knob-embeddings so the LLM can reach for the\n * binding from intent vocabulary (binding-discovery). Absent when unmarked.\n */\n entityBindingDescription?: string;\n /** `@synonyms \"...\"` authored on the `@rebindable` binding in `.lolo`. */\n entityBindingSynonyms?: string;\n /**\n * Author-supplied capability tags lifted from the `.lolo` trait header's\n * bracket list. Anything beyond the known scope tokens (`instance` /\n * `collection`) and the first category identifier accumulates here.\n * Free-form strings — the lolo parser does not validate them against a\n * known set. The Phase 4 translator overlay matches rules to traits by\n * exact set membership against this list. Empty when no capabilities\n * were declared. See `docs/Almadar_Domain_Language.md` Phase 3.\n */\n capabilities?: string[];\n /**\n * Instance or collection scope. Required in V2: every trait operates on\n * either a single record (`instance`) or a group (`collection`). Drives\n * payload-inference rules for emits declared via `type X = Event<T>` and\n * shapes the runtime's binding semantics. Authored in `.lolo` as the\n * `[instance]` / `[collection]` modifier on the trait header.\n */\n scope: TraitScope;\n /**\n * The entity this trait is linked to.\n * Required for inline trait definitions within an orbital.\n */\n linkedEntity?: string;\n /** V4 dual-carry id sibling of `linkedEntity` — optional until the Phase-7 flip. */\n linkedEntityId?: EntityId;\n /**\n * V4 leverage-ids — id side-map for `@entity.<Name>` binding tokens + positional\n * entity args (`fetch`/`ref`/`persist`/`spawn`) in this trait's guards/effects/\n * ticks/listens. Maps the referenced entity NAME → its stable id, so readers\n * resolve these bare-string positions by id (else name) and an entity rename never\n * strands them — the coverage that lets the entity name-rewriter be deleted.\n */\n entityRefIds?: Record<string, EntityId>;\n /**\n * V4 leverage-ids — id side-map for `@trait.<Name>` embed tokens (render-ui embeds /\n * effect-tree sibling refs). Maps the embed token NAME → the embedded trait's stable\n * id, so readers splice embeds by id (else name) — the coverage that lets the\n * `@trait.` name-rewriter be deleted.\n */\n traitEmbedIds?: Record<string, TraitId>;\n requiredFields?: RequiredField[];\n dataEntities?: TraitDataEntity[];\n stateMachine?: StateMachine;\n initialEffects?: Effect[];\n ticks?: TraitTick[];\n /**\n * Events this trait emits.\n * Each event can be scoped as internal or external.\n * External events are namespaced at orbital level (TraitName.EVENT_NAME).\n */\n emits?: TraitEventContract[];\n /**\n * Events this trait listens for.\n * External listeners reference namespaced events (TraitName.EVENT_NAME).\n */\n listens?: TraitEventListener[];\n ui?: TraitUIBinding;\n /**\n * Declared `config { }` schema authored on the trait. Drives\n * `@config.X` substitution: each field's `default` seeds the\n * binding context behind any caller-supplied call-site\n * `config: { ... }` override.\n */\n config?: DeclaredTraitConfig;\n /**\n * Set by the resolve/inline phase when this trait was cloned from a\n * `uses[]` import. Absent for traits authored directly on the\n * orbital. Viewport-only metadata — runtime and codegen ignore it.\n * Drives Studio's L2 grouping (imported traits collapse under one\n * card per alias) and L3 drill (alias → that behavior's transitions).\n */\n sourceBehavior?: SourceBehaviorMetadata;\n /**\n * Set by the resolve/inline phase alongside `sourceBehavior`. Carries\n * the resolved `Entity` definition of the imported behavior so the\n * client-side mock-data generator can produce rows for the trait's\n * `linkedEntity` without re-walking the import graph at runtime.\n */\n sourceEntityDefinition?: Entity;\n};\n\n/**\n * Provenance attached to a trait that was cloned from a `uses[]` import\n * during the inline phase. The resolved schema carries this so Studio\n * can group L2 cards by source behavior and offer an L3 drill into the\n * import's own transitions.\n */\nexport type SourceBehaviorMetadata = {\n /** Behavior name (e.g. \"std-stat-card\") — the resolved `from:` value. */\n behavior: string;\n /** Alias used at the import site (e.g. \"Stat\"). Multiple imports of\n * the same atom group by alias, not by behavior. */\n alias: string;\n /** Original trait name inside the imported behavior, before any\n * call-site `name:` rename. */\n originalName: string;\n};\n\nexport const SourceBehaviorMetadataSchema = z.object({\n behavior: z.string().min(1),\n alias: z.string().min(1),\n originalName: z.string().min(1),\n});\n\nexport const TraitSchema = z.object({\n id: TraitIdSchema.optional(),\n name: z.string().min(1),\n description: z.string().optional(),\n description_visual_prompt: z.string().optional(),\n category: TraitCategorySchema.optional(),\n entityRebindable: z.boolean().optional(),\n entityContract: EntityFieldContractSchema.optional(),\n entityBindingDescription: z.string().optional(),\n entityBindingSynonyms: z.string().optional(),\n capabilities: z.array(z.string()).optional(),\n scope: TraitScopeSchema,\n linkedEntity: z.string().optional(),\n linkedEntityId: EntityIdSchema.optional(),\n entityRefIds: z.record(z.string().min(1), EntityIdSchema).optional(),\n traitEmbedIds: z.record(z.string().min(1), TraitIdSchema).optional(),\n requiredFields: z.array(RequiredFieldSchema).optional(),\n dataEntities: z.array(TraitDataEntitySchema).optional(),\n stateMachine: StateMachineSchema.optional(),\n initialEffects: z.array(EffectSchema).optional(),\n ticks: z.array(TraitTickSchema).optional(),\n emits: z.array(TraitEventContractSchema).optional(),\n listens: z.array(TraitEventListenerSchema).optional(),\n ui: TraitUIBindingSchema.optional(),\n config: DeclaredTraitConfigSchema.optional(),\n sourceBehavior: SourceBehaviorMetadataSchema.optional(),\n sourceEntityDefinition: EntitySchema.optional(),\n});\n\n// TraitRefSchema defined here after TraitSchema to avoid forward reference.\n//\n// The reference arm IS `TraitReferenceSchema` — one schema for one shape. It\n// used to be a narrower hand-rolled copy (`ref`/`config`/`linkedEntity`/`name`/\n// `events` only), and because `z.object()` STRIPS undeclared keys rather than\n// rejecting them, every `.orb` that came through the loader's `safeParse` lost\n// `id`, `refId`, `linkedEntityId`, `listens`, `emitsScope`, `effects`, `fields`\n// and `eventIds` on every trait ref — silently, with a schema that reported\n// success. An atom's own sub-view refs (`trait DenseTableView =\n// TableView.traits.TableViewRender -> BrowseItem { listens {…} }`) arrived with\n// no listens at all, so the interpreted path could not wire what the compiled\n// path wires from the same file.\nexport const TraitRefSchema = z.union([\n z.string().min(1),\n TraitReferenceSchema,\n TraitSchema, // Allow inline trait definitions\n]);\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Check if a trait ref is an inline Trait definition\n */\n/**\n * Checks if a trait reference is an inline trait definition.\n * \n * Type guard to determine if a TraitRef is an inline trait object\n * (with 'name' property) rather than a string reference or object reference.\n * \n * @param {TraitRef} traitRef - Trait reference to check\n * @returns {boolean} True if traitRef is an inline trait, false otherwise\n * \n * @example\n * isInlineTrait({ name: 'MyTrait' }); // returns true (inline)\n * isInlineTrait('MyTrait'); // returns false (string reference)\n * isInlineTrait({ ref: 'MyTrait' }); // returns false (object reference)\n */\nexport function isInlineTrait(traitRef: TraitRef): traitRef is Trait {\n return typeof traitRef === 'object' && 'name' in traitRef && !('ref' in traitRef);\n}\n\n/**\n * Extracts the trait name from a trait reference.\n * \n * Handles all trait reference formats (string, inline object, object reference)\n * and returns the canonical trait name.\n * \n * @param {TraitRef} traitRef - Trait reference to extract name from\n * @returns {string} Trait name\n * \n * @example\n * getTraitName('MyTrait'); // returns 'MyTrait'\n * getTraitName({ name: 'MyTrait' }); // returns 'MyTrait'\n * getTraitName({ ref: 'MyTrait' }); // returns 'MyTrait'\n */\nexport function getTraitName(traitRef: TraitRef): string {\n if (typeof traitRef === 'string') {\n return traitRef;\n }\n if (isInlineTrait(traitRef)) {\n return traitRef.name;\n }\n return traitRef.ref;\n}\n\n/**\n * Extracts the configuration from a trait reference.\n * \n * Returns the configuration object for trait references that support it\n * (object references with 'config' property). Returns undefined for\n * string references and inline traits.\n * \n * @param {TraitRef} traitRef - Trait reference to extract config from\n * @returns {TraitConfig | undefined} Trait configuration or undefined\n *\n * @example\n * getTraitConfig('MyTrait'); // returns undefined\n * getTraitConfig({ name: 'MyTrait' }); // returns undefined\n * getTraitConfig({ ref: 'MyTrait', config: { option: 'value' } }); // returns config object\n */\nexport function getTraitConfig(traitRef: TraitRef): CallSiteConfig | undefined {\n if (typeof traitRef === 'string') {\n return undefined;\n }\n if (isInlineTrait(traitRef)) {\n return undefined; // Inline traits don't have config\n }\n return traitRef.config;\n}\n\n/**\n * Normalizes a trait reference to object form.\n * \n * Converts any trait reference format (string, inline, object) to a\n * standardized object format with 'ref' and optional 'config' properties.\n * \n * @param {TraitRef} traitRef - Trait reference to normalize\n * @returns {{ ref: string; config?: TraitConfig }} Normalized trait reference\n *\n * @example\n * normalizeTraitRef('MyTrait'); // returns { ref: 'MyTrait' }\n * normalizeTraitRef({ name: 'MyTrait' }); // returns { ref: 'MyTrait' }\n * normalizeTraitRef({ ref: 'MyTrait', config: {...} }); // returns original\n */\nexport function normalizeTraitRef(traitRef: TraitRef): { ref: string; config?: CallSiteConfig } {\n if (typeof traitRef === 'string') {\n return { ref: traitRef };\n }\n if (isInlineTrait(traitRef)) {\n return { ref: traitRef.name };\n }\n return traitRef;\n}\n\n// ============================================================================\n// Type exports\n// ============================================================================\n\nexport type TraitInput = z.input<typeof TraitSchema>;\nexport type TraitReferenceInput = z.input<typeof TraitReferenceSchema>;\n\n// Backward compatibility aliases\nexport type OrbitalTraitRef = TraitRef;\nexport const OrbitalTraitRefSchema = TraitRefSchema;\n","/**\n * Page Types for Orbital Units\n *\n * Defines OrbitalPage type for pages within an Orbital Unit.\n *\n * IMPORTANT: Trait-driven UI architecture requires pages to have traits.\n * Static sections are NO LONGER SUPPORTED.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\nimport type { PageId, TraitId, EntityId } from './identity.js';\nimport { PageIdSchema, TraitIdSchema, EntityIdSchema } from './identity.js';\nimport { TraitConfigSchema, type TraitConfig } from './trait.js';\n\n// ============================================================================\n// View Type\n// ============================================================================\n\n/**\n * Page view types.\n * Note: viewType may be deprecated in favor of trait-driven UI.\n */\nexport type ViewType = 'list' | 'detail' | 'create' | 'edit' | 'dashboard' | 'custom';\n\nexport const ViewTypeSchema = z.enum([\n 'list',\n 'detail',\n 'create',\n 'edit',\n 'dashboard',\n 'custom',\n]);\n\n// ============================================================================\n// Trait Reference\n// ============================================================================\n\n/**\n * Trait reference on a page.\n */\nexport type PageTraitRef = {\n /** Trait name from library */\n ref: string;\n /** V4 dual-carry id sibling of `ref` — optional until the Phase-7 flip. */\n refId?: TraitId;\n /** Entity this trait operates on */\n linkedEntity?: string;\n /** V4 dual-carry id sibling of `linkedEntity` — optional until the Phase-7 flip. */\n linkedEntityId?: EntityId;\n /** Additional trait configuration */\n config?: TraitConfig;\n};\n\nexport const PageTraitRefSchema = z.object({\n ref: z.string().min(1, 'Trait ref is required'),\n refId: TraitIdSchema.optional(),\n linkedEntity: z.string().optional(),\n linkedEntityId: EntityIdSchema.optional(),\n config: TraitConfigSchema.optional(),\n});\n\n// ============================================================================\n// Orbital Page\n// ============================================================================\n\n/**\n * OrbitalPage - a page definition within an Orbital Unit.\n *\n * TRAIT-DRIVEN: Pages must have traits array. Sections are NOT supported.\n */\nexport type OrbitalPage = {\n /** V4 dual-carry id sibling of `name` — optional until the Phase-7 flip. */\n id?: PageId;\n\n /** Page name (PascalCase, e.g., \"TasksPage\") */\n name: string;\n\n /** URL path (e.g., \"/tasks\", \"/tasks/:id\") */\n path: string;\n\n /** View type (optional in trait-driven mode) */\n viewType?: ViewType;\n\n /** Page title (optional, defaults to derived from name) */\n title?: string;\n\n /** Primary entity for this page */\n primaryEntity?: string;\n\n /**\n * Traits that drive UI for this page.\n * REQUIRED in trait-driven architecture.\n */\n traits?: PageTraitRef[];\n\n /** Is this the initial page for navigation? */\n isInitial?: boolean;\n};\n\n/**\n * Strict Zod schema for trait-driven pages.\n * Rejects unknown properties like 'sections'.\n */\nexport const OrbitalPageStrictSchema = z.object({\n id: PageIdSchema.optional(),\n name: z.string().min(1, 'Page name is required'),\n path: z.string().min(1, 'Page path is required').startsWith('/', 'Path must start with /'),\n primaryEntity: z.string().min(1, 'Primary entity is required'),\n traits: z.array(PageTraitRefSchema).min(1, 'Page must have at least one trait'),\n title: z.string().optional(),\n}).strict(); // Reject unknown keys like 'sections'\n\n/**\n * Zod schema for OrbitalPage.\n * Trait-driven: pages have traits instead of static sections/patterns.\n * Uses .strict() to reject unknown keys like 'sections'.\n */\nexport const OrbitalPageSchema = z.object({\n id: PageIdSchema.optional(),\n name: z.string().min(1, 'Page name is required'),\n path: z.string().min(1, 'Page path is required').startsWith('/', 'Path must start with /'),\n viewType: ViewTypeSchema.optional(),\n title: z.string().optional(),\n primaryEntity: z.string().optional(),\n traits: z.array(PageTraitRefSchema).optional(),\n isInitial: z.boolean().optional(),\n}).strict(); // Reject unknown keys like 'sections' - use traits with render_ui effects\n\nexport type OrbitalPageInput = z.input<typeof OrbitalPageSchema>;\nexport type OrbitalPageStrictInput = z.input<typeof OrbitalPageStrictSchema>;\n\n// ============================================================================\n// Type Aliases (for cleaner imports)\n// ============================================================================\n\n/** Alias for OrbitalPage - preferred name */\nexport type Page = OrbitalPage;\n\n/** Alias for OrbitalPageSchema - preferred name */\nexport const PageSchema = OrbitalPageSchema;\n","/**\n * Domain Context Types (Self-Contained)\n *\n * Defines domain classification types for applications.\n * Copied from schema/domain-context.ts to make orbitals/ self-contained.\n *\n * @packageDocumentation\n */\n\nimport { z } from \"zod\";\n\n// ============================================================================\n// Domain Categories\n// ============================================================================\n\n/**\n * High-level domain categories\n */\nexport type DomainCategory =\n | \"healthcare\"\n | \"education\"\n | \"finance\"\n | \"ecommerce\"\n | \"real-estate\"\n | \"logistics\"\n | \"hospitality\"\n | \"hr-management\"\n | \"project-management\"\n | \"social\"\n | \"content-management\"\n | \"iot\"\n | \"analytics\"\n | \"game\"\n | \"custom\";\n\nexport const DomainCategorySchema = z.enum([\n \"healthcare\",\n \"education\",\n \"finance\",\n \"ecommerce\",\n \"real-estate\",\n \"logistics\",\n \"hospitality\",\n \"hr-management\",\n \"project-management\",\n \"social\",\n \"content-management\",\n \"iot\",\n \"analytics\",\n \"game\",\n \"custom\",\n]);\n\n// ============================================================================\n// Agent Domain Categories (simplified for LLM-based tools)\n// ============================================================================\n\n/**\n * Simplified domain categories used by the agent tools for application classification.\n * All agent tools and skill generators should derive from this constant.\n */\nexport const AGENT_DOMAIN_CATEGORIES = [\n \"game\",\n \"business\",\n \"dashboard\",\n \"form\",\n \"content\",\n \"social\",\n \"ecommerce\",\n \"workflow\",\n] as const;\n\nexport type AgentDomainCategory = (typeof AGENT_DOMAIN_CATEGORIES)[number];\n\nexport const AgentDomainCategorySchema = z.enum([...AGENT_DOMAIN_CATEGORIES]);\n\n// ============================================================================\n// Game Sub-Categories\n// ============================================================================\n\n/**\n * Game genre sub-categories\n */\nexport type GameSubCategory =\n | \"platformer\"\n | \"shooter\"\n | \"puzzle\"\n | \"rpg\"\n | \"board\"\n | \"racing\"\n | \"fighting\"\n | \"tower-defense\"\n | \"endless-runner\"\n | \"simulation\"\n | \"arcade\"\n | \"adventure\";\n\nexport const GameSubCategorySchema = z.enum([\n \"platformer\",\n \"shooter\",\n \"puzzle\",\n \"rpg\",\n \"board\",\n \"racing\",\n \"fighting\",\n \"tower-defense\",\n \"endless-runner\",\n \"simulation\",\n \"arcade\",\n \"adventure\",\n]);\n\n// ============================================================================\n// Node Classification\n// ============================================================================\n\n/**\n * Domain vs System classification\n */\nexport type NodeClassification = \"domain\" | \"system\";\n\nexport const NodeClassificationSchema = z.enum([\"domain\", \"system\"]);\n\n// ============================================================================\n// Semantic Roles\n// ============================================================================\n\nexport type StateSemanticRole =\n | \"pending\"\n | \"active\"\n | \"completed\"\n | \"cancelled\"\n | \"error\"\n | \"suspended\"\n | \"blocked\"\n | \"domain_workflow\"\n | \"domain_status\"\n | \"system_loading\"\n | \"system_error\"\n | \"system_idle\"\n | \"system_editing\"\n | \"system_confirming\";\n\nexport const StateSemanticRoleSchema = z.enum([\n \"pending\",\n \"active\",\n \"completed\",\n \"cancelled\",\n \"error\",\n \"suspended\",\n \"blocked\",\n \"domain_workflow\",\n \"domain_status\",\n \"system_loading\",\n \"system_error\",\n \"system_idle\",\n \"system_editing\",\n \"system_confirming\",\n]);\n\nexport type EventSemanticRole =\n | \"domain_action\"\n | \"domain_trigger\"\n | \"system_crud\"\n | \"system_navigation\"\n | \"system_form\"\n | \"system_ui\";\n\nexport const EventSemanticRoleSchema = z.enum([\n \"domain_action\",\n \"domain_trigger\",\n \"system_crud\",\n \"system_navigation\",\n \"system_form\",\n \"system_ui\",\n]);\n\nexport type EntitySemanticRole =\n | \"domain_core\"\n | \"domain_supporting\"\n | \"domain_reference\"\n | \"system_user\"\n | \"system_config\"\n | \"system_audit\";\n\nexport const EntitySemanticRoleSchema = z.enum([\n \"domain_core\",\n \"domain_supporting\",\n \"domain_reference\",\n \"system_user\",\n \"system_config\",\n \"system_audit\",\n]);\n\n// ============================================================================\n// Domain Vocabulary\n// ============================================================================\n\n/**\n * Domain-specific vocabulary for naming conventions.\n * Maps generic terms to domain-appropriate labels.\n */\nexport type DomainVocabulary = {\n /** Label for items (e.g., \"Task\", \"Cargo\", \"Patient\") */\n item?: string;\n /** Label for collections (e.g., \"Tasks\", \"Inventory\", \"Patients\") */\n collection?: string;\n /** Label for create action (e.g., \"Add\", \"Recruit\", \"Admit\") */\n create?: string;\n /** Label for delete action (e.g., \"Remove\", \"Discharge\", \"Archive\") */\n delete?: string;\n /** Label for container (e.g., \"List\", \"Hold\", \"Ward\") */\n container?: string;\n /** Additional custom vocabulary */\n [key: string]: string | undefined;\n};\n\nexport const DomainVocabularySchema = z\n .record(z.string(), z.string())\n .optional();\n\n// ============================================================================\n// Domain Context (Simplified for Design System)\n// ============================================================================\n\n/**\n * User persona for UX decisions\n */\nexport type UserPersona = {\n /** Persona name */\n name: string;\n /** Role for RBAC */\n role?: string;\n /** Primary device */\n device?: \"mobile\" | \"tablet\" | \"desktop\";\n};\n\nexport const UserPersonaSchema = z.object({\n name: z.string().min(1),\n role: z.string().optional(),\n device: z.enum([\"mobile\", \"tablet\", \"desktop\"]).optional(),\n});\n\n/**\n * Domain context - user request + classification\n */\nexport type DomainContext = {\n /** Original user request - verbatim (typically at schema level) */\n request: string;\n /**\n * The verbatim excerpt or summary of the user request that produced THIS orbital.\n *\n * Purpose: Traceability - know exactly what the user asked for that led to this orbital.\n *\n * Can be:\n * - Exact quote: \"...with a calendar that syncs with Google Calendar...\"\n * - Summarized: \"Calendar integration with Google Calendar sync\"\n *\n * Examples:\n * - Request: \"Build a project management app with tasks, team collaboration, and Gantt charts\"\n * - Task orbital: requestFragment: \"tasks\"\n * - Team orbital: requestFragment: \"team collaboration\"\n * - Timeline orbital: requestFragment: \"Gantt charts\"\n *\n * This enables:\n * - Understanding WHY this orbital exists\n * - Regenerating with original context preserved\n * - Validating the orbital matches user intent\n */\n requestFragment?: string;\n /** Domain category */\n category: AgentDomainCategory;\n /** Sub-domain for more specific classification */\n subDomain?: string;\n /** User personas */\n personas?: UserPersona[];\n /** Domain-specific vocabulary for naming */\n vocabulary?: DomainVocabulary;\n};\n\nexport const DomainContextSchema = z.object({\n request: z.string().min(1, \"Original request is required\"),\n requestFragment: z.string().optional(),\n category: AgentDomainCategorySchema,\n subDomain: z.string().optional(),\n personas: z.array(UserPersonaSchema).optional(),\n vocabulary: DomainVocabularySchema.optional(),\n});\n\n// ============================================================================\n// UX Hints\n// ============================================================================\n\n/**\n * UX hints for guiding UI generation.\n * These inform pattern selection and layout decisions.\n */\n/**\n * UX hints for guiding UI generation.\n * These inform pattern selection and layout decisions.\n *\n * Note: These are HINTS, not strict requirements. LLMs may use any string value\n * including 'dashboard-grid', 'none', etc. The subagent generator interprets these\n * flexibly to produce appropriate render-ui effects.\n */\nexport type UXHints = {\n /** Overall user flow pattern (e.g., 'hub-spoke', 'crud-cycle', 'linear') */\n flowPattern?: string;\n /** Pattern for displaying lists (e.g., 'entity-table', 'entity-cards', 'dashboard-grid', 'none') */\n listPattern?: string;\n /** Pattern for create/edit forms (e.g., 'modal', 'drawer', 'page', 'none') */\n formPattern?: string;\n /** Pattern for entity detail views (e.g., 'drawer', 'page', 'split', 'none') */\n detailPattern?: string;\n /** Cross-orbital navigation links */\n relatedLinks?: RelatedLink[];\n};\n\n// UX hints use flexible string types - they are guidance, not strict validation\nexport const UXHintsSchema = z.object({\n flowPattern: z.string().optional(),\n listPattern: z.string().optional(),\n formPattern: z.string().optional(),\n detailPattern: z.string().optional(),\n relatedLinks: z.array(z.lazy(() => RelatedLinkSchema)).optional(),\n});\n\n/**\n * Related link for cross-orbital navigation.\n */\nexport type RelatedLink = {\n /** Field name of the relation (e.g., \"customerId\") */\n relation: string;\n /** Button/link text (e.g., \"View Customer\") */\n label: string;\n /** Target view type */\n targetView?: \"list\" | \"detail\";\n};\n\nexport const RelatedLinkSchema = z.object({\n relation: z.string().min(1),\n label: z.string().min(1),\n targetView: z.enum([\"list\", \"detail\"]).optional(),\n});\n\n// ============================================================================\n// Suggested Guards (Pre-Generation)\n// ============================================================================\n\n/**\n * Suggested guard - natural language description for decomposition phase.\n * Generator converts these to S-expressions during generation.\n */\nexport type SuggestedGuard = {\n /** Unique identifier */\n id: string;\n /** Natural language description (e.g., \"Weight must be under 1000kg\") */\n description: string;\n /** Events this guard applies to (e.g., [\"Cargo.CREATE\", \"Cargo.UPDATE\"]) */\n appliesTo: string[];\n};\n\nexport const SuggestedGuardSchema = z.object({\n id: z.string().min(1),\n description: z.string().min(1),\n appliesTo: z.array(z.string().min(1)),\n});\n\n// ============================================================================\n// Design Preferences\n// ============================================================================\n\n/**\n * Design preferences for visual styling\n */\nexport type DesignPreferences = {\n /** Design style */\n style?: \"minimal\" | \"modern\" | \"playful\" | \"data-driven\" | \"immersive\";\n /** Primary color (hex) */\n primaryColor?: string;\n /** Target device */\n device?: \"mobile\" | \"tablet\" | \"desktop\" | \"all\";\n /** Dark mode */\n darkMode?: boolean;\n /** UX hints for pattern selection */\n uxHints?: UXHints;\n};\n\nexport const DesignPreferencesSchema = z.object({\n style: z\n .enum([\"minimal\", \"modern\", \"playful\", \"data-driven\", \"immersive\"])\n .optional(),\n primaryColor: z\n .string()\n .regex(/^#[0-9A-Fa-f]{6}$/, \"Must be valid hex color\")\n .optional(),\n device: z.enum([\"mobile\", \"tablet\", \"desktop\", \"all\"]).optional(),\n darkMode: z.boolean().optional(),\n uxHints: UXHintsSchema.optional(),\n});\n\n// ============================================================================\n// Theme Definition — Skin axes (Layer 1 visual variation, see docs/Almadar_Std_Variations.md)\n// ============================================================================\n\n/** Spacing scale entry — each step pairs with a CSS `--space-N` variable */\nexport type SpacingScale = {\n space0?: string;\n space1?: string;\n space2?: string;\n space3?: string;\n space4?: string;\n space5?: string;\n space6?: string;\n space7?: string;\n space8?: string;\n space9?: string;\n space10?: string;\n space11?: string;\n space12?: string;\n};\n\nexport const SpacingScaleSchema = z.object({\n space0: z.string().optional(),\n space1: z.string().optional(),\n space2: z.string().optional(),\n space3: z.string().optional(),\n space4: z.string().optional(),\n space5: z.string().optional(),\n space6: z.string().optional(),\n space7: z.string().optional(),\n space8: z.string().optional(),\n space9: z.string().optional(),\n space10: z.string().optional(),\n space11: z.string().optional(),\n space12: z.string().optional(),\n});\n\n/**\n * Density axis — spacing rhythm + per-element heights and paddings.\n * Determines whether a UI feels compact (Linear), cozy (default), or spacious (Notion).\n */\nexport type DensityTokens = {\n spacing?: SpacingScale;\n buttonHeightSm?: string;\n buttonHeightMd?: string;\n buttonHeightLg?: string;\n inputHeightSm?: string;\n inputHeightMd?: string;\n inputHeightLg?: string;\n rowHeightCompact?: string;\n rowHeightNormal?: string;\n rowHeightSpacious?: string;\n cardPaddingSm?: string;\n cardPaddingMd?: string;\n cardPaddingLg?: string;\n dialogPadding?: string;\n sectionGap?: string;\n};\n\nexport const DensityTokensSchema = z.object({\n spacing: SpacingScaleSchema.optional(),\n buttonHeightSm: z.string().optional(),\n buttonHeightMd: z.string().optional(),\n buttonHeightLg: z.string().optional(),\n inputHeightSm: z.string().optional(),\n inputHeightMd: z.string().optional(),\n inputHeightLg: z.string().optional(),\n rowHeightCompact: z.string().optional(),\n rowHeightNormal: z.string().optional(),\n rowHeightSpacious: z.string().optional(),\n cardPaddingSm: z.string().optional(),\n cardPaddingMd: z.string().optional(),\n cardPaddingLg: z.string().optional(),\n dialogPadding: z.string().optional(),\n sectionGap: z.string().optional(),\n});\n\n/** Single entry in the type scale — size + matching line-height */\nexport type TypeScaleEntry = {\n size: string;\n lineHeight: string;\n};\n\nexport const TypeScaleEntrySchema = z.object({\n size: z.string(),\n lineHeight: z.string(),\n});\n\n/** Type slot (which family the intent renders in) */\nexport type TypeSlot = \"display\" | \"body\" | \"mono\";\n\nexport const TypeSlotSchema = z.enum([\"display\", \"body\", \"mono\"]);\n\n/** Type size key from the scale */\nexport type TypeSizeKey =\n | \"xs\"\n | \"sm\"\n | \"base\"\n | \"lg\"\n | \"xl\"\n | \"2xl\"\n | \"3xl\"\n | \"4xl\"\n | \"display-1\"\n | \"display-2\";\n\nexport const TypeSizeKeySchema = z.enum([\n \"xs\",\n \"sm\",\n \"base\",\n \"lg\",\n \"xl\",\n \"2xl\",\n \"3xl\",\n \"4xl\",\n \"display-1\",\n \"display-2\",\n]);\n\n/** Type weight key */\nexport type TypeWeight = \"normal\" | \"medium\" | \"bold\";\n\nexport const TypeWeightSchema = z.enum([\"normal\", \"medium\", \"bold\"]);\n\n/** Intent → (slot, size, weight) mapping. Authors write intent in render-ui; skin resolves. */\nexport type TypeIntent = {\n slot: TypeSlot;\n size: TypeSizeKey;\n weight: TypeWeight;\n};\n\nexport const TypeIntentSchema = z.object({\n slot: TypeSlotSchema,\n size: TypeSizeKeySchema,\n weight: TypeWeightSchema,\n});\n\nexport type TypeScale = {\n xs?: TypeScaleEntry;\n sm?: TypeScaleEntry;\n base?: TypeScaleEntry;\n lg?: TypeScaleEntry;\n xl?: TypeScaleEntry;\n \"2xl\"?: TypeScaleEntry;\n \"3xl\"?: TypeScaleEntry;\n \"4xl\"?: TypeScaleEntry;\n \"display-1\"?: TypeScaleEntry;\n \"display-2\"?: TypeScaleEntry;\n};\n\nexport const TypeScaleSchema = z.object({\n xs: TypeScaleEntrySchema.optional(),\n sm: TypeScaleEntrySchema.optional(),\n base: TypeScaleEntrySchema.optional(),\n lg: TypeScaleEntrySchema.optional(),\n xl: TypeScaleEntrySchema.optional(),\n \"2xl\": TypeScaleEntrySchema.optional(),\n \"3xl\": TypeScaleEntrySchema.optional(),\n \"4xl\": TypeScaleEntrySchema.optional(),\n \"display-1\": TypeScaleEntrySchema.optional(),\n \"display-2\": TypeScaleEntrySchema.optional(),\n});\n\nexport type TypeIntentMap = {\n headingMajor?: TypeIntent;\n headingMinor?: TypeIntent;\n bodyEmphasis?: TypeIntent;\n bodyDefault?: TypeIntent;\n bodyQuiet?: TypeIntent;\n caption?: TypeIntent;\n numeric?: TypeIntent;\n};\n\nexport const TypeIntentMapSchema = z.object({\n headingMajor: TypeIntentSchema.optional(),\n headingMinor: TypeIntentSchema.optional(),\n bodyEmphasis: TypeIntentSchema.optional(),\n bodyDefault: TypeIntentSchema.optional(),\n bodyQuiet: TypeIntentSchema.optional(),\n caption: TypeIntentSchema.optional(),\n numeric: TypeIntentSchema.optional(),\n});\n\n/**\n * Type axis — family triplet, size scale, and intent mapping.\n * Determines whether a UI reads as editorial (serif display + sans body),\n * tech (sans + mono numeric), or dense (mono everywhere, tight leading).\n */\nexport type TypeScaleTokens = {\n displayFamily?: string;\n bodyFamily?: string;\n monoFamily?: string;\n scale?: TypeScale;\n intents?: TypeIntentMap;\n};\n\nexport const TypeScaleTokensSchema = z.object({\n displayFamily: z.string().optional(),\n bodyFamily: z.string().optional(),\n monoFamily: z.string().optional(),\n scale: TypeScaleSchema.optional(),\n intents: TypeIntentMapSchema.optional(),\n});\n\n/** Duration palette key */\nexport type MotionDurationKey =\n | \"instant\"\n | \"fast\"\n | \"normal\"\n | \"slow\"\n | \"dramatic\";\n\nexport const MotionDurationKeySchema = z.enum([\n \"instant\",\n \"fast\",\n \"normal\",\n \"slow\",\n \"dramatic\",\n]);\n\n/** Easing palette key */\nexport type MotionEasingKey = \"linear\" | \"standard\" | \"emphasized\" | \"spring\";\n\nexport const MotionEasingKeySchema = z.enum([\n \"linear\",\n \"standard\",\n \"emphasized\",\n \"spring\",\n]);\n\n/** Per-intent motion specification (duration + easing) */\nexport type MotionIntent = {\n duration: MotionDurationKey;\n easing: MotionEasingKey;\n};\n\nexport const MotionIntentSchema = z.object({\n duration: MotionDurationKeySchema,\n easing: MotionEasingKeySchema,\n});\n\nexport type MotionDurationPalette = {\n instant?: string;\n fast?: string;\n normal?: string;\n slow?: string;\n dramatic?: string;\n};\n\nexport const MotionDurationPaletteSchema = z.object({\n instant: z.string().optional(),\n fast: z.string().optional(),\n normal: z.string().optional(),\n slow: z.string().optional(),\n dramatic: z.string().optional(),\n});\n\nexport type MotionEasingPalette = {\n linear?: string;\n standard?: string;\n emphasized?: string;\n spring?: string;\n};\n\nexport const MotionEasingPaletteSchema = z.object({\n linear: z.string().optional(),\n standard: z.string().optional(),\n emphasized: z.string().optional(),\n spring: z.string().optional(),\n});\n\nexport type MotionIntentMap = {\n enter?: MotionIntent;\n exit?: MotionIntent;\n hover?: MotionIntent;\n press?: MotionIntent;\n expand?: MotionIntent;\n transition?: MotionIntent;\n};\n\nexport const MotionIntentMapSchema = z.object({\n enter: MotionIntentSchema.optional(),\n exit: MotionIntentSchema.optional(),\n hover: MotionIntentSchema.optional(),\n press: MotionIntentSchema.optional(),\n expand: MotionIntentSchema.optional(),\n transition: MotionIntentSchema.optional(),\n});\n\n/**\n * Motion axis — duration palette + easing palette + per-intent mapping.\n * Mechanical (linear, fast) vs organic (cubic-bezier, medium) vs dramatic (spring, slow).\n */\nexport type MotionTokens = {\n durations?: MotionDurationPalette;\n easings?: MotionEasingPalette;\n intents?: MotionIntentMap;\n};\n\nexport const MotionTokensSchema = z.object({\n durations: MotionDurationPaletteSchema.optional(),\n easings: MotionEasingPaletteSchema.optional(),\n intents: MotionIntentMapSchema.optional(),\n});\n\n/** Icon family selector */\nexport type IconFamily =\n | \"lucide\"\n | \"phosphor-outline\"\n | \"phosphor-fill\"\n | \"phosphor-duotone\"\n | \"tabler\"\n | \"fa-solid\";\n\nexport const IconFamilySchema = z.enum([\n \"lucide\",\n \"phosphor-outline\",\n \"phosphor-fill\",\n \"phosphor-duotone\",\n \"tabler\",\n \"fa-solid\",\n]);\n\n/**\n * Iconography axis — icon set + stroke + default size.\n * Outline (Lucide) vs filled (Phosphor-fill) vs duotone (Phosphor-duotone).\n */\nexport type IconographyTokens = {\n family?: IconFamily;\n strokeWidth?: string;\n defaultSize?: string;\n};\n\nexport const IconographyTokensSchema = z.object({\n family: IconFamilySchema.optional(),\n strokeWidth: z.string().optional(),\n defaultSize: z.string().optional(),\n});\n\n/**\n * Elevation axis — per-layer shadow mapping.\n * Each value references a `--shadow-*` token or a raw CSS shadow value.\n */\nexport type ElevationTokens = {\n cardElevation?: string;\n popoverElevation?: string;\n dialogElevation?: string;\n toastElevation?: string;\n};\n\nexport const ElevationTokensSchema = z.object({\n cardElevation: z.string().optional(),\n popoverElevation: z.string().optional(),\n dialogElevation: z.string().optional(),\n toastElevation: z.string().optional(),\n});\n\n/**\n * Geometry axis — radius rhythm + border-width rhythm with intent.\n * Sharp (radius 0) vs soft (radius 8/12) vs pill (radius full on interactive).\n */\nexport type GeometryTokens = {\n radiusContainer?: string;\n radiusInteractive?: string;\n radiusPill?: string;\n borderHairline?: string;\n borderStandard?: string;\n borderHeavy?: string;\n};\n\nexport const GeometryTokensSchema = z.object({\n radiusContainer: z.string().optional(),\n radiusInteractive: z.string().optional(),\n radiusPill: z.string().optional(),\n borderHairline: z.string().optional(),\n borderStandard: z.string().optional(),\n borderHeavy: z.string().optional(),\n});\n\n/**\n * Color axis — semantic + surface + feedback color tokens as a typed bundle.\n *\n * Replaces the free-form `colors: Record<string, string>` on `ThemeTokens` for\n * authors targeting the typed SkinSpec entrypoint. Every field maps 1:1 to a\n * `--color-*` CSS custom property emitted by themes. All fields are optional\n * so a partial slice can layer onto a default (light/dark mode pair, etc.).\n */\nexport type ColorTokens = {\n /* Brand / accent */\n primary?: string;\n primaryHover?: string;\n primaryForeground?: string;\n secondary?: string;\n secondaryHover?: string;\n secondaryForeground?: string;\n accent?: string;\n accentForeground?: string;\n muted?: string;\n mutedForeground?: string;\n\n /* Surface palette */\n background?: string;\n foreground?: string;\n card?: string;\n cardForeground?: string;\n surface?: string;\n border?: string;\n input?: string;\n ring?: string;\n\n /* Feedback */\n error?: string;\n errorForeground?: string;\n success?: string;\n successForeground?: string;\n warning?: string;\n warningForeground?: string;\n info?: string;\n infoForeground?: string;\n\n /* Optional table-specific (themes that ship them; default to neutrals) */\n tableHeader?: string;\n tableBorder?: string;\n tableRowHover?: string;\n surfaceHover?: string;\n borderHover?: string;\n placeholder?: string;\n};\n\nexport const ColorTokensSchema = z.object({\n primary: z.string().optional(),\n primaryHover: z.string().optional(),\n primaryForeground: z.string().optional(),\n secondary: z.string().optional(),\n secondaryHover: z.string().optional(),\n secondaryForeground: z.string().optional(),\n accent: z.string().optional(),\n accentForeground: z.string().optional(),\n muted: z.string().optional(),\n mutedForeground: z.string().optional(),\n background: z.string().optional(),\n foreground: z.string().optional(),\n card: z.string().optional(),\n cardForeground: z.string().optional(),\n surface: z.string().optional(),\n border: z.string().optional(),\n input: z.string().optional(),\n ring: z.string().optional(),\n error: z.string().optional(),\n errorForeground: z.string().optional(),\n success: z.string().optional(),\n successForeground: z.string().optional(),\n warning: z.string().optional(),\n warningForeground: z.string().optional(),\n info: z.string().optional(),\n infoForeground: z.string().optional(),\n tableHeader: z.string().optional(),\n tableBorder: z.string().optional(),\n tableRowHover: z.string().optional(),\n surfaceHover: z.string().optional(),\n borderHover: z.string().optional(),\n placeholder: z.string().optional(),\n});\n\n/**\n * Illustration style preset for empty/loading/error/onboarding states.\n *\n * - `minimal`: icon + short text, no imagery (current default)\n * - `illustrated`: svg illustration library (undraw-style)\n * - `photo`: stock photography\n * - `text-only`: clean text, no imagery\n * - `mascot`: branded character (Mailchimp-style)\n */\nexport type IllustrationStyle =\n | \"minimal\"\n | \"illustrated\"\n | \"photo\"\n | \"text-only\"\n | \"mascot\";\n\nexport const IllustrationStyleSchema = z.enum([\n \"minimal\",\n \"illustrated\",\n \"photo\",\n \"text-only\",\n \"mascot\",\n]);\n\n/**\n * Illustration axis — empty/loading/error/onboarding imagery style.\n * `style` selects the preset; the per-state `*Asset` fields are optional\n * overrides for skins that want to ship custom artwork.\n */\nexport type IllustrationTokens = {\n style?: IllustrationStyle;\n emptyAsset?: string;\n loadingAsset?: string;\n errorAsset?: string;\n onboardingAsset?: string;\n};\n\nexport const IllustrationTokensSchema = z.object({\n style: IllustrationStyleSchema.optional(),\n emptyAsset: z.string().optional(),\n loadingAsset: z.string().optional(),\n errorAsset: z.string().optional(),\n onboardingAsset: z.string().optional(),\n});\n\n/**\n * Theme tokens - CSS custom properties for design system.\n *\n * Layer 1 visual variation (see docs/Almadar_Std_Variations.md): the original\n * `colors`/`radii`/`spacing`/`typography`/`shadows` Record fields are kept for\n * backward compatibility. The new typed axes (`density`, `typeScale`, `motion`,\n * `iconography`, `elevation`, `geometry`) carry the structured token surface\n * that lets two themes feel like different products, not just different paint.\n */\nexport type ThemeTokens = {\n /**\n * Color axis — typed semantic + surface + feedback colors.\n * Replaces the free-form `colors` Record below for new authors.\n */\n color?: ColorTokens;\n /** Density axis — spacing rhythm, per-element heights and paddings */\n density?: DensityTokens;\n /** Type axis — family triplet, scale, intent mapping */\n typeScale?: TypeScaleTokens;\n /** Motion axis — duration palette, easing palette, intent mapping */\n motion?: MotionTokens;\n /** Iconography axis — icon family, stroke, default size */\n iconography?: IconographyTokens;\n /** Elevation axis — per-layer shadow mapping */\n elevation?: ElevationTokens;\n /** Geometry axis — radius rhythm, border-width rhythm with intent */\n geometry?: GeometryTokens;\n /** Illustration axis — empty/loading/error state imagery style */\n illustration?: IllustrationTokens;\n\n // ── Legacy free-form maps (pre-Layer-1). Kept for back-compat with\n // older callers that emit raw `--color-*` / `--radius-*` etc. as\n // string maps. New authors should use the typed axes above.\n /** @deprecated Use `color` (typed). */\n colors?: Record<string, string>;\n /** @deprecated Use `geometry.radius*` and theme CSS for full radius scale. */\n radii?: Record<string, string>;\n /** @deprecated Use `density.spacing` (typed scale). */\n spacing?: Record<string, string>;\n /** @deprecated Use `typeScale` (typed family + scale + intents). */\n typography?: Record<string, string>;\n /** @deprecated Use `elevation` (typed per-layer mapping). */\n shadows?: Record<string, string>;\n};\n\nexport const ThemeTokensSchema = z.object({\n color: ColorTokensSchema.optional(),\n density: DensityTokensSchema.optional(),\n typeScale: TypeScaleTokensSchema.optional(),\n motion: MotionTokensSchema.optional(),\n iconography: IconographyTokensSchema.optional(),\n elevation: ElevationTokensSchema.optional(),\n geometry: GeometryTokensSchema.optional(),\n illustration: IllustrationTokensSchema.optional(),\n // Legacy\n colors: z.record(z.string(), z.string()).optional(),\n radii: z.record(z.string(), z.string()).optional(),\n spacing: z.record(z.string(), z.string()).optional(),\n typography: z.record(z.string(), z.string()).optional(),\n shadows: z.record(z.string(), z.string()).optional(),\n});\n\n/**\n * Theme variant - overrides for a specific mode (e.g., dark mode).\n * Mirrors ThemeTokens fields with the same backward-compat + new-axis structure.\n */\nexport type ThemeVariant = {\n /** Color axis overrides */\n color?: ColorTokens;\n /** Density axis overrides */\n density?: DensityTokens;\n /** Type axis overrides */\n typeScale?: TypeScaleTokens;\n /** Motion axis overrides */\n motion?: MotionTokens;\n /** Iconography axis overrides */\n iconography?: IconographyTokens;\n /** Elevation axis overrides */\n elevation?: ElevationTokens;\n /** Geometry axis overrides */\n geometry?: GeometryTokens;\n /** Illustration axis overrides */\n illustration?: IllustrationTokens;\n\n // ── Legacy free-form maps (pre-Layer-1). See ThemeTokens for guidance.\n /** @deprecated Use `color`. */\n colors?: Record<string, string>;\n /** @deprecated */\n radii?: Record<string, string>;\n /** @deprecated */\n spacing?: Record<string, string>;\n /** @deprecated */\n typography?: Record<string, string>;\n /** @deprecated */\n shadows?: Record<string, string>;\n};\n\nexport const ThemeVariantSchema = z.object({\n color: ColorTokensSchema.optional(),\n density: DensityTokensSchema.optional(),\n typeScale: TypeScaleTokensSchema.optional(),\n motion: MotionTokensSchema.optional(),\n iconography: IconographyTokensSchema.optional(),\n elevation: ElevationTokensSchema.optional(),\n geometry: GeometryTokensSchema.optional(),\n illustration: IllustrationTokensSchema.optional(),\n colors: z.record(z.string(), z.string()).optional(),\n radii: z.record(z.string(), z.string()).optional(),\n spacing: z.record(z.string(), z.string()).optional(),\n typography: z.record(z.string(), z.string()).optional(),\n shadows: z.record(z.string(), z.string()).optional(),\n});\n\n/**\n * Theme definition - design system for an orbital.\n */\nexport type ThemeDefinition = {\n /** Theme name */\n name: string;\n /** Base tokens */\n tokens: ThemeTokens;\n /** Named variants (e.g., \"dark\", \"high-contrast\") */\n variants?: Record<string, ThemeVariant>;\n};\n\nexport const ThemeDefinitionSchema = z.object({\n name: z.string().min(1, \"Theme name is required\"),\n tokens: ThemeTokensSchema,\n variants: z.record(z.string(), ThemeVariantSchema).optional(),\n});\n\n/**\n * ThemeRef - Theme can be inline definition OR reference to imported theme.\n *\n * Reference format: \"Alias.theme\"\n */\nexport type ThemeRef = ThemeDefinition | string;\n\n/**\n * Checks if a theme reference is a string.\n * \n * Type guard to determine if a theme reference is a string reference\n * (format: \"Alias.theme\") rather than an inline theme definition.\n * \n * @param {ThemeRef} theme - Theme reference to check\n * @returns {boolean} True if theme is a string reference, false otherwise\n * \n * @example\n * isThemeReference(\"Ocean.theme\"); // returns true\n * isThemeReference({ name: \"ocean\", colors: {...} }); // returns false\n */\nexport function isThemeReference(theme: ThemeRef): theme is string {\n return typeof theme === \"string\";\n}\n\n/**\n * Validate theme reference format: \"Alias.theme\"\n */\nexport const ThemeRefStringSchema = z\n .string()\n .regex(\n /^[A-Z][a-zA-Z0-9]*\\.theme$/,\n 'Theme reference must be in format \"Alias.theme\" (e.g., \"Ocean.theme\")',\n );\n\nexport const ThemeRefSchema = z.union([\n ThemeDefinitionSchema,\n ThemeRefStringSchema,\n]);\n\n// ============================================================================\n// SkinSpec — Layer 1 visual variation vocabulary (docs/Almadar_Std_Variations.md §2.3)\n// ============================================================================\n\n/**\n * `SkinSpec` is an alias for `ThemeDefinition` — same object, doc-aligned\n * name. The doc refers to a complete eight-axis visual identity as a\n * \"SkinSpec\"; in the type system it's a `ThemeDefinition` whose `tokens`\n * field carries the eight typed slices (`color`, `density`, `typeScale`,\n * `geometry`, `elevation`, `motion`, `iconography`, `illustration`).\n *\n * There is no separate type — this alias prevents the two surfaces from\n * drifting.\n */\nexport type SkinSpec = ThemeDefinition;\nexport const SkinSpecSchema = ThemeDefinitionSchema;\n\n/**\n * Slice-name aliases — the doc and `_contract.md` refer to each axis as\n * `<Name>Slice`. The existing types use `<Name>Tokens`. These aliases let\n * skin authors write the doc's vocabulary while pointing at the single\n * canonical type definition. No forks.\n */\nexport type ColorSlice = ColorTokens;\nexport type DensitySlice = DensityTokens;\nexport type TypeSlice = TypeScaleTokens;\nexport type GeometrySlice = GeometryTokens;\nexport type ElevationSlice = ElevationTokens;\nexport type MotionSlice = MotionTokens;\nexport type IconographySlice = IconographyTokens;\nexport type IllustrationSlice = IllustrationTokens;\n\nexport const ColorSliceSchema = ColorTokensSchema;\nexport const DensitySliceSchema = DensityTokensSchema;\nexport const TypeSliceSchema = TypeScaleTokensSchema;\nexport const GeometrySliceSchema = GeometryTokensSchema;\nexport const ElevationSliceSchema = ElevationTokensSchema;\nexport const MotionSliceSchema = MotionTokensSchema;\nexport const IconographySliceSchema = IconographyTokensSchema;\nexport const IllustrationSliceSchema = IllustrationTokensSchema;\n\n// ============================================================================\n// Design Tokens (Legacy)\n// ============================================================================\n\n/**\n * Design tokens - reusable Tailwind class collections.\n * @deprecated Use ThemeDefinition instead for new code.\n *\n * Instead of repeating raw Tailwind classes everywhere, define once and reference by name.\n * Example: `token: \"surfaces.glass\"` resolves to the Tailwind classes defined here.\n */\nexport interface DesignTokens {\n /** Surface styles: backgrounds, borders, shadows */\n surfaces?: Record<string, string>;\n /** Text styles: typography, colors */\n text?: Record<string, string>;\n /** Interactive element styles: buttons, links */\n interactive?: Record<string, string>;\n /** Effect styles: shadows, animations, transitions */\n effects?: Record<string, string>;\n /** Additional custom categories */\n [category: string]: Record<string, string> | undefined;\n}\n\nexport const DesignTokensSchema = z\n .record(z.string(), z.record(z.string(), z.string()))\n .optional();\n\n// ============================================================================\n// Custom Pattern Definitions\n// ============================================================================\n\n/**\n * Allowed HTML elements for custom patterns.\n * These are safe, semantic elements for building custom UIs.\n */\nexport const ALLOWED_CUSTOM_COMPONENTS = [\n \"div\",\n \"span\",\n \"button\",\n \"a\",\n \"p\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"header\",\n \"footer\",\n \"section\",\n \"article\",\n \"nav\",\n \"main\",\n \"aside\",\n \"ul\",\n \"ol\",\n \"li\",\n \"img\",\n \"label\",\n \"input\",\n \"form\",\n] as const;\n\nexport type AllowedCustomComponent = (typeof ALLOWED_CUSTOM_COMPONENTS)[number];\n\n/**\n * Custom pattern definition for app-specific reusable patterns.\n *\n * Register custom designs that can be referenced by name throughout the schema.\n */\nexport interface CustomPatternDefinition {\n /** Always 'custom' for custom patterns */\n type: \"custom\";\n /** HTML element to render */\n component: AllowedCustomComponent;\n /** Base Tailwind classes (can include {prop} placeholders) */\n className: string;\n /** Named content slots for nested content */\n slots?: string[];\n /** Configurable props that can be passed when using the pattern */\n props?: string[];\n}\n\nexport const CustomPatternDefinitionSchema = z.object({\n type: z.literal(\"custom\"),\n component: z.enum(ALLOWED_CUSTOM_COMPONENTS),\n className: z.string(),\n slots: z.array(z.string()).optional(),\n props: z.array(z.string()).optional(),\n});\n\n/**\n * Map of custom pattern names to their definitions.\n */\nexport type CustomPatternMap = Record<string, CustomPatternDefinition>;\n\nexport const CustomPatternMapSchema = z\n .record(z.string(), CustomPatternDefinitionSchema)\n .optional();\n\n// ============================================================================\n// Type exports\n// ============================================================================\n\nexport type DomainContextInput = z.input<typeof DomainContextSchema>;\nexport type DesignPreferencesInput = z.input<typeof DesignPreferencesSchema>;\nexport type UserPersonaInput = z.input<typeof UserPersonaSchema>;\nexport type DesignTokensInput = z.input<typeof DesignTokensSchema>;\nexport type CustomPatternDefinitionInput = z.input<\n typeof CustomPatternDefinitionSchema\n>;\nexport type CustomPatternMapInput = z.input<typeof CustomPatternMapSchema>;\n","/**\n * Service Types for Orbital Schema\n *\n * Defines external service integrations (REST APIs, WebSockets, MCP servers)\n * that can be used by orbital units via the `call_service` effect.\n *\n * @packageDocumentation\n */\n\nimport { z } from \"zod\";\n\n// ============================================================================\n// Service Type Enum\n// ============================================================================\n\n/**\n * Types of external services that can be integrated.\n */\nexport const SERVICE_TYPES = [\"rest\", \"socket\", \"mcp\"] as const;\n\nexport type ServiceType = (typeof SERVICE_TYPES)[number];\n\nexport const ServiceTypeSchema = z.enum(SERVICE_TYPES);\n\n// ============================================================================\n// REST Service Definition\n// ============================================================================\n\n/**\n * Configuration for a REST API service.\n *\n * @example\n * ```typescript\n * const weatherService: RestServiceDef = {\n * name: 'WeatherAPI',\n * type: 'rest',\n * baseUrl: 'https://api.openweathermap.org/data/2.5',\n * headers: {\n * 'Content-Type': 'application/json',\n * },\n * auth: {\n * type: 'api-key',\n * keyName: 'appid',\n * location: 'query',\n * },\n * };\n * ```\n */\nexport type RestServiceDef = {\n /** Unique service name (used in call_service effect) */\n name: string;\n\n /** Service type */\n type: \"rest\";\n\n /** Optional description */\n description?: string;\n\n /** Base URL for the API */\n baseUrl: string;\n\n /** Default headers to include in all requests */\n headers?: Record<string, string>;\n\n /** Authentication configuration */\n auth?: RestAuthConfig;\n\n /** Timeout in milliseconds (default: 30000) */\n timeout?: number;\n};\n\n/**\n * Authentication configuration for REST services.\n */\nexport type RestAuthConfig = {\n /** Authentication type */\n type: \"api-key\" | \"bearer\" | \"basic\" | \"oauth2\";\n\n /** For api-key: the query parameter or header name */\n keyName?: string;\n\n /** For api-key: where to place the key */\n location?: \"query\" | \"header\";\n\n /** Environment variable name containing the secret (for secure storage) */\n secretEnv?: string;\n};\n\nexport const RestAuthConfigSchema = z.object({\n type: z.enum([\"api-key\", \"bearer\", \"basic\", \"oauth2\"]),\n keyName: z.string().optional(),\n location: z.enum([\"query\", \"header\"]).optional(),\n secretEnv: z.string().optional(),\n});\n\nexport const RestServiceDefSchema = z.object({\n name: z.string().min(1, \"Service name is required\"),\n type: z.literal(\"rest\"),\n description: z.string().optional(),\n baseUrl: z.string().url(\"Base URL must be a valid URL\"),\n headers: z.record(z.string()).optional(),\n auth: RestAuthConfigSchema.optional(),\n timeout: z.number().positive().optional(),\n});\n\n// ============================================================================\n// Socket Service Definition\n// ============================================================================\n\n/**\n * Configuration for a WebSocket service.\n *\n * @example\n * ```typescript\n * const chatService: SocketServiceDef = {\n * name: 'ChatSocket',\n * type: 'socket',\n * url: 'wss://chat.example.com',\n * events: {\n * inbound: ['message_received', 'user_joined', 'user_left'],\n * outbound: ['send_message', 'join_room', 'leave_room'],\n * },\n * };\n * ```\n */\nexport type SocketServiceDef = {\n /** Unique service name */\n name: string;\n\n /** Service type */\n type: \"socket\";\n\n /** Optional description */\n description?: string;\n\n /** WebSocket URL */\n url: string;\n\n /** Event definitions */\n events: SocketEvents;\n\n /** Reconnection configuration */\n reconnect?: {\n /** Enable automatic reconnection */\n enabled: boolean;\n /** Maximum reconnection attempts */\n maxAttempts?: number;\n /** Delay between attempts in ms */\n delayMs?: number;\n };\n};\n\n/**\n * Socket event definitions.\n */\nexport type SocketEvents = {\n /** Events received from server (maps to orbital events) */\n inbound: string[];\n\n /** Events sent to server (triggered by effects) */\n outbound: string[];\n};\n\nexport const SocketEventsSchema = z.object({\n inbound: z.array(z.string()),\n outbound: z.array(z.string()),\n});\n\nexport const SocketServiceDefSchema = z.object({\n name: z.string().min(1, \"Service name is required\"),\n type: z.literal(\"socket\"),\n description: z.string().optional(),\n url: z.string().url(\"WebSocket URL must be valid\"),\n events: SocketEventsSchema,\n reconnect: z\n .object({\n enabled: z.boolean(),\n maxAttempts: z.number().positive().optional(),\n delayMs: z.number().positive().optional(),\n })\n .optional(),\n});\n\n// ============================================================================\n// MCP Service Definition\n// ============================================================================\n\n/**\n * Configuration for an MCP (Model Context Protocol) server.\n *\n * @example\n * ```typescript\n * const mcpService: McpServiceDef = {\n * name: 'DatabaseMCP',\n * type: 'mcp',\n * serverPath: './mcp-servers/database',\n * capabilities: ['query', 'insert', 'update'],\n * };\n * ```\n */\nexport type McpServiceDef = {\n /** Unique service name */\n name: string;\n\n /** Service type */\n type: \"mcp\";\n\n /** Optional description */\n description?: string;\n\n /** Path to MCP server executable or module */\n serverPath: string;\n\n /** List of capabilities/tools exposed by the MCP server */\n capabilities: string[];\n\n /** Environment variables to pass to the MCP server */\n env?: Record<string, string>;\n};\n\nexport const McpServiceDefSchema = z.object({\n name: z.string().min(1, \"Service name is required\"),\n type: z.literal(\"mcp\"),\n description: z.string().optional(),\n serverPath: z.string().min(1, \"Server path is required\"),\n capabilities: z\n .array(z.string())\n .min(1, \"At least one capability is required\"),\n env: z.record(z.string()).optional(),\n});\n\n// ============================================================================\n// Union Type: ServiceDefinition\n// ============================================================================\n\n/**\n * Union type for all service definitions.\n */\nexport type ServiceDefinition =\n | RestServiceDef\n | SocketServiceDef\n | McpServiceDef;\n\nexport const ServiceDefinitionSchema = z.discriminatedUnion(\"type\", [\n RestServiceDefSchema,\n SocketServiceDefSchema,\n McpServiceDefSchema,\n]);\n\n// ============================================================================\n// Service Reference (Inline OR Reference)\n// ============================================================================\n\n/**\n * ServiceRef - Service can be inline definition, reference object with overrides,\n * or bare string reference to an imported service.\n *\n * Reference format: \"Alias.services.ServiceName\"\n */\nexport type ServiceRef = ServiceDefinition | ServiceRefObject | string;\n\n/**\n * Phase F: Service reference object with override fields.\n *\n * Mirrors the Rust `ServiceRefObject` at\n * `orbital-rust/crates/orbital-core/src/schema/types.rs:353-375`. A caller\n * imports a service via `uses[]`, references it by `ref`, and supplies\n * any subset of these fields to override the imported service's defaults\n * during inlining.\n *\n * @example\n * ```typescript\n * const ref: ServiceRefObject = {\n * ref: \"Weather.services.openweather\",\n * baseUrl: \"https://staging.weather.example.com\",\n * headers: { \"X-Tenant\": \"acme\" },\n * };\n * ```\n */\nexport type ServiceRefObject = {\n /** Reference to imported service: \"Alias.services.ServiceName\" */\n ref: string;\n /** Override the service description */\n description?: string;\n /** Override the REST baseUrl */\n baseUrl?: string;\n /** Override or merge default headers (caller wins on key collision) */\n headers?: Record<string, string>;\n /** Override the WebSocket url */\n url?: string;\n /** Override the MCP server path */\n serverPath?: string;\n};\n\n/**\n * Checks if a service reference is a bare string reference.\n *\n * Type guard to determine if a service reference is a string reference\n * (format: \"Alias.services.ServiceName\") rather than an inline service\n * definition or a reference object.\n *\n * @param {ServiceRef} service - Service reference to check\n * @returns {boolean} True if service is a string reference, false otherwise\n *\n * @example\n * isServiceReference(\"Weather.services.openweather\"); // returns true\n * isServiceReference({ name: \"weather\", type: \"rest\" }); // returns false\n * isServiceReference({ ref: \"Weather.services.openweather\" }); // returns false\n */\nexport function isServiceReference(service: ServiceRef): service is string {\n return typeof service === \"string\";\n}\n\n/**\n * Phase F: Type guard for `ServiceRefObject` (the override-carrying form).\n *\n * @param {ServiceRef} service - Service reference to check\n * @returns {boolean} True if service is a ServiceRefObject\n */\nexport function isServiceReferenceObject(\n service: ServiceRef,\n): service is ServiceRefObject {\n return (\n typeof service === \"object\" &&\n service !== null &&\n \"ref\" in service &&\n !(\"type\" in service)\n );\n}\n\n/**\n * Validate service reference format: \"Alias.services.ServiceName\"\n */\nexport const ServiceRefStringSchema = z\n .string()\n .regex(\n /^[A-Z][a-zA-Z0-9]*\\.services\\.[a-zA-Z][a-zA-Z0-9]*$/,\n 'Service reference must be in format \"Alias.services.ServiceName\" (e.g., \"Weather.services.openweather\")',\n );\n\nexport const ServiceRefObjectSchema = z.object({\n ref: ServiceRefStringSchema,\n description: z.string().optional(),\n baseUrl: z.string().url(\"baseUrl override must be a valid URL\").optional(),\n headers: z.record(z.string()).optional(),\n url: z.string().url(\"url override must be a valid URL\").optional(),\n serverPath: z.string().optional(),\n});\n\nexport const ServiceRefSchema = z.union([\n ServiceDefinitionSchema,\n ServiceRefObjectSchema,\n ServiceRefStringSchema,\n]);\n\n/**\n * Parses a service reference into its components.\n * \n * Extracts the alias and service name from a service reference string\n * in format \"Alias.services.ServiceName\". Returns null if not a valid reference.\n * \n * @param {string} ref - Service reference string\n * @returns {{ alias: string; serviceName: string } | null} Parsed components or null\n * \n * @example\n * parseServiceRef(\"Weather.services.openweather\"); // returns { alias: \"Weather\", serviceName: \"openweather\" }\n * parseServiceRef(\"invalid\"); // returns null\n */\nexport function parseServiceRef(\n ref: string,\n): { alias: string; serviceName: string } | null {\n const match = ref.match(\n /^([A-Z][a-zA-Z0-9]*)\\.services\\.([a-zA-Z][a-zA-Z0-9]*)$/,\n );\n if (!match) return null;\n return { alias: match[1], serviceName: match[2] };\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Checks if a service definition is a REST service.\n * \n * Type guard to determine if a service definition represents a REST API service.\n * Used for service type discrimination and validation.\n * \n * @param {ServiceDefinition} service - Service definition to check\n * @returns {boolean} True if service is a REST service, false otherwise\n * \n * @example\n * isRestService({ name: \"weather\", type: \"rest\", baseUrl: \"...\" }); // returns true\n * isRestService({ name: \"chat\", type: \"socket\" }); // returns false\n */\nexport function isRestService(\n service: ServiceDefinition,\n): service is RestServiceDef {\n return service.type === \"rest\";\n}\n\n/**\n * Checks if a service definition is a Socket service.\n * \n * Type guard to determine if a service definition represents a WebSocket service.\n * Used for service type discrimination and validation.\n * \n * @param {ServiceDefinition} service - Service definition to check\n * @returns {boolean} True if service is a Socket service, false otherwise\n * \n * @example\n * isSocketService({ name: \"chat\", type: \"socket\", url: \"wss://...\" }); // returns true\n * isSocketService({ name: \"weather\", type: \"rest\" }); // returns false\n */\nexport function isSocketService(\n service: ServiceDefinition,\n): service is SocketServiceDef {\n return service.type === \"socket\";\n}\n\n/**\n * Checks if a service definition is an MCP service.\n * \n * Type guard to determine if a service definition represents an MCP\n * (Multiplayer Control Protocol) service. Used for service type discrimination.\n * \n * @param {ServiceDefinition} service - Service definition to check\n * @returns {boolean} True if service is an MCP service, false otherwise\n * \n * @example\n * isMcpService({ name: \"game\", type: \"mcp\", serverUrl: \"...\" }); // returns true\n * isMcpService({ name: \"chat\", type: \"socket\" }); // returns false\n */\nexport function isMcpService(\n service: ServiceDefinition,\n): service is McpServiceDef {\n return service.type === \"mcp\";\n}\n\n/**\n * Get all service names from a list of services.\n */\nexport function getServiceNames(services: ServiceDefinition[]): string[] {\n return services.map((s) => s.name);\n}\n\n/**\n * Find a service by name.\n */\nexport function findService(\n services: ServiceDefinition[],\n name: string,\n): ServiceDefinition | undefined {\n return services.find((s) => s.name.toLowerCase() === name.toLowerCase());\n}\n\n/**\n * Check if a service name exists (case-insensitive).\n */\nexport function hasService(\n services: ServiceDefinition[],\n name: string,\n): boolean {\n return services.some((s) => s.name.toLowerCase() === name.toLowerCase());\n}\n\n/**\n * Allowed leaf value for `ServiceParams`. Mirrors `EventPayloadValue`'s\n * recursive-array shape so integration call signatures can express the\n * nested structures real services need (port mappings, volume mounts,\n * pagination cursors), and so a value satisfying `EventPayloadValue`\n * also satisfies `ServiceParamsValue` without a cast — the same data\n * flows through `call-service` and `emit` without boundary widening.\n */\nexport type ServiceParamsValue =\n | string\n | number\n | boolean\n | Date\n | null\n | undefined\n | ServiceParams\n | readonly ServiceParamsValue[];\n\n/** Parameters passed to call-service effects. Recursive for nested request shapes. */\nexport type ServiceParams = {\n [key: string]: ServiceParamsValue;\n};\n","/**\n * Orbital Type (Self-Contained)\n *\n * Defines the Orbital - the atomic building block of applications.\n * Formula: Orbital = Entity × Traits × Pages\n *\n * An Orbital is a module that exports { entity, traits, pages }.\n * Use `uses` to import other Orbitals and access their components via:\n * - Alias.entity\n * - Alias.traits.TraitName\n * - Alias.pages.PageName\n *\n * @packageDocumentation\n */\n\nimport { z } from \"zod\";\nimport type { OrbitalId, EntityId, TraitId, PageId } from \"./identity.js\";\nimport { OrbitalIdSchema, EntityIdSchema, TraitIdSchema, PageIdSchema } from \"./identity.js\";\nimport type { Entity, EntityPersistence } from \"./entity.js\";\nimport { EntitySchema, EntityPersistenceSchema } from \"./entity.js\";\nimport type { EntityField } from \"./field.js\";\nimport { EntityFieldSchema } from \"./field.js\";\nimport type { Page } from \"./page.js\";\nimport { PageSchema } from \"./page.js\";\nimport type {\n TraitRef,\n EventPayloadField,\n EventScope,\n Trait,\n} from \"./trait.js\";\nimport {\n TraitRefSchema,\n EventPayloadFieldSchema,\n EventScopeSchema,\n TraitSchema,\n} from \"./trait.js\";\nimport type {\n DomainContext,\n DesignPreferences,\n SuggestedGuard,\n ThemeRef,\n} from \"./domain.js\";\nimport {\n DomainContextSchema,\n DesignPreferencesSchema,\n SuggestedGuardSchema,\n ThemeRefSchema,\n} from \"./domain.js\";\nimport type { ServiceRef } from \"./service.js\";\nimport { ServiceRefSchema } from \"./service.js\";\nimport type { Expression, SExpr } from \"./expression.js\";\nimport { ExpressionSchema, SExprSchema } from \"./expression.js\";\n\n// ============================================================================\n// Use Declaration (Import System)\n// ============================================================================\n\n/**\n * UseDeclaration - Import an external Orbital as a namespace.\n *\n * After importing, access components via:\n * - Alias.entity - The entity definition\n * - Alias.traits.TraitName - A specific trait\n * - Alias.pages.PageName - A specific page\n *\n * @example\n * ```json\n * {\n * \"uses\": [\n * { \"from\": \"./health.orb\", \"as\": \"Health\" },\n * { \"from\": \"std/behaviors/game-core\", \"as\": \"GameCore\" }\n * ]\n * }\n * ```\n */\nexport type UseDeclaration = {\n /**\n * Import source path:\n * - \"std/behaviors/game-core\" - Standard library\n * - \"./shared/health.orb\" - Local .orb file (relative path)\n * - \"../common/physics.orb\" - Parent directory .orb file\n * - \"@game-lib/enemies.orb\" - Scoped package (configured base)\n */\n from: string;\n\n /**\n * Alias for accessing imported components.\n * Used as namespace: Alias.entity, Alias.traits.X, Alias.pages.X\n */\n as: string;\n};\n\nexport const UseDeclarationSchema = z.object({\n from: z.string().min(1, \"Import source is required\"),\n as: z\n .string()\n .min(1, \"Alias is required\")\n .regex(\n /^[A-Z][a-zA-Z0-9]*$/,\n 'Alias must be PascalCase (e.g., \"Health\", \"GameCore\")',\n ),\n});\n\n// ============================================================================\n// Entity Reference (Inline OR Reference)\n// ============================================================================\n\n/**\n * EntityCall - Reference to an imported entity with optional override arguments.\n *\n * Treats the imported entity as a callable function: the atom's declared\n * fields are defaults and the caller can append extra fields, rename, or\n * override persistence/collection. The discriminator key is `extends` to\n * stay consistent with the Phase A.5 Rust schema (`EntityRef::Extends`).\n *\n * @example\n * ```json\n * // Inherit ModalRecord's fields, rename to CartItem, add pendingId\n * {\n * \"extends\": \"Modal.entity\",\n * \"name\": \"CartItem\",\n * \"fields\": [{ \"name\": \"pendingId\", \"type\": \"string\" }]\n * }\n * ```\n */\nexport type EntityCall = {\n /** Reference to the imported entity using the \"extends\" discriminator key */\n extends: string;\n /** V4 dual-carry id sibling of `extends` — optional until the Phase-7 flip. */\n extendsId?: EntityId;\n /** Optional rename for the resulting entity */\n name?: string;\n /** Additional fields appended to the inherited set (caller wins on name collision) */\n fields?: EntityField[];\n /** Optional persistence override */\n persistence?: EntityPersistence;\n /** Optional collection override */\n collection?: string;\n};\n\n/**\n * EntityRef - Entity can be inline definition OR reference to imported entity.\n *\n * Reference formats:\n * - Simple string: \"Alias.entity\"\n * - Call form (with overrides): { extends: \"Alias.entity\", name?, fields?, persistence?, collection? }\n *\n * @example\n * ```json\n * // Inline\n * { \"entity\": { \"name\": \"Player\", \"fields\": [...] } }\n *\n * // Simple reference\n * { \"entity\": \"Goblin.entity\" }\n *\n * // Call form with overrides (Phase F)\n * { \"entity\": { \"extends\": \"Modal.entity\", \"name\": \"CartItem\", \"fields\": [...] } }\n * ```\n */\nexport type EntityRef = Entity | string | EntityCall;\n\n/**\n * Checks if an entity reference is a string reference.\n *\n * Type guard to determine if an EntityRef is a string reference\n * (format: \"Alias.entity\") rather than an inline entity definition or\n * an EntityCall object.\n *\n * Note: This guard intentionally narrows to `string` only. To check for\n * any non-inline form (string OR EntityCall), use `isEntityReferenceAny`.\n *\n * @param {EntityRef} entity - Entity reference to check\n * @returns {boolean} True if entity is a string reference, false otherwise\n *\n * @example\n * const ref1 = \"User.entity\"; // string reference\n * const ref2 = { name: \"User\", fields: [...] }; // inline definition\n * const ref3 = { extends: \"User.entity\" }; // EntityCall\n *\n * isEntityReference(ref1); // returns true\n * isEntityReference(ref2); // returns false\n * isEntityReference(ref3); // returns false\n */\nexport function isEntityReference(entity: EntityRef): entity is string {\n return typeof entity === \"string\";\n}\n\n/**\n * Checks if an entity reference is an EntityCall (extends form).\n *\n * Type guard for the call-form EntityRef introduced in Phase F. EntityCall\n * is identified by the presence of the \"extends\" discriminator key.\n *\n * @param {EntityRef} entity - Entity reference to check\n * @returns {boolean} True if entity is an EntityCall object\n *\n * @example\n * isEntityCall({ extends: \"Modal.entity\", name: \"CartItem\" }); // returns true\n * isEntityCall(\"Modal.entity\"); // returns false\n * isEntityCall({ name: \"Modal\", fields: [] }); // returns false\n */\nexport function isEntityCall(entity: EntityRef): entity is EntityCall {\n return typeof entity === \"object\" && entity !== null && \"extends\" in entity;\n}\n\n/**\n * Checks if an entity reference is any non-inline form (string or EntityCall).\n *\n * Broader companion to `isEntityReference` that recognizes both the bare\n * string reference and the Phase F EntityCall form.\n *\n * @param {EntityRef} entity - Entity reference to check\n * @returns {boolean} True if entity is a string reference or EntityCall\n */\nexport function isEntityReferenceAny(\n entity: EntityRef,\n): entity is string | EntityCall {\n return isEntityReference(entity) || isEntityCall(entity);\n}\n\n/**\n * Validate entity reference format: \"Alias.entity\"\n */\nexport const EntityRefStringSchema = z\n .string()\n .regex(\n /^[A-Z][a-zA-Z0-9]*\\.entity$/,\n 'Entity reference must be in format \"Alias.entity\" (e.g., \"Goblin.entity\")',\n );\n\n/**\n * Validate EntityCall (extends form) shape.\n *\n * Phase F.4 refines:\n * - The `fields` override array must not contain duplicate field names\n * (case-sensitive). Duplicates would silently shadow each other during\n * the inliner's field-merge step, so reject at the schema boundary.\n */\nexport const EntityCallSchema = z\n .object({\n extends: z\n .string()\n .regex(\n /^[A-Z][a-zA-Z0-9]*\\.entity$/,\n 'EntityCall \"extends\" must be in format \"Alias.entity\"',\n ),\n name: z.string().optional(),\n fields: z.array(EntityFieldSchema).optional(),\n persistence: EntityPersistenceSchema.optional(),\n collection: z.string().optional(),\n })\n .refine(\n (call) => {\n if (!call.fields) return true;\n const seen = new Set<string>();\n for (const field of call.fields) {\n if (field.name === undefined) continue;\n if (seen.has(field.name)) return false;\n seen.add(field.name);\n }\n return true;\n },\n {\n message:\n 'EntityCall \"fields\" override list must not contain duplicate field names',\n path: [\"fields\"],\n },\n );\n\nexport const EntityRefSchema = z.union([\n EntitySchema,\n EntityRefStringSchema,\n EntityCallSchema,\n]);\n\n// ============================================================================\n// Page Reference (Inline OR Reference)\n// ============================================================================\n\n/**\n * PageRefObject - Reference to imported page with optional override arguments.\n *\n * Phase F adds `linkedEntity` and `traits` arguments so a caller can rebind\n * the imported page's entity and trait set, treating the page as a callable\n * function.\n */\nexport type PageRefObject = {\n /**\n * Reference to imported page: \"Alias.pages.PageName\"\n */\n ref: string;\n\n /** V4 dual-carry id sibling of `ref` — optional until the Phase-7 flip. */\n refId?: PageId;\n\n /**\n * Phase 1.2: optional registry path disambiguator. Pairs with `ref` to\n * explicitly name which `uses` entry the alias was imported from\n * (e.g. \"std/behaviors/atoms/std-browse\"). Helpful for programmatic\n * descriptor construction and inline-phase disambiguation when multiple\n * registries expose the same alias prefix.\n */\n from?: string;\n\n /**\n * Optional path override.\n * If provided, overrides the original page's path.\n */\n path?: string;\n\n /**\n * Phase F: rebind the page's entity to the caller's entity.\n * Identifier-substitution pass rewrites references to the original\n * entity inside the imported page.\n */\n linkedEntity?: string;\n\n /** V4 dual-carry id sibling of `linkedEntity` — optional until the Phase-7 flip. */\n linkedEntityId?: EntityId;\n\n /**\n * Phase F: override the page's trait set with the caller-supplied list.\n * Each entry may be a string trait reference or an inline trait reference object.\n */\n traits?: TraitRef[];\n\n /** V4 dual-carry id sibling of `traits` — optional until the Phase-7 flip. */\n traitRefIds?: TraitId[];\n};\n\n/**\n * PageRef - Page can be inline definition OR reference to imported page.\n *\n * Reference formats:\n * - \"Alias.pages.PageName\" - Simple reference (keeps original path)\n * - { ref: \"Alias.pages.PageName\", path: \"/custom\" } - Reference with path override\n *\n * @example\n * ```json\n * // Inline\n * { \"name\": \"Dashboard\", \"path\": \"/\", ... }\n *\n * // Simple reference\n * \"User.pages.Profile\"\n *\n * // Reference with path override\n * { \"ref\": \"User.pages.Profile\", \"path\": \"/my-profile\" }\n * ```\n */\nexport type PageRef = Page | string | PageRefObject;\n\n/**\n * Checks if a page reference is a string reference.\n * \n * Type guard to determine if a PageRef is a simple string reference\n * (format: \"Alias.pages.PageName\") rather than an inline page definition or object reference.\n * \n * @param {PageRef} page - Page reference to check\n * @returns {boolean} True if page is a string reference, false otherwise\n * \n * @example\n * const ref1 = \"User.pages.Profile\"; // string reference\n * const ref2 = { name: \"Dashboard\", path: \"/\" }; // inline definition\n * \n * isPageReferenceString(ref1); // returns true\n * isPageReferenceString(ref2); // returns false\n */\nexport function isPageReferenceString(page: PageRef): page is string {\n return typeof page === \"string\";\n}\n\n/**\n * Checks if a page reference is a reference object.\n * \n * Type guard to determine if a PageRef is an object reference\n * with a 'ref' property rather than an inline page definition.\n * \n * @param {PageRef} page - Page reference to check\n * @returns {boolean} True if page is a reference object, false otherwise\n * \n * @example\n * const ref1 = { ref: \"User.pages.Profile\", path: \"/custom\" }; // reference object\n * const ref2 = { name: \"Dashboard\", path: \"/\" }; // inline definition\n * \n * isPageReferenceObject(ref1); // returns true\n * isPageReferenceObject(ref2); // returns false\n */\nexport function isPageReferenceObject(page: PageRef): page is PageRefObject {\n return typeof page === \"object\" && \"ref\" in page && !(\"name\" in page);\n}\n\n/**\n * Checks if a page reference is any type of reference.\n * \n * Type guard to determine if a PageRef is a reference (string or object)\n * rather than an inline page definition.\n * \n * @param {PageRef} page - Page reference to check\n * @returns {boolean} True if page is a reference, false if inline definition\n * \n * @example\n * const ref1 = \"User.pages.Profile\"; // string reference\n * const ref2 = { ref: \"User.pages.Profile\", path: \"/custom\" }; // object reference\n * const ref3 = { name: \"Dashboard\", path: \"/\" }; // inline definition\n * \n * isPageReference(ref1); // returns true\n * isPageReference(ref2); // returns true\n * isPageReference(ref3); // returns false\n */\nexport function isPageReference(page: PageRef): page is string | PageRefObject {\n return isPageReferenceString(page) || isPageReferenceObject(page);\n}\n\n/**\n * Validate page reference format: \"Alias.pages.PageName\"\n */\nexport const PageRefStringSchema = z\n .string()\n .regex(\n /^[A-Z][a-zA-Z0-9]*\\.pages\\.[A-Z][a-zA-Z0-9]*$/,\n 'Page reference must be in format \"Alias.pages.PageName\" (e.g., \"User.pages.Profile\")',\n );\n\nexport const PageRefObjectSchema = z.object({\n ref: PageRefStringSchema,\n refId: PageIdSchema.optional(),\n // Phase 1.2: optional registry path disambiguator, pairs with `ref`.\n from: z.string().optional(),\n path: z.string().startsWith(\"/\").optional(),\n linkedEntity: z.string().optional(),\n linkedEntityId: EntityIdSchema.optional(),\n traits: z.array(TraitRefSchema).optional(),\n traitRefIds: z.array(TraitIdSchema).optional(),\n});\n\nexport const PageRefSchema = z.union([\n PageSchema,\n PageRefStringSchema,\n PageRefObjectSchema,\n]);\n\n// ============================================================================\n// Trait Reference Extensions\n// ============================================================================\n\n/**\n * Extended trait reference format for imported traits.\n *\n * Formats:\n * - \"TraitName\" - Local trait (inline or from uses without alias)\n * - \"Alias.traits.TraitName\" - Imported trait with namespace\n *\n * The existing TraitRef type already supports these via string.\n */\n\n/**\n * Validate trait reference format for imported traits.\n */\nexport const ImportedTraitRefStringSchema = z\n .string()\n .regex(\n /^([A-Z][a-zA-Z0-9]*\\.traits\\.)?[A-Z][a-zA-Z0-9]*$/,\n 'Trait reference must be \"TraitName\" or \"Alias.traits.TraitName\"',\n );\n\n/**\n * Checks if a trait reference is an imported reference.\n * \n * Determines if a trait reference uses the imported format\n * \"Alias.traits.TraitName\" rather than a simple \"TraitName\".\n * \n * @param {string} ref - Trait reference to check\n * @returns {boolean} True if reference is imported format, false otherwise\n * \n * @example\n * isImportedTraitRef(\"User.traits.Profile\"); // returns true\n * isImportedTraitRef(\"Profile\"); // returns false\n */\nexport function isImportedTraitRef(ref: string): boolean {\n return /^[A-Z][a-zA-Z0-9]*\\.traits\\.[A-Z][a-zA-Z0-9]*$/.test(ref);\n}\n\n/**\n * Parses an imported trait reference.\n * \n * Extracts the alias and trait name from an imported trait reference\n * in format \"Alias.traits.TraitName\". Returns null if not a valid imported reference.\n * \n * @param {string} ref - Trait reference to parse\n * @returns {{ alias: string; traitName: string } | null} Parsed reference or null\n * \n * @example\n * parseImportedTraitRef(\"User.traits.Profile\"); // returns { alias: \"User\", traitName: \"Profile\" }\n * parseImportedTraitRef(\"Profile\"); // returns null\n */\nexport function parseImportedTraitRef(\n ref: string,\n): { alias: string; traitName: string } | null {\n const match = ref.match(/^([A-Z][a-zA-Z0-9]*)\\.traits\\.([A-Z][a-zA-Z0-9]*)$/);\n if (!match) return null;\n return { alias: match[1], traitName: match[2] };\n}\n\n/**\n * Parses an entity reference.\n * \n * Extracts the alias from an entity reference in format \"Alias.entity\".\n * Returns null if not a valid entity reference.\n * \n * @param {string} ref - Entity reference to parse\n * @returns {{ alias: string } | null} Parsed reference or null\n * \n * @example\n * parseEntityRef(\"User.entity\"); // returns { alias: \"User\" }\n * parseEntityRef(\"User\"); // returns null\n */\nexport function parseEntityRef(ref: string): { alias: string } | null {\n const match = ref.match(/^([A-Z][a-zA-Z0-9]*)\\.entity$/);\n if (!match) return null;\n return { alias: match[1] };\n}\n\n/**\n * Parses a page reference.\n * \n * Extracts the alias and page name from a page reference\n * in format \"Alias.pages.PageName\". Returns null if not a valid page reference.\n * \n * @param {string} ref - Page reference to parse\n * @returns {{ alias: string; pageName: string } | null} Parsed reference or null\n * \n * @example\n * parsePageRef(\"User.pages.Profile\"); // returns { alias: \"User\", pageName: \"Profile\" }\n * parsePageRef(\"Profile\"); // returns null\n */\nexport function parsePageRef(\n ref: string,\n): { alias: string; pageName: string } | null {\n const match = ref.match(/^([A-Z][a-zA-Z0-9]*)\\.pages\\.([A-Z][a-zA-Z0-9]*)$/);\n if (!match) return null;\n return { alias: match[1], pageName: match[2] };\n}\n\n// ============================================================================\n// Event Listener (Legacy)\n// ============================================================================\n\n/**\n * Event listener for cross-orbital communication (legacy format).\n * @deprecated Use trait-level listens with scope instead.\n */\nexport interface EventListener {\n /** Event key to listen for */\n event: string;\n /** Action to trigger */\n triggers: string;\n /** Optional guard condition */\n guard?: string;\n}\n\nexport const EventListenerSchema = z.object({\n event: z.string().min(1),\n triggers: z.string().min(1),\n guard: z.string().optional(),\n});\n\n// ============================================================================\n// Computed Event Contract (Trait-Centric Model)\n// ============================================================================\n\n/**\n * Source of an event - which trait/transition/tick emits it.\n */\nexport type EventSource = {\n /** Trait that emits this event */\n trait: string;\n /** Transition that emits this event (if applicable) */\n transition?: string;\n /** Tick that emits this event (if applicable) */\n tick?: string;\n};\n\nexport const EventSourceSchema = z.object({\n trait: z.string().min(1),\n transition: z.string().optional(),\n tick: z.string().optional(),\n});\n\n/**\n * Computed event contract with source tracking.\n * Generated by aggregating trait-level emits with namespacing.\n */\nexport type ComputedEventContract = {\n /** Namespaced event: \"TraitName.EVENT_NAME\" */\n event: string;\n /** Original event name without namespace */\n originalEvent: string;\n /** Source trait that emits this event */\n source: EventSource;\n /** Human-readable description */\n description?: string;\n /** Payload schema */\n payload?: EventPayloadField[];\n};\n\nexport const ComputedEventContractSchema = z.object({\n event: z.string().min(1),\n originalEvent: z.string().min(1),\n source: EventSourceSchema,\n description: z.string().optional(),\n payload: z.array(EventPayloadFieldSchema).optional(),\n});\n\n/**\n * Computed event listener with source tracking.\n * Generated by aggregating trait-level listens.\n */\nexport type ComputedEventListener = {\n /** Event to listen for (may be namespaced) */\n event: string;\n /** Source trait that defines this listener */\n source: EventSource;\n /** State machine event to trigger */\n triggers: string;\n /** Guard expression */\n guard?: Expression;\n /** `with { ... }` payload rewrite: `{ targetField: SExpr }`, evaluated against the source payload. */\n payloadMapping?: Record<string, SExpr>;\n};\n\nexport const ComputedEventListenerSchema = z.object({\n event: z.string().min(1),\n source: EventSourceSchema,\n triggers: z.string().min(1),\n guard: ExpressionSchema.optional(),\n payloadMapping: z.record(SExprSchema).optional(),\n});\n\n// ============================================================================\n// Orbital\n// ============================================================================\n\n/**\n * Orbital - The atomic building block of applications.\n *\n * Formula: Orbital = Entity × Traits × Pages\n *\n * An orbital is a self-contained feature unit that groups:\n * - One entity (the data nucleus) - inline OR referenced via \"Alias.entity\"\n * - Zero or more traits (behavioral patterns) - inline OR referenced via \"Alias.traits.X\"\n * - Zero or more pages (UI entry points) - inline OR referenced via \"Alias.pages.X\"\n *\n * Use `uses` to import other orbitals and access their components.\n */\nexport type Orbital = OrbitalDefinition;\n\nexport type OrbitalDefinition = {\n /** V4 dual-carry id sibling of `name` — optional until the Phase-7 flip. */\n id?: OrbitalId;\n\n /** Human-readable name */\n name: string;\n\n /** Optional description */\n description?: string;\n\n /** Visual prompt override */\n visual_prompt?: string;\n\n // ========================================================================\n // Import System (Unified Reference)\n // ========================================================================\n\n /**\n * Import external orbitals as namespaces.\n *\n * After importing, access components via:\n * - Alias.entity - The entity definition\n * - Alias.traits.TraitName - A specific trait\n * - Alias.pages.PageName - A specific page\n * - Alias.theme - The theme definition\n * - Alias.services.ServiceName - A specific service\n *\n * @example\n * ```json\n * \"uses\": [\n * { \"from\": \"./health.orb\", \"as\": \"Health\" },\n * { \"from\": \"std/behaviors/game-core\", \"as\": \"GameCore\" }\n * ]\n * ```\n */\n uses?: UseDeclaration[];\n\n // ========================================================================\n // Theme & Services\n // ========================================================================\n\n /**\n * Theme definition (inline OR reference via \"Alias.theme\").\n *\n * @example\n * ```json\n * // Inline\n * \"theme\": { \"name\": \"ocean\", \"tokens\": { \"colors\": { \"primary\": \"#0ea5e9\" } } }\n *\n * // Reference\n * \"theme\": \"Ocean.theme\"\n * ```\n */\n theme?: ThemeRef;\n\n /**\n * Service definitions (inline OR reference via \"Alias.services.ServiceName\").\n *\n * @example\n * ```json\n * // Inline\n * \"services\": [{ \"name\": \"weather\", \"type\": \"rest\", \"baseUrl\": \"...\" }]\n *\n * // Reference\n * \"services\": [\"Weather.services.openweather\"]\n * ```\n */\n services?: ServiceRef[];\n\n // ========================================================================\n // Components (Inline OR Reference)\n // ========================================================================\n\n /**\n * Entity definition (nucleus).\n *\n * Can be:\n * - Inline: Full entity definition\n * - Reference: \"Alias.entity\" (from uses)\n *\n * Entity sharing depends on persistence type:\n * - persistent: Shared (same DB collection)\n * - runtime: Isolated (each orbital gets own instances)\n */\n entity: EntityRef;\n\n /**\n * Imported atom entities surfaced into this orbital's resolution\n * scope WITHOUT modifying the primary `entity`. Populated by the\n * compiler's inline phase when a trait reference imports an atom\n * and OMITS the `-> Entity` linkedEntity rebind: the atom keeps its\n * own entity (e.g. `SearchResult` from std-search), and that entity\n * is registered here so validators / codegen / runtime can resolve\n * `linkedEntity = \"SearchResult\"` lookups, register persistence for\n * it, and emit its TypeScript type alongside the primary entity.\n * The orbital's per-trait entity arity stays 1:1 — this is purely a\n * NAME-RESOLUTION side channel for cross-import linkedEntity\n * references.\n */\n auxiliaryEntities?: EntityRef[];\n\n /** Trait references (local or imported via \"Alias.traits.TraitName\") */\n traits: TraitRef[];\n\n /**\n * Page definitions.\n *\n * Can be:\n * - Inline: Full page definition\n * - Reference string: \"Alias.pages.PageName\"\n * - Reference object: { ref: \"Alias.pages.PageName\", path: \"/custom\" }\n */\n pages: PageRef[];\n\n // ========================================================================\n // Event Interface (Trait-Centric Model)\n // ========================================================================\n\n /**\n * Events this orbital emits.\n *\n * COMPUTED from trait-level emits:\n * - Aggregated from all traits with `scope: 'external'`\n * - Namespaced as \"TraitName.EVENT_NAME\"\n * - Filtered by `exposes` if present\n *\n * Do not author directly - computed by resolver.\n */\n emits?: ComputedEventContract[];\n\n /**\n * Events this orbital listens for.\n *\n * COMPUTED from trait-level listens:\n * - Aggregated from all traits with `scope: 'external'`\n *\n * Do not author directly - computed by resolver.\n */\n listens?: ComputedEventListener[];\n\n /**\n * Filter which trait events are exposed externally.\n * If omitted, all external-scoped trait events are exposed.\n * Format: [\"TraitName.EVENT_NAME\", ...]\n */\n exposes?: string[];\n\n // ========================================================================\n // Context fields - persisted throughout orbital lifecycle\n // ========================================================================\n\n /** Domain context - category, vocabulary, personas */\n domainContext?: DomainContext;\n\n /** Design preferences - style, colors, UX hints */\n design?: DesignPreferences;\n\n /**\n * Suggested guards (decomposition phase only).\n * Natural language descriptions that generator converts to S-expressions.\n * Removed after generation - guards live in traits.\n */\n suggestedGuards?: SuggestedGuard[];\n};\n\nexport const OrbitalDefinitionSchema = z.object({\n id: OrbitalIdSchema.optional(),\n name: z.string().min(1, \"Orbital name is required\"),\n description: z.string().optional(),\n visual_prompt: z.string().optional(),\n // Import system\n uses: z.array(UseDeclarationSchema).optional(),\n // Theme & Services\n theme: ThemeRefSchema.optional(),\n services: z.array(ServiceRefSchema).optional(),\n // Components (inline or reference)\n entity: EntityRefSchema,\n traits: z.array(TraitRefSchema),\n pages: z.array(PageRefSchema),\n // Event interface (trait-centric model) - computed by resolver\n emits: z.array(ComputedEventContractSchema).optional(),\n listens: z.array(ComputedEventListenerSchema).optional(),\n // Filter for exposed events (trait-centric model)\n exposes: z.array(z.string()).optional(),\n // Context fields - persisted throughout orbital lifecycle\n domainContext: DomainContextSchema.optional(),\n design: DesignPreferencesSchema.optional(),\n suggestedGuards: z.array(SuggestedGuardSchema).optional(),\n});\n\nexport const OrbitalSchema = OrbitalDefinitionSchema;\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\n/**\n * Type guard to check if an Orbital is a full definition.\n * @deprecated No longer needed since Orbital is always OrbitalDefinition now.\n */\nexport function isOrbitalDefinition(\n orbital: Orbital,\n): orbital is OrbitalDefinition {\n return \"entity\" in orbital;\n}\n\n// ============================================================================\n// Type exports\n// ============================================================================\n\nexport type OrbitalInput = z.input<typeof OrbitalSchema>;\n\n// Backward compatibility\nexport type OrbitalUnit = Orbital;\nexport const OrbitalUnitSchema = OrbitalSchema;\n","/**\n * Orbital Schema Type (Self-Contained)\n *\n * Defines the OrbitalSchema - the top-level application definition.\n * An application is a composition of orbitals: App = Σ(Orbitals)\n *\n * @packageDocumentation\n */\n\nimport { z } from \"zod\";\nimport type { Orbital } from \"./orbital.js\";\nimport { OrbitalSchema as OrbitalZodSchema } from \"./orbital.js\";\nimport type {\n DomainContext,\n DesignPreferences,\n DesignTokens,\n CustomPatternMap,\n} from \"./domain.js\";\nimport {\n DomainContextSchema,\n DesignPreferencesSchema,\n DesignTokensSchema,\n CustomPatternMapSchema,\n} from \"./domain.js\";\nimport type { ServiceDefinition } from \"./service.js\";\nimport { ServiceDefinitionSchema } from \"./service.js\";\nimport type { Trait } from \"./trait.js\";\nimport type { IdentityLedger } from \"./identity.js\";\nimport { IdentityLedgerSchema } from \"./identity.js\";\nimport type { RuntimeValue } from \"./json.js\";\n\n// ============================================================================\n// Orbital Config\n// ============================================================================\n\n/**\n * Global configuration for the application\n */\nexport interface OrbitalConfig {\n /** Theme configuration */\n theme?: {\n primary?: string;\n secondary?: string;\n mode?: \"light\" | \"dark\" | \"system\";\n };\n /** Feature flags */\n features?: Record<string, boolean>;\n /** API configuration */\n api?: {\n baseUrl?: string;\n timeout?: number;\n };\n}\n\nexport const OrbitalConfigSchema = z.object({\n theme: z\n .object({\n primary: z.string().optional(),\n secondary: z.string().optional(),\n mode: z.enum([\"light\", \"dark\", \"system\"]).optional(),\n })\n .optional(),\n features: z.record(z.boolean()).optional(),\n api: z\n .object({\n baseUrl: z.string().optional(),\n timeout: z.number().optional(),\n })\n .optional(),\n});\n\n// ============================================================================\n// Orbital Schema\n// ============================================================================\n\n/**\n * OrbitalSchema - The top-level application definition.\n *\n * An application is a composition of orbitals:\n * App = Σ(Orbitals)\n *\n * Custom traits can be defined at the schema level and referenced\n * by orbitals via TraitRef. This allows LLMs to generate custom\n * traits that aren't in the trait library.\n */\n/**\n * One `@config.<knob>` → render-ui prop substitution recorded by the inline\n * phase. Lets a consumer trace a resolved render-ui literal back to the config\n * knob it came from (the `@config.X` string is erased after substitution).\n * Mirrors the Rust `ConfigProvenanceRecord`.\n */\nexport interface ConfigProvenanceRecord {\n /** Resolved trait name (post call-site rename) owning the render-ui effect. */\n trait: string;\n /** Pattern path within the render-ui tree (e.g. `root.children.0`). */\n patternPath?: string;\n /** The pattern-node prop key whose value was a `@config.X` binding. */\n prop: string;\n /** The config knob name (`X` in `@config.X`). */\n knob: string;\n}\n\n/** Compiler-emitted schema metadata — the resolved `.orb` `_metadata` block. */\nexport interface SchemaMetadata {\n version?: number;\n createdAt?: number;\n source?: string;\n updatedAt?: number;\n /** Config→knob provenance keyed by orbital name. See {@link ConfigProvenanceRecord}. */\n configProvenance?: Record<string, ConfigProvenanceRecord[]>;\n}\n\nexport interface OrbitalSchema {\n /** Application name */\n name: string;\n\n /** Description */\n description?: string;\n\n /**\n * Short human-readable summary distinct from `description`. Typically an\n * AI-generated one-liner used by app list views, breadcrumbs, and the\n * `GET /graphs/:appId/domain-text` projection. Kept separate from\n * `description` (which may be longer / authored copy) so consumers can\n * present a stable short label without truncating.\n */\n summary?: string;\n\n /** Version (semver) */\n version?: string;\n\n /** Domain context - user request + classification */\n domainContext?: DomainContext;\n\n /** Design preferences */\n design?: DesignPreferences;\n\n /**\n * Design tokens - reusable Tailwind class collections.\n * Reference via `token: \"surfaces.glass\"` in patterns.\n */\n designTokens?: DesignTokens;\n\n /**\n * Custom pattern definitions for app-specific reusable patterns.\n * Register custom designs that can be referenced by name.\n */\n customPatterns?: CustomPatternMap;\n\n /** Array of orbitals */\n orbitals: Orbital[];\n\n /** External services */\n services?: ServiceDefinition[];\n\n /** Global config */\n config?: OrbitalConfig;\n\n /** Compiler-emitted metadata (resolved `.orb` `_metadata`). */\n _metadata?: SchemaMetadata;\n\n /**\n * V4 IR schema version. Distinct from the semver `version` above; gates the\n * identity-keyed reference semantics. Optional/unset for pre-V4 schemas.\n */\n schemaVersion?: number;\n\n /**\n * V4 identity ledger — the sole name↔id map for this schema's nodes. Optional\n * until the Phase-7 flip; absent on pre-V4 schemas.\n */\n ledger?: IdentityLedger;\n}\n\nexport const ConfigProvenanceRecordSchema = z.object({\n trait: z.string(),\n patternPath: z.string().optional(),\n prop: z.string(),\n knob: z.string(),\n});\n\nexport const SchemaMetadataSchema = z.object({\n version: z.number().optional(),\n createdAt: z.number().optional(),\n source: z.string().optional(),\n updatedAt: z.number().optional(),\n configProvenance: z.record(z.array(ConfigProvenanceRecordSchema)).optional(),\n});\n\nexport const OrbitalSchemaSchema = z.object({\n name: z.string().min(1, \"Schema name is required\"),\n description: z.string().optional(),\n summary: z.string().optional(),\n version: z.string().optional(),\n domainContext: DomainContextSchema.optional(),\n design: DesignPreferencesSchema.optional(),\n designTokens: DesignTokensSchema,\n customPatterns: CustomPatternMapSchema,\n orbitals: z\n .array(OrbitalZodSchema)\n .min(1, \"At least one orbital is required\"),\n services: z.array(ServiceDefinitionSchema).optional(),\n config: OrbitalConfigSchema.optional(),\n _metadata: SchemaMetadataSchema.optional(),\n // V4 identity — optional/dual-carry until the Phase-7 flip. Present on\n // id-carrying `.orb` files so `parseOrbitalSchema` preserves them instead\n // of stripping unknown keys.\n schemaVersion: z.number().optional(),\n ledger: IdentityLedgerSchema.optional(),\n});\n\n// ============================================================================\n// Persisted/Flattened View\n// ============================================================================\n\n/**\n * Flattened `OrbitalSchema` view used by the persistence/runtime layer.\n *\n * Canonical `OrbitalSchema` keeps every trait inside its owning\n * `OrbitalDefinition.traits`. Some runtime paths (e.g. the orbital-agent\n * stream, Firestore persistence) additionally roll the resolved trait set up\n * to the top level as `traits[]` so diffs and list views don't have to walk\n * every orbital.\n *\n * This is intentionally a LOSSY persisted view, NOT the canonical authoring\n * shape: it carries the rolled-up array alongside the per-orbital trait\n * lists, and consumers should prefer `OrbitalSchema` whenever the rolled-up\n * surface isn't required.\n */\nexport interface OrbitalSchemaWithTraits extends OrbitalSchema {\n /** Flattened trait set rolled up from all orbitals. Persisted-view only. */\n traits?: Trait[];\n}\n\n// ============================================================================\n// Parsing Functions\n// ============================================================================\n\n/**\n * Parses raw data into a validated OrbitalSchema.\n * \n * Uses Zod validation to ensure the data conforms to the OrbitalSchema structure.\n * Throws a ZodError if validation fails. For safe parsing that doesn't throw,\n * use `safeParseOrbitalSchema()` instead.\n * \n * @param {unknown} data - Raw data to parse (typically JSON)\n * @returns {OrbitalSchema} Validated orbital schema\n * @throws {z.ZodError} If data doesn't match OrbitalSchema structure\n * \n * @example\n * ```typescript\n * try {\n * const schema = parseOrbitalSchema(jsonData);\n * console.log('Valid schema:', schema.name);\n * } catch (error) {\n * console.error('Invalid schema:', error);\n * }\n * ```\n * \n * @see safeParseOrbitalSchema\n */\nexport function parseOrbitalSchema(data: RuntimeValue): OrbitalSchema {\n return OrbitalSchemaSchema.parse(data) as OrbitalSchema;\n}\n\n/**\n * Safely parses raw data into a validated OrbitalSchema without throwing.\n * \n * Uses Zod's safeParse method to validate data and return a result object\n * instead of throwing errors. This is useful for form validation and\n * user input handling where you want to gracefully handle invalid data.\n * \n * @param {unknown} data - Raw data to parse (typically JSON)\n * @returns {z.SafeParseReturnType<OrbitalSchema, OrbitalSchema>} Parse result with success/status\n * \n * @example\n * ```typescript\n * const result = safeParseOrbitalSchema(jsonData);\n * if (result.success) {\n * console.log('Valid schema:', result.data.name);\n * } else {\n * console.error('Validation errors:', result.error);\n * }\n * ```\n * \n * @see parseOrbitalSchema\n */\nexport function safeParseOrbitalSchema(data: RuntimeValue) {\n return OrbitalSchemaSchema.safeParse(data);\n}\n\n// ============================================================================\n// Type exports\n// ============================================================================\n\nexport type OrbitalSchemaInput = z.input<typeof OrbitalSchemaSchema>;\nexport type OrbitalConfigInput = z.input<typeof OrbitalConfigSchema>;\n","/**\n * S-Expression Bindings\n *\n * Defines binding types and utilities for S-expression context.\n * Bindings are references to values that are resolved at runtime.\n *\n * Core Bindings:\n * - @entity - The linked entity for this trait (e.g., @entity.health)\n * - @payload - Event payload data (e.g., @payload.amount)\n * - @state - Current state machine state\n * - @now - Current timestamp (Date.now())\n *\n * Entity Bindings:\n * - @EntityName.field - Reference to singleton/runtime entity (e.g., @GameConfig.gravity)\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// Re-export core binding utilities from expression.ts\nexport {\n isBinding,\n parseBinding,\n isValidBinding,\n CORE_BINDINGS,\n type CoreBinding,\n type ParsedBinding,\n} from './expression.js';\nimport type { SExpr } from './expression.js';\nimport type { RuntimeValue } from './json.js';\n\n// ============================================================================\n// Binding Schema\n// ============================================================================\n\n/**\n * Schema for a binding string.\n * Validates that the string starts with @ and has valid format.\n */\nexport const BindingSchema = z.string().refine(\n (val) => {\n if (!val.startsWith('@')) return false;\n const parts = val.slice(1).split('.');\n if (parts.length === 0 || parts[0] === '') return false;\n // All parts must be valid identifiers (letters, numbers, underscore)\n // supporting unicode characters for i18n\n return parts.every((part) => /^[\\p{L}_][\\p{L}0-9_]*$/u.test(part));\n },\n { message: 'Invalid binding format. Must be @name or @name.path.to.field' }\n);\n\n// ============================================================================\n// Binding Constants\n// ============================================================================\n\n/**\n * Binding documentation for LLM prompts and validation messages.\n * \n * IMPORTANT: Keep synchronized with CORE_BINDINGS in expression.ts\n */\nexport const BINDING_DOCS = {\n entity: {\n description: 'Reference to the linked entity for this trait',\n examples: ['@entity.health', '@entity.x', '@entity.status'],\n requiresPath: true,\n },\n payload: {\n description: 'Reference to the event payload data',\n examples: ['@payload.amount', '@payload.targetId', '@payload.action'],\n requiresPath: true,\n },\n state: {\n description: 'Current state machine state name',\n examples: ['@state'],\n requiresPath: false,\n },\n now: {\n description: 'Current timestamp in milliseconds',\n examples: ['@now'],\n requiresPath: false,\n },\n config: {\n description: 'Trait configuration values',\n examples: ['@config.apiEndpoint', '@config.theme'],\n requiresPath: true,\n },\n computed: {\n description: 'Computed/calculated values',\n examples: ['@computed.total', '@computed.isValid'],\n requiresPath: true,\n },\n trait: {\n description: 'Trait context data',\n examples: ['@trait.name', '@trait.category'],\n requiresPath: true,\n },\n user: {\n description: 'Authenticated user / agent context for ownership and role-based gating',\n examples: ['@user.id', '@user.role'],\n requiresPath: true,\n },\n callsitePayload: {\n description:\n 'Call-site-captured event payload — emitted by the compiler\\'s inline-trait hoisting when an extracted render block captured @payload; resolved at the composing effect by the runtime BindingResolver',\n examples: ['@callsitePayload.error', '@callsitePayload.row'],\n requiresPath: true,\n },\n} as const;\n\n/**\n * Validation rules for bindings in different contexts.\n */\nexport const BINDING_CONTEXT_RULES = {\n guard: {\n allowed: ['entity', 'payload', 'state', 'now', 'config', 'user'] as const,\n description:\n 'Guards can access entity fields, event payload, current state, time, the call-site trait config (@config.X), and the authenticated user context (@user.id, @user.role) for ownership / role gates. Config access lets atoms write mode-aware guards — e.g. std-modal\\'s OPEN can require @payload.row only when @config.mode equals \"edit\", letting create-mode legitimately fire OPEN with no row. Like effects, @config.X is substituted at molecule/organism inline time with the literal call-site value; at atom-scope validate, @config is allowed-but-unresolved.',\n },\n effect: {\n allowed: ['entity', 'payload', 'state', 'now', 'trait', 'config', 'user', 'callsitePayload'] as const,\n description:\n 'Effects can access and modify entity fields, use payload data, embed another trait\\'s live frame via @trait.X inside render-ui children, read trait config values (@config.X) for atoms parameterized by their call-site, and read the authenticated user context (@user.id, @user.role). At molecule/organism inline time, @config.X is substituted with the literal value from the call-site config block; at atom-scope validate, @config is allowed-but-unresolved. @callsitePayload.X is the call-site-captured event payload emitted by the compiler\\'s inline-trait hoisting (a hoisted render block that captured @payload); it is resolved at the composing effect by the runtime BindingResolver.',\n },\n tick: {\n allowed: ['entity', 'state', 'now', 'config', 'user'] as const,\n description: 'Ticks can access entity fields, current state, time, trait config (@config.X) for parameterized atoms, and the authenticated user context (@user.id, @user.role). Same substitution semantics as guards/effects.',\n },\n} as const;\n\nexport type BindingContext = keyof typeof BINDING_CONTEXT_RULES;\n\n// ============================================================================\n// Render-Time Binding Markers\n// ============================================================================\n\n/**\n * Tag property of a `RenderBindingMarker`. `$`-prefixed so it can never\n * collide with a pattern prop key (prop keys are camelCase identifiers).\n */\nexport const RENDER_BINDING_MARKER = '$renderBinding' as const;\n\n/**\n * A render-ui prop leaf that is evaluated at RENDER time, not at flush time.\n *\n * The interpreted path's executor carries `@entity`-dependent leaves into\n * slot content as these markers instead of resolving them eagerly; the\n * renderer (`@almadar/ui`'s SlotContentRenderer) resolves each marker\n * against the live entity store on every render — the same model the\n * compiled shell uses (state-based JSX reading `fields?.X` per React\n * render). Payload-dependent leaves are never deferred: `@payload` is\n * event-scoped and does not exist at render time.\n *\n * A `type` (not `interface`) so it carries an implicit index signature and\n * stays assignable to the `SExpr` record branch at guard call sites.\n */\nexport type RenderBindingMarker = {\n readonly [RENDER_BINDING_MARKER]: true;\n /** The raw prop expression: a binding string (`'@entity.hp'`, embedded\n * form `'HP: @entity.hp'`) or an S-expression tree. */\n readonly expression: SExpr;\n};\n\n/** Narrow an arbitrary prop value to a `RenderBindingMarker`. */\nexport function isRenderBindingMarker(value: RuntimeValue): value is RenderBindingMarker {\n return (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n RENDER_BINDING_MARKER in value &&\n value[RENDER_BINDING_MARKER] === true\n );\n}\n\n/** Matches a whole `@entity` token (path or bracket suffix allowed). */\nconst ENTITY_BINDING_RE = /@entity(?=[.\\[\\]]|$)/;\n\n/** Matches a whole `@payload` / `@callsitePayload` token. */\nconst PAYLOAD_BINDING_RE = /@(?:callsitePayload|payload)(?=[.\\[\\]]|$)/;\n\n/**\n * Does this raw prop expression reference `@entity` anywhere (pure binding,\n * embedded-binding string, nested S-expression, or object tree)? Marker\n * objects count as entity-referencing by construction.\n */\nexport function containsEntityBinding(value: SExpr): boolean {\n if (typeof value === 'string') return ENTITY_BINDING_RE.test(value);\n if (Array.isArray(value)) return value.some(containsEntityBinding);\n if (value !== null && typeof value === 'object') {\n if (isRenderBindingMarker(value)) return true;\n return Object.values(value as Record<string, SExpr>).some(containsEntityBinding);\n }\n return false;\n}\n\n/**\n * Does this raw prop expression reference the event payload (`@payload` /\n * `@callsitePayload`) anywhere? Such leaves stay flush-time evaluated —\n * the payload does not exist at render time.\n */\nexport function containsPayloadBinding(value: SExpr): boolean {\n if (typeof value === 'string') return PAYLOAD_BINDING_RE.test(value);\n if (Array.isArray(value)) return value.some(containsPayloadBinding);\n if (value !== null && typeof value === 'object') {\n return Object.values(value as Record<string, SExpr>).some(containsPayloadBinding);\n }\n return false;\n}\n\n// ============================================================================\n// Binding Validation Helpers\n// ============================================================================\n\n/**\n * Check if a binding is valid in a given context.\n *\n * @param binding - Parsed binding\n * @param context - Context where binding is used\n * @returns Error message if invalid, null if valid\n */\nexport function validateBindingInContext(\n binding: { type: 'core' | 'entity'; root: string },\n context: BindingContext\n): string | null {\n const rules = BINDING_CONTEXT_RULES[context];\n\n if (binding.type === 'core') {\n if (!(rules.allowed as readonly string[]).includes(binding.root)) {\n return `Binding @${binding.root} is not allowed in ${context} context. Allowed: ${rules.allowed.join(', ')}`;\n }\n }\n\n // Entity bindings are always allowed (they reference singletons/runtime entities)\n return null;\n}\n\n/**\n * Get all valid binding examples for a context.\n *\n * @param context - Context to get examples for\n * @returns Array of example binding strings\n */\nexport function getBindingExamples(context: BindingContext): string[] {\n const rules = BINDING_CONTEXT_RULES[context];\n const examples: string[] = [];\n\n for (const binding of rules.allowed) {\n const doc = BINDING_DOCS[binding];\n examples.push(...doc.examples);\n }\n\n // Add entity binding example\n examples.push('@GameConfig.gravity', '@Filter.searchTerm');\n\n return examples;\n}\n","/**\n * Binding root classification\n *\n * The prefix of an `@X.path` binding expression identifies which runtime\n * context resolves the rest of the path. This type is the TS-side mirror\n * of `OirBindingRoot` in `orbital-core`'s IR; publishing it from\n * `@almadar/core` lets the codegen, the runtime binding resolver, and\n * the verifier's schema walker all refer to the same narrow union.\n *\n * Distinct from {@link ParsedBinding.root} (which is a plain string): use\n * `BindingRoot` whenever you need exhaustiveness over the known prefixes.\n *\n * - `entity`: `@entity.field` — the trait's linked entity (first row on\n * the client, `getById` result on the server).\n * - `payload`: `@payload.x` — the last event's payload.\n * - `state`: `@state.x` — the state machine's `state` slot (rare;\n * mostly used for guard/effect contexts).\n * - `config`: `@config.x` — the trait ref's merged config from the\n * molecule call site.\n * - `user`: `@user.x` — authenticated user / agent context.\n * - `trait`: `@trait.x` — render-time reference to another trait's\n * mounted view. Resolved by `<TraitFrame>` at runtime, not by the\n * SExpression compiler.\n * - `item`: `@item.x` — iterator variable inside a `map` / repeat\n * pattern.\n * - `now`: `@now` — current timestamp (ISO string).\n * - `computed`: `@computed.x` — evaluator-computed value (Phase 4.5).\n * - `other`: catch-all for unknown prefixes or entity-reference\n * bindings (`@User.name`, `@_item`).\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\nimport type { RuntimeValue } from './json.js';\n\nexport type BindingRoot =\n | 'entity'\n | 'payload'\n | 'state'\n | 'config'\n | 'user'\n | 'trait'\n | 'item'\n | 'now'\n | 'computed'\n | 'other';\n\n/** Every known binding root, in a stable order — useful for exhaustiveness checks. */\nexport const BINDING_ROOTS: readonly BindingRoot[] = [\n 'entity',\n 'payload',\n 'state',\n 'config',\n 'user',\n 'trait',\n 'item',\n 'now',\n 'computed',\n 'other',\n] as const;\n\nconst KNOWN_ROOTS = new Set<string>(BINDING_ROOTS.filter((r) => r !== 'other'));\n\n/**\n * Narrow a raw binding-root string (e.g. the `root` field of\n * `ParsedBinding` from `./expression.ts`) to a `BindingRoot`. Returns\n * `'other'` for entity-reference roots like `@User.name` or unknown\n * prefixes.\n */\nexport function toBindingRoot(root: string): BindingRoot {\n return KNOWN_ROOTS.has(root) ? (root as BindingRoot) : 'other';\n}\n\n/**\n * A trait reference string of the form `@trait.<TraitName>`. Used as the\n * value type for `trait`-typed config fields. The runtime + compiled codegen\n * both substitute this with embedded trait UI at render time.\n *\n * Branded as a literal-template type so TS narrows on use; consumers should\n * call {@link isTraitFieldRef} to validate runtime values before assignment.\n */\nexport type TraitFieldRef = `@trait.${string}`;\n\nconst TRAIT_REF_PATTERN = /^@trait\\.[A-Z][a-zA-Z0-9]*$/;\n\n/** Type guard: narrow an unknown value to {@link TraitFieldRef}. */\nexport function isTraitFieldRef(value: RuntimeValue): value is TraitFieldRef {\n return typeof value === 'string' && TRAIT_REF_PATTERN.test(value);\n}\n\n/** Zod schema for {@link TraitFieldRef} values. Useful when validating analyzer\n * JSON or recipe overrides at runtime boundaries. */\nexport const TraitFieldRefSchema = z\n .string()\n .regex(TRAIT_REF_PATTERN, 'expected `@trait.<TraitName>` reference');\n","/**\n * Authenticated user context — what `@user.x` resolves against.\n *\n * The canonical shape for the `user` binding root, shared by both execution\n * paths: the JS interpreter resolves `@user.id` through\n * `EvaluationContext.user`, and the compiled shell emits `user?.id` against the\n * `UserContext` its `@app/shared` re-exports from here.\n *\n * `id` is the field the behavior library reads for ownership scoping and `role`\n * the field it reads for capability gating. Auth providers that name the subject\n * `uid` must normalize at their boundary — {@link normalizeUserContext} does that.\n *\n * @packageDocumentation\n */\n\nimport type { FieldValue } from './entity.js';\n\n/** Authenticated user / agent identity behind `@user.x` bindings. */\nexport interface UserContext {\n /** Stable subject identifier. `@user.id` — the ownership key. */\n id: string;\n /** `@user.email` */\n email?: string;\n /** `@user.name` — display name. */\n name?: string;\n /** `@user.role` — single role string, compared against a policy's allowed list. */\n role?: string;\n /** `@user.permissions` — fine-grained capability strings. */\n permissions?: string[];\n /** Additional provider claims, readable as `@user.<claim>`. */\n [key: string]: FieldValue | undefined;\n}\n\n/**\n * The identity of an unauthenticated viewer. A resolvable object rather than\n * `undefined` so a role predicate evaluates to a definite `false` instead of\n * comparing against nothing.\n */\nexport const ANONYMOUS_USER: UserContext = {\n id: 'anonymous',\n role: 'anonymous',\n permissions: [],\n};\n\n/** Provider-shaped identity claims, before normalization. */\nexport interface RawUserClaims {\n id?: string;\n uid?: string;\n email?: string | null;\n name?: string;\n displayName?: string | null;\n role?: string;\n permissions?: string[];\n [key: string]: FieldValue | undefined;\n}\n\n/** Claim keys {@link normalizeUserContext} derives rather than copies verbatim. */\nconst DERIVED_CLAIM_KEYS: readonly string[] = ['id', 'name', 'displayName', 'email'];\n\n/**\n * Normalize provider claims into a {@link UserContext}.\n *\n * Firebase (and most OIDC providers) name the subject `uid` and the display name\n * `displayName`, while every `.lolo` behavior reads `@user.id` / `@user.name`.\n * Without this normalization `@user.id` is `undefined` against a fully\n * authenticated request and every ownership filter silently matches no rows.\n * `uid` is preserved so `@user.uid` keeps working.\n *\n * Returns `undefined` for absent or subject-less claims so callers can\n * distinguish \"no auth ran\" from \"anonymous\"; use {@link ANONYMOUS_USER} where a\n * definite identity is required.\n */\nexport function normalizeUserContext(\n claims: RawUserClaims | null | undefined,\n): UserContext | undefined {\n if (!claims) return undefined;\n const id = claims.id ?? claims.uid;\n if (typeof id !== 'string' || id.length === 0) return undefined;\n\n const user: UserContext = { id };\n for (const [key, value] of Object.entries(claims)) {\n if (value === undefined || DERIVED_CLAIM_KEYS.includes(key)) continue;\n user[key] = value;\n }\n\n const name = claims.name ?? claims.displayName;\n if (typeof name === 'string' && name.length > 0) user.name = name;\n if (typeof claims.email === 'string' && claims.email.length > 0) user.email = claims.email;\n\n return user;\n}\n\n/**\n * Turn a row of an app's `[identity]` entity into a viewer.\n *\n * There is no separate persona shape: an identity row IS the persona\n * (`Almadar_LOLO_Identity.md` §4.3), so this only guards the one field the\n * behavior library requires — a non-empty string `id` — and passes every other\n * declared field through as a `@user.<field>` claim. Rows without a usable id\n * yield `undefined` rather than a persona nobody can own rows as.\n */\nexport function personaFromIdentityRow(\n row: Record<string, FieldValue | undefined>,\n): UserContext | undefined {\n const id = row['id'];\n if (typeof id !== 'string' || id.length === 0) return undefined;\n const persona: UserContext = { id };\n for (const [key, value] of Object.entries(row)) {\n if (key === 'id' || value === undefined) continue;\n persona[key] = value;\n }\n return persona;\n}\n\n/**\n * The viewer a host presents when nothing named one.\n *\n * Without this, `@user` is `Null` in headless verify and preview, so every\n * `viewerName: @user.name` binding renders blank and the account menu never\n * appears — an app that cannot say who you are. Worse, an ownership filter that\n * works and one that is broken both render an empty table.\n *\n * `role` is deliberately EMPTY, not a guess. A default of `admin` would silently\n * flip which branch renders at the 38 `@user.role` comparisons in the corpus;\n * an empty role matches no literal, exactly as `Null` did, so this fixes\n * \"undefined at runtime\" without changing a single guard outcome.\n */\nexport const DEFAULT_VIEWER: UserContext = {\n id: 'viewer-1',\n name: 'Dev Viewer',\n email: 'viewer@example.com',\n role: '',\n};\n\n/** Look a persona up in a roster by id, or by role when no id matches. */\nexport function findPersonaInRoster(\n roster: readonly UserContext[],\n idOrRole: string,\n): UserContext | undefined {\n return (\n roster.find((p) => p.id === idOrRole) ??\n roster.find((p) => p.role === idOrRole)\n );\n}\n\n/**\n * Resolve a persona spec — a bare id/role (`Person Id 3`, `moderator`) or a full\n * JSON `UserContext` — into a viewer. This is the `ALMADAR_PERSONA` contract,\n * shared by every host that presents an app as somebody.\n *\n * The roster is the app's OWN declared personas — the seeded rows of its\n * `[identity]` entity (`Almadar_LOLO_Identity.md` §4.3) — supplied by the host\n * that has them in hand (the runtime's live store on the interpreter path, the\n * schema-derived seed rows on the compiled path). There is no global roster:\n * an app without an `[identity]` entity resolves only JSON-form specs.\n *\n * Throws on anything unresolvable rather than returning `undefined`: \"no persona\"\n * and \"persona silently ignored\" look identical on screen, so a bad spec must\n * fail at boot instead of rendering as nobody.\n */\nexport function resolvePersonaSpec(spec: string, roster: readonly UserContext[]): UserContext {\n const raw = spec.trim();\n if (!raw.startsWith('{')) {\n const declared = findPersonaInRoster(roster, raw);\n if (!declared) {\n const known = roster.map((p) => `${p.id}/${p.role ?? '-'}`).join(', ');\n throw new Error(\n `Persona \"${raw}\" is not a declared persona id or role. ` +\n (roster.length > 0\n ? `Known: ${known}`\n : 'This app declares no [identity] entity, so only the JSON persona form is accepted.'),\n );\n }\n return declared;\n }\n let claims: RawUserClaims;\n try {\n claims = JSON.parse(raw);\n } catch {\n throw new Error(`Persona is not valid JSON: ${raw}`);\n }\n const user = normalizeUserContext(claims);\n if (!user) {\n throw new Error(`Persona needs an \"id\" (or \"uid\"): ${raw}`);\n }\n return user;\n}\n\n// ============================================================================\n// Dev identity token\n// ============================================================================\n\n/**\n * Marks a bearer token as a mocked dev identity rather than a real ID token.\n * The prefix is deliberately unmistakable: a server accepts these ONLY behind an\n * explicit dev opt-in, so a production deployment rejects them like any other\n * malformed token.\n */\nexport const DEV_TOKEN_PREFIX = 'almadar-dev.';\n\n/**\n * Encode a viewer as a dev bearer token.\n *\n * Carries the WHOLE identity, not just the subject: real Firebase claims have no\n * `role`, so a server that only reads `uid` leaves every `@user.role` gate inert\n * even for a signed-in user. URI-encoded JSON keeps the token header-safe (no\n * spaces or delimiters) and works unchanged in Node and the browser.\n */\nexport function encodeDevIdentityToken(user: UserContext): string {\n return DEV_TOKEN_PREFIX + encodeURIComponent(JSON.stringify(user));\n}\n\n/**\n * Decode a dev bearer token back into a viewer, or `undefined` if it is not one\n * / is malformed — callers fail closed rather than inventing an identity.\n */\nexport function decodeDevIdentityToken(token: string): UserContext | undefined {\n if (!token.startsWith(DEV_TOKEN_PREFIX)) return undefined;\n try {\n const claims: RawUserClaims = JSON.parse(\n decodeURIComponent(token.slice(DEV_TOKEN_PREFIX.length)),\n );\n return normalizeUserContext(claims);\n } catch {\n return undefined;\n }\n}\n","/**\n * Agent Types\n *\n * Defines the AgentContext interface and related types for the agent/* operator namespace.\n * These types are the contract between operators (language) and implementation (runtime).\n *\n * @packageDocumentation\n */\n\nimport type { ServiceParams } from './service.js';\nimport type { EventPayloadValue } from './expression.js';\nimport type { FieldValue } from './entity.js';\nimport type { JsonSchema } from '../factory/types.js';\nimport type { ValidationError } from './validation.js';\nimport type { Orbital } from './orbital.js';\nimport type { OrbitalSchema } from './schema.js';\nimport type { JsonValue, RuntimeValue } from './json.js';\nimport type { AnalysisResult, PlanSnapshot, GitHubRepo, GitHubIssue } from './plan.js';\n\n// ============================================================================\n// Agent Memory Types\n// ============================================================================\n\n/**\n * Categories for agent memories.\n */\nexport type AgentMemoryCategory =\n | 'preference'\n | 'correction'\n | 'pattern-affinity'\n | 'entity-template'\n | 'error-resolution';\n\n/**\n * A single memory record stored by the agent.\n */\nexport interface AgentMemoryRecord {\n /** Unique memory identifier */\n id: string;\n /** Memory content (natural language) */\n content: string;\n /** Memory category */\n category: AgentMemoryCategory;\n /** Strength value (0.0-1.0), decays over time unless pinned */\n strength: number;\n /** Whether this memory is pinned (immune to decay) */\n pinned: boolean;\n /** Memory scope */\n scope: 'global' | 'project';\n /** ISO timestamp of last access */\n lastAccessedAt: string;\n /** ISO timestamp of creation */\n createdAt: string;\n}\n\n// ============================================================================\n// Agent Context Types\n// ============================================================================\n\n/**\n * Strategy for context compaction.\n */\nexport type AgentCompactStrategy = 'hybrid' | 'summarize' | 'truncate' | 'extract';\n\n/**\n * Result of a context compaction operation.\n */\nexport interface AgentCompactResult {\n /** Token count before compaction */\n before: number;\n /** Token count after compaction */\n after: number;\n /** Strategy used */\n strategy: AgentCompactStrategy;\n /** Optional summary generated during compaction */\n summary?: string;\n}\n\n// ============================================================================\n// Agent LLM Types\n// ============================================================================\n\n/**\n * Options for agent/generate calls.\n */\nexport interface AgentGenerateOptions {\n /** LLM provider override */\n provider?: string;\n /** Model override */\n model?: string;\n /** Maximum tokens to generate */\n maxTokens?: number;\n}\n\n// ============================================================================\n// LLM Tool-Calling Contract Types\n// ============================================================================\n//\n// These are the LANGUAGE-LEVEL contract types for the llm/* substrate\n// operators. @almadar/llm's ChatCompletion* types are the WIRE FORMAT; the\n// runtime handler maps between them. Defined here (not in @almadar/llm) so\n// the dependency direction stays core → nothing, llm → core.\n\n/**\n * A message in an LLM tool-calling conversation.\n */\nexport interface LlmMessage {\n role: 'system' | 'user' | 'assistant' | 'tool';\n content: string;\n /** Present on assistant messages that called tools. */\n toolCalls?: ReadonlyArray<LlmToolCall>;\n /** Present on tool-role messages — matches the preceding toolCall's id. */\n toolCallId?: string;\n}\n\n/**\n * A tool call requested by the assistant.\n */\nexport interface LlmToolCall {\n id: string;\n name: string;\n /** JSON-encoded arguments string (as returned by the LLM). */\n arguments: string;\n}\n\n/**\n * A tool definition passed to llm/call-tools.\n */\nexport interface LlmToolDef {\n name: string;\n description: string;\n /** JSON Schema describing the tool's parameters. */\n parameters: JsonSchema;\n}\n\n/**\n * Result of llm/call-tools.\n */\nexport interface LlmCallToolsResult {\n /** The assistant's text response (may be empty when only tool_calls fired). */\n content: string;\n /** Tool calls the assistant requested, if any. */\n toolCalls?: ReadonlyArray<LlmToolCall>;\n /** Token usage from the call. */\n usage: LlmTokenUsage;\n}\n\n/**\n * Token usage from an LLM call.\n */\nexport interface LlmTokenUsage {\n prompt: number;\n completion: number;\n total: number;\n}\n\n// ============================================================================\n// Agent Search Types\n// ============================================================================\n\n/**\n * Result from agent/search-code.\n */\nexport interface AgentCodeSearchResult {\n /** Repository name (owner/repo) */\n repo: string;\n /** File path within the repository */\n path: string;\n /** URL to the file */\n url: string;\n}\n\n// ============================================================================\n// Substrate Result Types\n// ============================================================================\n//\n// Language-level contracts for compose/behavior/validate operator returns.\n// Defined in @almadar/core (not @almadar-io/rabit) because the compiled path\n// also needs them — emitted TS code references these types without depending\n// on rabit. rabit's TS implementations produce/consume these shapes.\n\n/** Result of behavior/instantiate (factory path) or subagent build. */\nexport interface BuilderResult {\n method: string;\n orbitalName: string;\n success: boolean;\n orbitalPath?: string;\n traitCount?: number;\n traitNames?: string[];\n transitionCount?: number;\n childCount?: number;\n error?: string;\n}\n\n/** Result of validate/validate for a single orbital or the composed schema. */\nexport interface ValidateResult {\n valid: boolean;\n errorCount: number;\n errors: ValidationError[];\n orbitalName?: string;\n}\n\n/** Result of compose/compose-all. */\nexport interface ComposeAllResult {\n orbitalCount: number;\n composedPath: string;\n success: boolean;\n layout?: string;\n wiringConnections?: number;\n}\n\n/** Result of compose/compose-children (recursive builds). */\nexport interface ComposeChildrenResult {\n parentName: string;\n childCount: number;\n orbitalName: string;\n success: boolean;\n}\n\n/** Result of the repair service. */\nexport interface RepairResult {\n orbitalName: string;\n success: boolean;\n attempt: number;\n paramsChanged: boolean;\n error?: string;\n}\n\n/** Result of lolo/emit-body (free-lolo path). */\nexport interface LoloEmitResult {\n orbitalName: string;\n success: boolean;\n loloSource: string;\n error?: string;\n}\n\n/** Result of the planner service. */\nexport interface PlannerResult {\n organism: string;\n operationCount: number;\n pendingQuestions: boolean;\n cached: boolean;\n success: boolean;\n error?: string;\n}\n\n/** Result of the executor (spawn-subagents). */\nexport interface ExecutePlanResult {\n dispatchedOrbitals: string[];\n noopForBuild: boolean;\n success: boolean;\n error?: string;\n}\n\n/** Result of dispatch-updates. */\nexport interface DispatchUpdatesResult {\n updatedOrbitals: string[];\n updateCount: number;\n success: boolean;\n}\n\n/** Discriminated union of all substrate service-call results. */\nexport type ServiceCallResult =\n | BuilderResult\n | ValidateResult\n | ComposeAllResult\n | ComposeChildrenResult\n | RepairResult\n | LoloEmitResult\n | PlannerResult\n | ExecutePlanResult\n | DispatchUpdatesResult;\n\n// ============================================================================\n// Session History\n// ============================================================================\n\n/** A single entry in an orbital's session history (build/conversation log). */\nexport interface SessionHistoryEntry {\n /** Role of the entry's author (e.g. 'user', 'assistant', 'system') */\n role: string;\n /** Entry content (natural language or structured description) */\n content: string;\n /** Epoch milliseconds when the entry was recorded */\n timestamp: number;\n}\n\n/**\n * Runtime guard for `SessionHistoryEntry` — narrows interpreter-produced\n * `unknown` values at the `SessionContext.appendHistory` boundary.\n */\nexport function isSessionHistoryEntry(value: RuntimeValue): value is SessionHistoryEntry {\n if (typeof value !== 'object' || value === null) return false;\n return (\n 'role' in value && typeof value.role === 'string' &&\n 'content' in value && typeof value.content === 'string' &&\n 'timestamp' in value && typeof value.timestamp === 'number'\n );\n}\n\n// ============================================================================\n// Agent Context Interface\n// ============================================================================\n\n/**\n * AgentContext is the runtime contract for agent/* operators.\n *\n * The evaluator dispatches agent/* operators to methods on this interface.\n * Pure methods (usable in guards) return synchronously.\n * Effect methods return Promises.\n *\n * When ctx.agent is undefined, operators return safe defaults ([], 0, false, \"\").\n * Implementations live in @almadar-io/agent-runtime (Phase 2B).\n */\nexport interface AgentContext {\n // Memory (pure)\n recall(query: string, limit?: number): AgentMemoryRecord[];\n memories(category?: AgentMemoryCategory): AgentMemoryRecord[];\n memoryStrength(id: string): number;\n isPinned(id: string): boolean;\n\n // Memory (effects)\n memorize(content: string, category: AgentMemoryCategory, scope?: 'global' | 'project'): Promise<string>;\n forget(id: string): Promise<void>;\n pin(id: string): Promise<void>;\n reinforce(id: string): Promise<void>;\n decay(): Promise<number>;\n\n // LLM (pure)\n provider(): string;\n model(): string;\n\n // LLM (effects)\n generate(prompt: string, options?: AgentGenerateOptions): Promise<string>;\n switchProvider(provider: string, model?: string): void;\n\n // Tools (pure)\n tools(): string[];\n\n // Tools (effects)\n invoke(toolName: string, args: ServiceParams): Promise<EventPayloadValue>;\n\n // Context (pure)\n tokenCount(): number;\n contextUsage(): number;\n\n // Context (effects)\n compact(strategy?: AgentCompactStrategy): Promise<AgentCompactResult>;\n\n // Session (pure)\n sessionId(): string;\n\n // Session (effects)\n fork(label?: string): Promise<string>;\n label(text: string): void;\n\n // Search (effects)\n searchCode(query: string, language?: string): Promise<AgentCodeSearchResult[]>;\n}\n\n// ============================================================================\n// Substrate Context Interfaces\n// ============================================================================\n//\n// Focused runtime contracts for the substrate operator namespaces. Each\n// interface backs one module of operators (llm/*, workspace/*, etc.). The\n// evaluator reads from ctx.<namespace>; the runtime (rabit) supplies\n// concrete implementations via contextExtensions. When a context is\n// undefined, operators return safe defaults (matching the agent/* pattern).\n\n/** Backs the llm/* operators (6 ops). */\nexport interface LlmContext {\n generate(prompt: string, options?: { json?: boolean; maxTokens?: number; provider?: string; model?: string }): Promise<string>;\n callTools(messages: LlmMessage[], tools: LlmToolDef[]): Promise<LlmCallToolsResult>;\n embed(texts: string[]): Promise<number[][]>;\n tokenCount(): number;\n switchProvider(provider: string, model?: string): void;\n compact(strategy?: string): Promise<{ before: number; after: number }>;\n}\n\n/** Backs the workspace/* operators (11 ops). */\nexport interface WorkspaceContext {\n readOrbital(name: string): Promise<Orbital>;\n writeOrbital(name: string, content: Orbital): Promise<void>;\n readFile(path: string): Promise<string>;\n writeFile(path: string, content: string): Promise<void>;\n exists(path: string): boolean;\n listOrbitals(): string[];\n readSchema(): Promise<OrbitalSchema>;\n writeSchema(schema: OrbitalSchema): Promise<void>;\n readPlan(): Promise<PlanSnapshot>;\n writePlan(plan: PlanSnapshot): Promise<void>;\n archiveOrbital(name: string): Promise<void>;\n}\n\n/** Backs the session/* operators (9 ops). */\nexport interface SessionContext {\n readSpec(orbitalName: string): Promise<Orbital>;\n writeSpec(orbitalName: string, spec: Orbital): Promise<void>;\n readMemory(orbitalName: string): Promise<AgentMemoryRecord[]>;\n writeMemory(orbitalName: string, memory: AgentMemoryRecord[]): Promise<void>;\n readHistory(orbitalName: string): Promise<SessionHistoryEntry[]>;\n appendHistory(orbitalName: string, entry: SessionHistoryEntry): Promise<void>;\n readErrors(orbitalName: string): Promise<string[]>;\n writeErrors(orbitalName: string, errors: string[]): Promise<void>;\n readAnalysis(orbitalName: string): Promise<AnalysisResult>;\n}\n\n/** Backs the memory/* operators (3 ops). */\nexport interface MemoryContext {\n recall(query: string, limit?: number): AgentMemoryRecord[];\n store(content: string, category?: string, strength?: number): Promise<string>;\n list(category?: string): AgentMemoryRecord[];\n}\n\n/** Backs the trace/* operators (2 ops). */\nexport interface TraceContext {\n emit(event: string, payload?: EventPayloadValue): void;\n log(message: string, level?: 'log' | 'warn' | 'error', data?: EventPayloadValue): void;\n}\n\n/** Backs the integration/* operators (3 ops). */\nexport interface IntegrationContext {\n http(method: string, url: string, body?: FieldValue, headers?: Record<string, string>): Promise<JsonValue>;\n githubGetRepo(owner: string, repo: string): Promise<GitHubRepo>;\n githubCreateIssue(owner: string, repo: string, title: string, body?: string): Promise<GitHubIssue>;\n}\n","/**\n * Plan & Analysis Types\n *\n * Lifted from @almadar-io/rabit's coordinator types. These are the\n * language-level contracts for the planner/analysis pipeline — the\n * session/* and workspace/* substrate operators produce and consume\n * these shapes. Defined here (not in rabit) so both the compiled path\n * (orbital-rust codegen → @almadar/server) and the interpreted path\n * (@almadar/runtime) reference the same types without depending on rabit.\n *\n * @packageDocumentation\n */\n\nimport type { EntityField } from './field.js';\nimport type { EntityPersistence } from './entity.js';\nimport type { RuntimeValue } from './json.js';\nimport type { OrbitalSchema } from './schema.js';\nimport type { PageTraitRef } from './page.js';\nimport type { TraitReference, TraitConfigObject } from './trait.js';\nimport type { ThemeDefinition } from './domain.js';\nimport type { RuleOverlay, TraitOverlay } from '../factory/overlays.js';\nimport type {\n EventWiringEntry,\n LayoutStrategy,\n MakeTraitRefOpts,\n} from '../builders/index.js';\n\n// ============================================================================\n// Clarification System\n// ============================================================================\n\nexport type ClarificationLevel = 'organism' | 'molecule' | 'atom_trait';\n\nexport interface ClarificationCandidate {\n id: string;\n label: string;\n description: string;\n whyThisFits: string;\n}\n\nexport interface Clarification {\n level: ClarificationLevel;\n scope: { orbitalName?: string; traitName?: string };\n question: string;\n candidates: ClarificationCandidate[];\n skipDefault: string;\n skippable: true;\n}\n\n// ============================================================================\n// Orbital Analysis Params\n// ============================================================================\n\nexport interface AnalysisPageOverride {\n name: string;\n path?: string;\n linkedEntity?: string;\n traits?: PageTraitRef[];\n}\n\nexport interface ExtraTraitRef\n extends Pick<\n TraitReference,\n 'ref' | 'name' | 'linkedEntity' | 'config' | 'events' | 'listens' | 'emitsScope'\n > {\n from: string;\n as: string;\n}\n\nexport interface AnalysisOrbitalParams {\n fields?: EntityField[];\n pagePath?: string;\n persistence?: EntityPersistence;\n entityName?: string;\n collection?: string;\n traitOverrides?: Record<\n string,\n Pick<MakeTraitRefOpts, 'config' | 'linkedEntity' | 'events' | 'name' | 'emitsScope' | 'listens'>\n >;\n extraTraits?: ExtraTraitRef[];\n pages?: AnalysisPageOverride[];\n}\n\n// ============================================================================\n// Analysis Result\n// ============================================================================\n\nexport interface AnalysisOrbital {\n orbitalName: string;\n suggestedBehavior: string | null;\n entityName?: string;\n pageNames?: ReadonlyArray<string>;\n params?: AnalysisOrbitalParams;\n traitOverlay?: TraitOverlay;\n paletteTopics?: string[];\n primitiveHints?: string[];\n}\n\nexport interface AnalysisRename {\n oldName: string;\n newName: string;\n}\n\nexport interface ComplexityAssessment {\n score: number;\n category: 'simple' | 'moderate' | 'complex';\n reasoning: string;\n detectedEntities?: string[];\n detectedFeatures?: string[];\n}\n\nexport interface AnalysisResult {\n userRequest: string;\n complexity: ComplexityAssessment;\n route: 'direct' | 'direct_with_questions' | 'decompose';\n organism: string;\n appName: string;\n organismReason: string;\n orbitals: AnalysisOrbital[];\n renames?: AnalysisRename[];\n deletedOrbitals?: string[];\n ruleOverlay?: RuleOverlay;\n estimatedMinutes?: number;\n schema: OrbitalSchema;\n wiring?: EventWiringEntry[];\n layout?: LayoutStrategy | 'detect';\n themeOverrides?: Partial<ThemeDefinition>;\n pendingClarifications?: Clarification[];\n}\n\n// ============================================================================\n// Plan Snapshot\n// ============================================================================\n\nexport interface SpawnResult {\n orbitalName: string;\n ok: boolean;\n traitNames: ReadonlyArray<string>;\n error?: string;\n durationMs: number;\n}\n\nexport type PlanSnapshotStatus = 'proposed' | 'confirmed' | 'built' | 'failed';\n\nexport interface PlanSnapshot {\n schemaVersion: 1;\n status: PlanSnapshotStatus;\n builtAt: string;\n organism: string | null;\n appName: string | null;\n organismReason: string | null;\n complexity: ComplexityAssessment | null;\n themeOverrides: Partial<ThemeDefinition>;\n ruleOverlay: RuleOverlay | null;\n orbitals: ReadonlyArray<AnalysisOrbital>;\n renames: ReadonlyArray<AnalysisRename>;\n deletedOrbitals: ReadonlyArray<string>;\n priorBuiltOrbitals: ReadonlyArray<AnalysisOrbital>;\n spawnedOrbitalResults: ReadonlyArray<SpawnResult>;\n skippedOrbitalNames: ReadonlyArray<string>;\n pendingClarifications: ReadonlyArray<Clarification>;\n paletteTopics?: string[];\n}\n\n/**\n * Runtime guard for `PlanSnapshot` — narrows interpreter-produced `unknown`\n * values at the `WorkspaceContext.writePlan` boundary. Discriminates on the\n * snapshot envelope (schemaVersion, status, roster arrays), not deep contents.\n */\nexport function isPlanSnapshot(value: RuntimeValue): value is PlanSnapshot {\n if (typeof value !== 'object' || value === null) return false;\n const statuses: ReadonlyArray<PlanSnapshotStatus> = ['proposed', 'confirmed', 'built', 'failed'];\n return (\n 'schemaVersion' in value && value.schemaVersion === 1 &&\n 'status' in value && statuses.some((s) => s === value.status) &&\n 'builtAt' in value && typeof value.builtAt === 'string' &&\n 'orbitals' in value && Array.isArray(value.orbitals) &&\n 'renames' in value && Array.isArray(value.renames) &&\n 'deletedOrbitals' in value && Array.isArray(value.deletedOrbitals)\n );\n}\n\n// ============================================================================\n// Compose Options\n// ============================================================================\n\nexport interface ComposeOptions {\n appName?: string;\n wiring?: EventWiringEntry[];\n layout?: LayoutStrategy | 'auto';\n themeOverrides?: Partial<ThemeDefinition>;\n}\n\n// ============================================================================\n// GitHub Integration Types\n// ============================================================================\n\nexport interface GitHubRepo {\n id: number;\n name: string;\n full_name: string;\n owner: { login: string };\n private: boolean;\n html_url: string;\n description: string | null;\n default_branch: string;\n clone_url: string;\n}\n\nexport interface GitHubIssue {\n id: number;\n number: number;\n title: string;\n body: string | null;\n state: 'open' | 'closed';\n html_url: string;\n user: { login: string };\n created_at: string;\n updated_at: string;\n}\n","/**\n * Interaction Model Types\n *\n * Defines how users interact with entities in the application.\n * Used to drive trait selection and UI slot usage.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Flow Types\n// ============================================================================\n\n/**\n * Create flow - how new items are created\n */\nexport type CreateFlow = 'modal' | 'page' | 'inline' | 'none';\n\n/**\n * Edit flow - how items are edited\n */\nexport type EditFlow = 'modal' | 'page' | 'inline' | 'none';\n\n/**\n * View flow - how item details are viewed\n */\nexport type ViewFlow = 'drawer' | 'page' | 'modal' | 'inline' | 'none';\n\n/**\n * Delete flow - how items are deleted\n */\nexport type DeleteFlow = 'confirm' | 'instant' | 'none';\n\n/**\n * List interaction - what happens when clicking list items\n */\nexport type ListInteraction = 'click-to-view' | 'click-to-edit' | 'inline-edit';\n\n// ============================================================================\n// Interaction Model\n// ============================================================================\n\n/**\n * InteractionModel - defines how users interact with entities.\n *\n * This drives:\n * - Which traits to attach (EntityManagement, ModalEdit, etc.)\n * - How render_ui effects target slots (modal, drawer, page)\n * - What UI patterns to use\n */\nexport interface InteractionModel {\n /** How new items are created */\n createFlow: CreateFlow;\n\n /** How items are edited */\n editFlow: EditFlow;\n\n /** How item details are viewed */\n viewFlow: ViewFlow;\n\n /** How items are deleted */\n deleteFlow: DeleteFlow;\n\n /** What happens when clicking list items */\n listInteraction?: ListInteraction;\n\n /** Enable bulk actions (select multiple, delete all) */\n bulkActions?: boolean;\n\n /** Enable real-time updates */\n realtime?: boolean;\n}\n\nexport const InteractionModelSchema = z.object({\n createFlow: z.enum(['modal', 'page', 'inline', 'none']),\n editFlow: z.enum(['modal', 'page', 'inline', 'none']),\n viewFlow: z.enum(['drawer', 'page', 'modal', 'inline', 'none']),\n deleteFlow: z.enum(['confirm', 'instant', 'none']),\n listInteraction: z.enum(['click-to-view', 'click-to-edit', 'inline-edit']).optional(),\n bulkActions: z.boolean().optional(),\n realtime: z.boolean().optional(),\n});\n\n// ============================================================================\n// Default Models per Domain\n// ============================================================================\n\n/**\n * Default interaction models for each domain type\n */\nexport const DEFAULT_INTERACTION_MODELS: Record<string, InteractionModel> = {\n business: {\n createFlow: 'modal',\n editFlow: 'modal',\n viewFlow: 'drawer',\n deleteFlow: 'confirm',\n listInteraction: 'click-to-view',\n bulkActions: true,\n },\n game: {\n createFlow: 'none',\n editFlow: 'none',\n viewFlow: 'none',\n deleteFlow: 'none',\n realtime: true,\n },\n form: {\n createFlow: 'inline',\n editFlow: 'inline',\n viewFlow: 'none',\n deleteFlow: 'none',\n },\n dashboard: {\n createFlow: 'modal',\n editFlow: 'modal',\n viewFlow: 'drawer',\n deleteFlow: 'confirm',\n listInteraction: 'click-to-view',\n },\n content: {\n createFlow: 'page',\n editFlow: 'page',\n viewFlow: 'page',\n deleteFlow: 'confirm',\n listInteraction: 'click-to-view',\n },\n};\n\n/**\n * Gets the interaction model for a domain.\n * \n * Retrieves the appropriate interaction model configuration based on the\n * specified domain. Falls back to the business model if no specific\n * domain match is found.\n * \n * @param {string} domain - Domain name (e.g., 'healthcare', 'education')\n * @returns {InteractionModel} Interaction model configuration\n * \n * @example\n * getInteractionModelForDomain('healthcare'); // returns healthcare-specific model\n * getInteractionModelForDomain('unknown'); // returns business fallback model\n */\nexport function getInteractionModelForDomain(domain: string): InteractionModel {\n return DEFAULT_INTERACTION_MODELS[domain] ?? DEFAULT_INTERACTION_MODELS.business;\n}\n\n// ============================================================================\n// Type exports\n// ============================================================================\n\nexport type InteractionModelInput = z.input<typeof InteractionModelSchema>;\n","/**\n * Pattern Types (Auto-Generated)\n *\n * DO NOT EDIT MANUALLY — regenerated by almadar-pattern-sync `patterns` command.\n *\n * Generated: 2026-07-31T03:04:40.163Z\n * Pattern count: 268\n */\n\nimport type { FieldValue } from '../types/entity.js';\nimport type { SExpr } from '../types/expression.js';\n\n/**\n * Object-typed pattern prop value. Represents dynamic config objects\n * within pattern props (e.g., style, assetManifest, payload).\n */\nexport type PatternPropValue = Record<string, FieldValue | undefined>;\n\n/**\n * All valid pattern type names from @almadar/core/patterns registry.\n * Use this type in render-ui effects for compile-time validation.\n */\nexport type PatternType =\n | 'about-page-template'\n | 'accordion'\n | 'action-palette'\n | 'action-tile'\n | 'activation-block'\n | 'alert'\n | 'algorithm-canvas'\n | 'animated-counter'\n | 'animated-graphic'\n | 'animated-reveal'\n | 'article-section'\n | 'aside'\n | 'atlas-image'\n | 'atlas-panel'\n | 'auth-layout'\n | 'avatar'\n | 'badge'\n | 'behavior-view'\n | 'biology-canvas'\n | 'bloom-quiz-block'\n | 'book-chapter-view'\n | 'book-cover-page'\n | 'book-nav-bar'\n | 'book-table-of-contents'\n | 'book-viewer'\n | 'box'\n | 'branching-logic-builder'\n | 'breadcrumb'\n | 'button'\n | 'calendar-grid'\n | 'canvas'\n | 'canvas-2d'\n | 'card'\n | 'carousel'\n | 'case-study-card'\n | 'case-study-organism'\n | 'center'\n | 'chart'\n | 'chart-legend'\n | 'chat-bar'\n | 'checkbox'\n | 'chemistry-canvas'\n | 'choice-button'\n | 'code-block'\n | 'code-runner-panel'\n | 'community-links'\n | 'conditional-wrapper'\n | 'confetti-effect'\n | 'confirm-dialog'\n | 'connection-block'\n | 'container'\n | 'content-renderer'\n | 'content-section'\n | 'control-button'\n | 'control-grid'\n | 'counter-template'\n | 'cta-banner'\n | 'dashboard-grid'\n | 'dashboard-layout'\n | 'data-grid'\n | 'data-list'\n | 'date-range-picker'\n | 'date-range-selector'\n | 'day-cell'\n | 'detail-panel'\n | 'dialog'\n | 'dialogue-bubble'\n | 'divider'\n | 'doc-breadcrumb'\n | 'doc-pagination'\n | 'doc-search'\n | 'doc-sidebar'\n | 'doc-toc'\n | 'document-viewer'\n | 'draw-group'\n | 'draw-shape'\n | 'draw-shape-layer'\n | 'draw-sprite'\n | 'draw-sprite-layer'\n | 'draw-text'\n | 'draw-text-layer'\n | 'drawer'\n | 'drawer-slot'\n | 'edge-decoration'\n | 'emoji-picker'\n | 'empty-state'\n | 'entity-cards'\n | 'entity-list'\n | 'entity-table'\n | 'error-boundary'\n | 'error-state'\n | 'feature-card'\n | 'feature-detail-page-template'\n | 'feature-grid'\n | 'feature-grid-organism'\n | 'file-tree'\n | 'filter-group'\n | 'filter-pill'\n | 'flex'\n | 'flip-card'\n | 'flip-container'\n | 'floating-action-button'\n | 'form'\n | 'form-actions'\n | 'form-field'\n | 'form-layout'\n | 'form-section'\n | 'form-section-header'\n | 'game-audio-toggle'\n | 'game-hud'\n | 'game-icon'\n | 'game-menu'\n | 'game-shell'\n | 'generic-app-template'\n | 'geometric-pattern'\n | 'gradient-divider'\n | 'graph-canvas'\n | 'graph-view'\n | 'grid'\n | 'header'\n | 'health-bar'\n | 'hero-organism'\n | 'hero-section'\n | 'hstack'\n | 'icon'\n | 'import-preview-tree'\n | 'import-progress'\n | 'import-source-picker'\n | 'infinite-scroll-sentinel'\n | 'input'\n | 'input-group'\n | 'install-box'\n | 'jazari-state-machine'\n | 'label'\n | 'landing-page-template'\n | 'law-reference-tooltip'\n | 'learning-canvas'\n | 'lightbox'\n | 'likert-scale'\n | 'line-chart'\n | 'loading-state'\n | 'map-view'\n | 'markdown-content'\n | 'marketing-footer'\n | 'marketing-stat-card'\n | 'master-detail'\n | 'master-detail-layout'\n | 'math-canvas'\n | 'matrix-question'\n | 'media-gallery'\n | 'menu'\n | 'meter'\n | 'modal'\n | 'modal-slot'\n | 'module-card'\n | 'navigation'\n | 'notification'\n | 'number-stepper'\n | 'option-constraint-group'\n | 'orbital-visualization'\n | 'overlay'\n | 'page-header'\n | 'page-transition'\n | 'pagination'\n | 'pattern-tile'\n | 'physics-canvas'\n | 'popover'\n | 'positioned-canvas'\n | 'presence'\n | 'pricing-card'\n | 'pricing-grid'\n | 'pricing-organism'\n | 'pricing-page-template'\n | 'progress-bar'\n | 'progress-dots'\n | 'pull-quote'\n | 'pull-to-refresh'\n | 'qr-scanner'\n | 'quiz-block'\n | 'radio'\n | 'range-slider'\n | 'reflection-block'\n | 'relation-select'\n | 'repeatable-form-section'\n | 'reply-tree'\n | 'rich-block-editor'\n | 'runtime-debugger'\n | 'scaled-diagram'\n | 'score-display'\n | 'search-input'\n | 'section'\n | 'section-header'\n | 'segment-renderer'\n | 'select'\n | 'sequence-bar'\n | 'service-catalog'\n | 'showcase-card'\n | 'showcase-organism'\n | 'side-panel'\n | 'sidebar'\n | 'signature-pad'\n | 'simple-grid'\n | 'skeleton'\n | 'social-proof'\n | 'sortable-list'\n | 'spacer'\n | 'sparkline'\n | 'spinner'\n | 'split'\n | 'split-pane'\n | 'split-section'\n | 'stack'\n | 'star-rating'\n | 'stat-badge'\n | 'stat-card'\n | 'stat-display'\n | 'state-graph'\n | 'state-json-view'\n | 'state-machine-view'\n | 'stats-grid'\n | 'stats-organism'\n | 'status-dot'\n | 'step-flow'\n | 'step-flow-organism'\n | 'subagent-trace-panel'\n | 'svg-branch'\n | 'svg-connection'\n | 'svg-flow'\n | 'svg-grid'\n | 'svg-lobe'\n | 'svg-mesh'\n | 'svg-morph'\n | 'svg-node'\n | 'svg-pulse'\n | 'svg-ring'\n | 'svg-shield'\n | 'svg-stack'\n | 'swipeable-row'\n | 'switch'\n | 'tabbed-container'\n | 'table-view'\n | 'tabs'\n | 'tag-cloud'\n | 'tag-input'\n | 'team-card'\n | 'team-organism'\n | 'text-highlight'\n | 'textarea'\n | 'theme-toggle'\n | 'time-slot-cell'\n | 'timeline'\n | 'timer-display'\n | 'toast-slot'\n | 'tooltip'\n | 'trait-frame'\n | 'trait-slot'\n | 'trend-indicator'\n | 'typewriter-text'\n | 'typography'\n | 'ui-slot-renderer'\n | 'upload-drop-zone'\n | 'version-diff'\n | 'violation-alert'\n | 'vote-stack'\n | 'vstack'\n | 'wizard-container'\n | 'wizard-navigation'\n | 'wizard-progress';\n\n/**\n * Pattern props map — each pattern type maps to its valid props interface.\n */\nexport interface PatternPropsMap {\n 'about-page-template': {\n type: 'about-page-template';\n entity: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'accordion': {\n type: 'accordion';\n items: unknown[] | string | SExpr;\n multiple?: boolean | string | SExpr;\n defaultOpenItems?: unknown[] | string | SExpr;\n defaultOpen?: unknown[] | string | SExpr;\n openItems?: unknown[] | string | SExpr;\n onItemToggle?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n toggleEvent?: string | SExpr;\n };\n 'action-palette': {\n type: 'action-palette';\n actions: unknown[] | string | SExpr;\n usedActionIds?: unknown[] | string | SExpr;\n allowDuplicates?: boolean | string | SExpr;\n categoryColors?: PatternPropValue | string | SExpr;\n size?: string | SExpr;\n label?: string | SExpr;\n className?: string | SExpr;\n };\n 'action-tile': {\n type: 'action-tile';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n action: PatternPropValue | string | SExpr;\n size?: string | SExpr;\n disabled?: boolean | string | SExpr;\n categoryColors?: PatternPropValue | string | SExpr;\n };\n 'activation-block': {\n type: 'activation-block';\n question: string | SExpr;\n savedResponse?: string | SExpr;\n saveEvent?: string | SExpr;\n className?: string | SExpr;\n };\n 'alert': {\n type: 'alert';\n children?: unknown | string | SExpr;\n message?: string | SExpr;\n variant?: string | SExpr;\n title?: string | SExpr;\n dismissible?: boolean | string | SExpr;\n onDismiss?: ((...args: unknown[]) => unknown) | string | SExpr;\n onClose?: ((...args: unknown[]) => unknown) | string | SExpr;\n actions?: unknown | string | SExpr;\n className?: string | SExpr;\n dismissEvent?: string | SExpr;\n };\n 'algorithm-canvas': {\n type: 'algorithm-canvas';\n className?: string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n title?: string | SExpr;\n backgroundColor?: string | SExpr;\n bars?: unknown[] | string | SExpr;\n cells?: unknown[] | string | SExpr;\n pointers?: unknown[] | string | SExpr;\n shapes?: unknown[] | string | SExpr;\n interactive?: boolean | string | SExpr;\n animate?: boolean | string | SExpr;\n onShapeClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n };\n 'animated-counter': {\n type: 'animated-counter';\n value: number | string | SExpr;\n duration?: number | string | SExpr;\n prefix?: string | SExpr;\n suffix?: string | SExpr;\n format?: string | SExpr;\n className?: string | SExpr;\n };\n 'animated-graphic': {\n type: 'animated-graphic';\n className?: string | SExpr;\n src?: unknown | string | SExpr;\n svgContent?: string | SExpr;\n animation?: string | SExpr;\n animate?: boolean | string | SExpr;\n duration?: number | string | SExpr;\n delay?: number | string | SExpr;\n easing?: string | SExpr;\n width?: string | number | SExpr;\n height?: string | number | SExpr;\n strokeColor?: string | SExpr;\n fillColor?: string | SExpr;\n alt?: string | SExpr;\n };\n 'animated-reveal': {\n type: 'animated-reveal';\n className?: string | SExpr;\n trigger?: string | SExpr;\n animation?: string | SExpr;\n duration?: number | string | SExpr;\n delay?: number | string | SExpr;\n threshold?: number | string | SExpr;\n once?: boolean | string | SExpr;\n animate?: boolean | string | SExpr;\n easing?: string | SExpr;\n children: unknown | ((...args: unknown[]) => unknown) | string | SExpr;\n };\n 'article-section': {\n type: 'article-section';\n title: string | SExpr;\n children: unknown | string | SExpr;\n maxWidth?: string | SExpr;\n className?: string | SExpr;\n };\n 'aside': {\n type: 'aside';\n className?: string | SExpr;\n children?: unknown | string | SExpr;\n };\n 'atlas-image': {\n type: 'atlas-image';\n asset?: PatternPropValue | string | SExpr;\n size?: number | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n fill?: boolean | string | SExpr;\n fit?: string | SExpr;\n alt?: string | SExpr;\n className?: string | SExpr;\n style?: PatternPropValue | string | SExpr;\n 'aria-hidden'?: boolean | string | SExpr;\n };\n 'atlas-panel': {\n type: 'atlas-panel';\n asset?: PatternPropValue | string | SExpr;\n borderSlice?: number | string | SExpr;\n borderWidth?: number | string | SExpr;\n mode?: string | SExpr;\n className?: string | SExpr;\n style?: PatternPropValue | string | SExpr;\n children?: unknown | string | SExpr;\n 'aria-hidden'?: boolean | string | SExpr;\n };\n 'auth-layout': {\n type: 'auth-layout';\n appName?: string | SExpr;\n logo?: unknown | string | SExpr;\n backgroundImage?: unknown | string | SExpr;\n showBranding?: boolean | string | SExpr;\n brandingContent?: unknown | string | SExpr;\n };\n 'avatar': {\n type: 'avatar';\n src?: unknown | string | SExpr;\n alt?: string | SExpr;\n name?: string | SExpr;\n initials?: string | SExpr;\n icon?: unknown | string | SExpr;\n size?: string | SExpr;\n status?: string | SExpr;\n badge?: string | number | SExpr;\n className?: string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n action?: string | SExpr;\n actionPayload?: PatternPropValue | string | SExpr;\n };\n 'badge': {\n type: 'badge';\n className?: string | SExpr;\n variant?: string | SExpr;\n size?: string | SExpr;\n amount?: number | string | SExpr;\n label?: string | number | SExpr;\n icon?: unknown | string | SExpr;\n iconAsset?: PatternPropValue | string | SExpr;\n onRemove?: ((...args: unknown[]) => unknown) | string | SExpr;\n removeLabel?: string | SExpr;\n };\n 'behavior-view': {\n type: 'behavior-view';\n data: PatternPropValue | string | SExpr;\n };\n 'biology-canvas': {\n type: 'biology-canvas';\n className?: string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n title?: string | SExpr;\n backgroundColor?: string | SExpr;\n nodes?: unknown[] | string | SExpr;\n edges?: unknown[] | string | SExpr;\n shapes?: unknown[] | string | SExpr;\n interactive?: boolean | string | SExpr;\n animate?: boolean | string | SExpr;\n onShapeClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n };\n 'bloom-quiz-block': {\n type: 'bloom-quiz-block';\n level: string | SExpr;\n question: string | SExpr;\n answer: string | SExpr;\n index?: number | string | SExpr;\n isAnswered?: boolean | string | SExpr;\n answerEvent?: string | SExpr;\n className?: string | SExpr;\n };\n 'book-chapter-view': {\n type: 'book-chapter-view';\n className?: string | SExpr;\n chapter: PatternPropValue | string | SExpr;\n orbitalSchema?: PatternPropValue | string | SExpr;\n direction?: string | SExpr;\n };\n 'book-cover-page': {\n type: 'book-cover-page';\n className?: string | SExpr;\n title: string | SExpr;\n subtitle?: string | SExpr;\n author?: string | SExpr;\n coverImageUrl?: unknown | string | SExpr;\n direction?: string | SExpr;\n };\n 'book-nav-bar': {\n type: 'book-nav-bar';\n className?: string | SExpr;\n currentPage: number | string | SExpr;\n totalPages: number | string | SExpr;\n chapterTitle?: string | SExpr;\n direction?: string | SExpr;\n };\n 'book-table-of-contents': {\n type: 'book-table-of-contents';\n className?: string | SExpr;\n parts: PatternPropValue | unknown[] | string | SExpr;\n currentChapterId?: string | SExpr;\n direction?: string | SExpr;\n };\n 'book-viewer': {\n type: 'book-viewer';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n initialPage?: number | string | SExpr;\n fieldMap?: PatternPropValue | string | SExpr;\n };\n 'box': {\n type: 'box';\n className?: string | SExpr;\n 'data-theme'?: string | SExpr;\n padding?: string | SExpr;\n paddingX?: string | SExpr;\n paddingY?: string | SExpr;\n margin?: string | SExpr;\n marginX?: string | SExpr;\n marginY?: string | SExpr;\n bg?: string | SExpr;\n border?: boolean | string | SExpr;\n rounded?: string | SExpr;\n shadow?: string | SExpr;\n display?: string | SExpr;\n fullWidth?: boolean | string | SExpr;\n fullHeight?: boolean | string | SExpr;\n overflow?: string | SExpr;\n position?: string | SExpr;\n as?: unknown | string | SExpr;\n action?: string | SExpr;\n actionPayload?: PatternPropValue | string | SExpr;\n hoverEvent?: string | SExpr;\n tapReveal?: boolean | string | SExpr;\n maxWidth?: string | SExpr;\n children?: unknown | string | SExpr;\n };\n 'branching-logic-builder': {\n type: 'branching-logic-builder';\n questions: unknown[] | PatternPropValue | string | SExpr;\n rules: unknown[] | PatternPropValue | string | SExpr;\n onRulesChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n rulesChangeEvent?: string | SExpr;\n readOnly?: boolean | string | SExpr;\n className?: string | SExpr;\n };\n 'breadcrumb': {\n type: 'breadcrumb';\n items: unknown[] | string | SExpr;\n separator?: unknown | string | SExpr;\n maxItems?: number | string | SExpr;\n className?: string | SExpr;\n };\n 'button': {\n type: 'button';\n className?: string | SExpr;\n variant?: string | SExpr;\n size?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n leftIcon?: unknown | string | SExpr;\n rightIcon?: unknown | string | SExpr;\n icon?: unknown | string | SExpr;\n iconRight?: unknown | string | SExpr;\n iconAsset?: PatternPropValue | string | SExpr;\n action?: string | SExpr;\n actionPayload?: PatternPropValue | string | SExpr;\n label?: string | SExpr;\n disabled?: boolean | string | SExpr;\n 'data-testid'?: string | SExpr;\n };\n 'calendar-grid': {\n type: 'calendar-grid';\n weekStart?: unknown | string | SExpr;\n timeSlots?: unknown[] | string | SExpr;\n events?: PatternPropValue | unknown[] | string | SExpr;\n onSlotClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onDayClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onEventClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n longPressEvent?: string | SExpr;\n longPressPayload?: PatternPropValue | string | SExpr;\n swipeLeftEvent?: string | SExpr;\n swipeRightEvent?: string | SExpr;\n dayWindow?: number | string | SExpr;\n titleField?: string | SExpr;\n startField?: string | SExpr;\n colorField?: string | SExpr;\n children?: ((...args: unknown[]) => unknown) | string | SExpr;\n renderItem?: ((...args: unknown[]) => unknown) | string | SExpr;\n };\n 'canvas': {\n type: 'canvas';\n mode?: string | SExpr;\n drawables?: unknown[] | string | SExpr;\n camera?: PatternPropValue | string | SExpr;\n projection?: string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n unitScale?: number | string | SExpr;\n showMinimap?: boolean | string | SExpr;\n fit?: boolean | string | SExpr;\n tileWidth?: number | string | SExpr;\n backgroundImage?: unknown | PatternPropValue | string | SExpr;\n backgroundColor?: string | SExpr;\n worldWidth?: number | string | SExpr;\n worldHeight?: number | string | SExpr;\n pixelsPerUnit?: number | string | SExpr;\n showGrid?: boolean | string | SExpr;\n shadows?: boolean | string | SExpr;\n showCoordinates?: boolean | string | SExpr;\n showTileInfo?: boolean | string | SExpr;\n fogOfWar?: unknown[] | string | SExpr;\n tileClickEvent?: string | SExpr;\n unitClickEvent?: string | SExpr;\n tileHoverEvent?: string | SExpr;\n tileLeaveEvent?: string | SExpr;\n featureClickEvent?: string | SExpr;\n keyMap?: PatternPropValue | string | SExpr;\n keyUpMap?: PatternPropValue | string | SExpr;\n children?: unknown | string | SExpr;\n };\n 'canvas-2d': {\n type: 'canvas-2d';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n projection?: string | SExpr;\n drawables?: unknown[] | string | SExpr;\n backgroundImage?: unknown | PatternPropValue | string | SExpr;\n tileClickEvent?: string | SExpr;\n unitClickEvent?: string | SExpr;\n tileHoverEvent?: string | SExpr;\n tileLeaveEvent?: string | SExpr;\n keyMap?: PatternPropValue | string | SExpr;\n keyUpMap?: PatternPropValue | string | SExpr;\n camera?: string | SExpr;\n scale?: number | string | SExpr;\n tileWidth?: number | string | SExpr;\n fit?: boolean | string | SExpr;\n showMinimap?: boolean | string | SExpr;\n followTarget?: PatternPropValue | string | SExpr;\n cameraPos?: PatternPropValue | string | SExpr;\n bgColor?: string | SExpr;\n children?: unknown | string | SExpr;\n };\n 'card': {\n type: 'card';\n className?: string | SExpr;\n variant?: string | SExpr;\n padding?: string | SExpr;\n title?: string | SExpr;\n subtitle?: string | SExpr;\n shadow?: string | SExpr;\n look?: string | SExpr;\n children?: unknown | string | SExpr;\n action?: string | SExpr;\n loading?: boolean | string | SExpr;\n };\n 'carousel': {\n type: 'carousel';\n items: unknown[] | string | SExpr;\n renderItem?: ((...args: unknown[]) => unknown) | string | SExpr;\n children?: ((...args: unknown[]) => unknown) | string | SExpr;\n autoPlay?: boolean | string | SExpr;\n autoPlayInterval?: number | string | SExpr;\n showDots?: boolean | string | SExpr;\n showArrows?: boolean | string | SExpr;\n loop?: boolean | string | SExpr;\n slideChangeEvent?: string | SExpr;\n slideChangePayload?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'case-study-card': {\n type: 'case-study-card';\n title: string | SExpr;\n description: string | SExpr;\n category: string | SExpr;\n categoryColor?: string | SExpr;\n href: string | SExpr;\n linkLabel?: string | SExpr;\n className?: string | SExpr;\n };\n 'case-study-organism': {\n type: 'case-study-organism';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n heading?: string | SExpr;\n subtitle?: string | SExpr;\n };\n 'center': {\n type: 'center';\n inline?: boolean | string | SExpr;\n horizontal?: boolean | string | SExpr;\n vertical?: boolean | string | SExpr;\n minHeight?: string | number | SExpr;\n fullHeight?: boolean | string | SExpr;\n fullWidth?: boolean | string | SExpr;\n className?: string | SExpr;\n style?: PatternPropValue | string | SExpr;\n children: unknown | string | SExpr;\n as?: unknown | string | SExpr;\n };\n 'chart': {\n type: 'chart';\n title?: string | SExpr;\n subtitle?: string | SExpr;\n chartType?: string | SExpr;\n look?: string | SExpr;\n series?: unknown[] | string | SExpr;\n data?: unknown[] | string | SExpr;\n scatterData?: unknown[] | string | SExpr;\n height?: number | string | SExpr;\n showLegend?: boolean | string | SExpr;\n showValues?: boolean | string | SExpr;\n stack?: string | SExpr;\n timeAxis?: boolean | string | SExpr;\n drillEvent?: string | SExpr;\n actions?: unknown[] | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'chart-legend': {\n type: 'chart-legend';\n items: unknown[] | string | SExpr;\n className?: string | SExpr;\n direction?: string | SExpr;\n };\n 'chat-bar': {\n type: 'chat-bar';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n status?: string | SExpr;\n activeGate?: string | SExpr;\n jepaValidity?: number | string | SExpr;\n placeholder?: string | SExpr;\n context?: string | SExpr;\n };\n 'checkbox': {\n type: 'checkbox';\n className?: string | SExpr;\n checked?: boolean | string | SExpr;\n defaultChecked?: boolean | string | SExpr;\n label?: string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n };\n 'chemistry-canvas': {\n type: 'chemistry-canvas';\n className?: string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n title?: string | SExpr;\n backgroundColor?: string | SExpr;\n atoms?: unknown[] | string | SExpr;\n bonds?: unknown[] | string | SExpr;\n arrows?: unknown[] | string | SExpr;\n shapes?: unknown[] | string | SExpr;\n interactive?: boolean | string | SExpr;\n animate?: boolean | string | SExpr;\n onShapeClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n };\n 'choice-button': {\n type: 'choice-button';\n text: string | SExpr;\n index?: number | string | SExpr;\n assetUrl?: PatternPropValue | string | SExpr;\n icon?: unknown | string | SExpr;\n disabled?: boolean | string | SExpr;\n selected?: boolean | string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n action?: string | SExpr;\n payload?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'code-block': {\n type: 'code-block';\n code?: string | SExpr;\n language?: string | SExpr;\n showCopyButton?: boolean | string | SExpr;\n showLanguageBadge?: boolean | string | SExpr;\n maxHeight?: string | number | SExpr;\n foldable?: boolean | string | SExpr;\n className?: string | SExpr;\n editable?: boolean | string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n errorLines?: PatternPropValue | string | SExpr;\n title?: string | SExpr;\n mode?: string | SExpr;\n diff?: unknown[] | string | SExpr;\n oldValue?: string | SExpr;\n newValue?: string | SExpr;\n showLineNumbers?: boolean | string | SExpr;\n wordWrap?: boolean | string | SExpr;\n files?: unknown[] | string | SExpr;\n actions?: unknown[] | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n showCopy?: boolean | string | SExpr;\n };\n 'code-runner-panel': {\n type: 'code-runner-panel';\n code: string | SExpr;\n language: string | SExpr;\n runnable?: boolean | string | SExpr;\n onRun?: ((...args: unknown[]) => unknown) | string | SExpr;\n runEvent?: string | SExpr;\n className?: string | SExpr;\n };\n 'community-links': {\n type: 'community-links';\n github?: PatternPropValue | string | SExpr;\n discord?: PatternPropValue | string | SExpr;\n twitter?: PatternPropValue | string | SExpr;\n heading?: string | SExpr;\n subtitle?: string | SExpr;\n className?: string | SExpr;\n };\n 'conditional-wrapper': {\n type: 'conditional-wrapper';\n condition?: unknown | string | SExpr;\n context: PatternPropValue | string | SExpr;\n children: unknown | string | SExpr;\n fallback?: unknown | string | SExpr;\n animate?: boolean | string | SExpr;\n };\n 'confetti-effect': {\n type: 'confetti-effect';\n trigger: boolean | string | SExpr;\n duration?: number | string | SExpr;\n particleCount?: number | string | SExpr;\n className?: string | SExpr;\n };\n 'confirm-dialog': {\n type: 'confirm-dialog';\n isOpen?: boolean | string | SExpr;\n onClose?: ((...args: unknown[]) => unknown) | string | SExpr;\n onConfirm?: ((...args: unknown[]) => unknown) | string | SExpr;\n title: string | SExpr;\n message?: string | unknown | SExpr;\n description?: string | unknown | SExpr;\n confirmText?: string | SExpr;\n confirmLabel?: string | SExpr;\n cancelText?: string | SExpr;\n cancelLabel?: string | SExpr;\n variant?: string | SExpr;\n size?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'connection-block': {\n type: 'connection-block';\n content: string | SExpr;\n className?: string | SExpr;\n };\n 'container': {\n type: 'container';\n size?: string | SExpr;\n maxWidth?: string | SExpr;\n padding?: string | SExpr;\n center?: boolean | string | SExpr;\n className?: string | SExpr;\n children?: unknown | string | SExpr;\n as?: unknown | string | SExpr;\n };\n 'content-renderer': {\n type: 'content-renderer';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n content?: string | SExpr;\n segments?: unknown[] | string | SExpr;\n direction?: string | SExpr;\n };\n 'content-section': {\n type: 'content-section';\n children: unknown | string | SExpr;\n background?: string | SExpr;\n padding?: string | SExpr;\n id?: string | SExpr;\n className?: string | SExpr;\n };\n 'control-button': {\n type: 'control-button';\n assetUrl?: PatternPropValue | string | SExpr;\n label?: string | SExpr;\n icon?: unknown | string | SExpr;\n size?: string | SExpr;\n shape?: string | SExpr;\n variant?: string | SExpr;\n onPress?: ((...args: unknown[]) => unknown) | string | SExpr;\n onRelease?: ((...args: unknown[]) => unknown) | string | SExpr;\n pressEvent?: string | SExpr;\n releaseEvent?: string | SExpr;\n pressed?: boolean | string | SExpr;\n disabled?: boolean | string | SExpr;\n className?: string | SExpr;\n };\n 'control-grid': {\n type: 'control-grid';\n kind: string | SExpr;\n buttons?: unknown[] | string | SExpr;\n layout?: string | SExpr;\n includeDiagonals?: boolean | string | SExpr;\n onAction?: ((...args: unknown[]) => unknown) | string | SExpr;\n actionEvent?: string | SExpr;\n onDirection?: ((...args: unknown[]) => unknown) | string | SExpr;\n directionEvent?: string | SExpr;\n directionEvents?: PatternPropValue | string | SExpr;\n directionReleaseEvents?: PatternPropValue | string | SExpr;\n directionAssets?: PatternPropValue | string | SExpr;\n size?: string | SExpr;\n disabled?: boolean | string | SExpr;\n className?: string | SExpr;\n };\n 'counter-template': {\n type: 'counter-template';\n entity: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n onIncrement?: ((...args: unknown[]) => unknown) | string | SExpr;\n onDecrement?: ((...args: unknown[]) => unknown) | string | SExpr;\n onReset?: ((...args: unknown[]) => unknown) | string | SExpr;\n incrementEvent?: string | SExpr;\n decrementEvent?: string | SExpr;\n resetEvent?: string | SExpr;\n title?: string | SExpr;\n showReset?: boolean | string | SExpr;\n size?: string | SExpr;\n variant?: string | SExpr;\n };\n 'cta-banner': {\n type: 'cta-banner';\n title: string | SExpr;\n subtitle?: string | SExpr;\n primaryAction?: PatternPropValue | string | SExpr;\n secondaryAction?: PatternPropValue | string | SExpr;\n background?: string | SExpr;\n align?: string | SExpr;\n className?: string | SExpr;\n };\n 'dashboard-grid': {\n type: 'dashboard-grid';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n columns?: number | string | SExpr;\n gap?: string | SExpr;\n cells: unknown[] | string | SExpr;\n };\n 'dashboard-layout': {\n type: 'dashboard-layout';\n appName?: string | SExpr;\n logo?: unknown | string | SExpr;\n navItems?: unknown[] | string | SExpr;\n user?: PatternPropValue | string | SExpr;\n headerActions?: unknown | string | SExpr;\n showSearch?: boolean | string | SExpr;\n searchEvent?: string | SExpr;\n onSearchSubmit?: ((...args: unknown[]) => unknown) | string | SExpr;\n topBarActions?: unknown[] | string | SExpr;\n notifications?: unknown[] | string | SExpr;\n notificationClickEvent?: string | SExpr;\n onNotificationClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n showThemeToggle?: boolean | string | SExpr;\n sidebarFooter?: unknown | string | SExpr;\n currentPath?: string | SExpr;\n onSignOut?: ((...args: unknown[]) => unknown) | string | SExpr;\n layoutMode?: string | SExpr;\n children?: unknown | string | SExpr;\n };\n 'data-grid': {\n type: 'data-grid';\n dragGroup?: string | SExpr;\n accepts?: string | SExpr;\n sortable?: boolean | string | SExpr;\n dropEvent?: string | SExpr;\n reorderEvent?: string | SExpr;\n positionEvent?: string | SExpr;\n dndItemIdField?: string | SExpr;\n dndRoot?: boolean | string | SExpr;\n entity: PatternPropValue | unknown[] | string | SExpr;\n fields?: unknown[] | string | SExpr;\n columns?: unknown[] | string | SExpr;\n itemActions?: unknown[] | string | SExpr;\n maxInlineActions?: number | string | SExpr;\n scrollX?: boolean | string | SExpr;\n cols?: number | string | SExpr;\n gap?: string | SExpr;\n minCardWidth?: number | string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n imageField?: string | SExpr;\n selectable?: boolean | string | SExpr;\n selectionEvent?: string | SExpr;\n infiniteScroll?: boolean | string | SExpr;\n loadMoreEvent?: string | SExpr;\n hasMore?: boolean | string | SExpr;\n children?: ((...args: unknown[]) => unknown) | string | SExpr;\n renderItem?: ((...args: unknown[]) => unknown) | string | SExpr;\n pageSize?: number | string | SExpr;\n look?: string | SExpr;\n };\n 'data-list': {\n type: 'data-list';\n dragGroup?: string | SExpr;\n accepts?: string | SExpr;\n sortable?: boolean | string | SExpr;\n dropEvent?: string | SExpr;\n reorderEvent?: string | SExpr;\n positionEvent?: string | SExpr;\n dndItemIdField?: string | SExpr;\n dndRoot?: boolean | string | SExpr;\n entity: PatternPropValue | unknown[] | string | SExpr;\n fields?: unknown[] | string | SExpr;\n columns?: unknown[] | string | SExpr;\n itemActions?: unknown[] | string | SExpr;\n maxInlineActions?: number | string | SExpr;\n itemClickEvent?: string | SExpr;\n gap?: string | SExpr;\n variant?: string | SExpr;\n groupBy?: string | SExpr;\n senderField?: string | SExpr;\n senderLabelField?: string | SExpr;\n currentUser?: string | SExpr;\n emptyMessage?: string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n reorderable?: boolean | string | SExpr;\n swipeLeftEvent?: string | SExpr;\n swipeLeftActions?: unknown[] | string | SExpr;\n swipeRightEvent?: string | SExpr;\n swipeRightActions?: unknown[] | string | SExpr;\n longPressEvent?: string | SExpr;\n infiniteScroll?: boolean | string | SExpr;\n loadMoreEvent?: string | SExpr;\n hasMore?: boolean | string | SExpr;\n children?: ((...args: unknown[]) => unknown) | string | SExpr;\n renderItem?: ((...args: unknown[]) => unknown) | string | SExpr;\n pageSize?: number | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n look?: string | SExpr;\n };\n 'date-range-picker': {\n type: 'date-range-picker';\n from?: string | SExpr;\n to?: string | SExpr;\n event?: string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n presets?: unknown[] | string | SExpr;\n fromLabel?: string | SExpr;\n toLabel?: string | SExpr;\n className?: string | SExpr;\n };\n 'date-range-selector': {\n type: 'date-range-selector';\n options?: unknown[] | string | SExpr;\n selected?: string | SExpr;\n onSelect?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n };\n 'day-cell': {\n type: 'day-cell';\n date?: unknown | string | SExpr;\n isToday?: boolean | string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n };\n 'detail-panel': {\n type: 'detail-panel';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | string | SExpr;\n title?: string | SExpr;\n subtitle?: string | SExpr;\n status?: PatternPropValue | string | SExpr;\n avatar?: unknown | string | SExpr;\n sections?: unknown[] | string | SExpr;\n actions?: unknown[] | string | SExpr;\n footer?: unknown | string | SExpr;\n slideOver?: boolean | string | SExpr;\n fields: unknown[] | string | SExpr;\n fieldNames?: unknown[] | string | SExpr;\n initialData?: PatternPropValue | string | SExpr;\n mode?: string | SExpr;\n position?: string | SExpr;\n width?: string | SExpr;\n displayFields?: unknown[] | string | SExpr;\n showActions?: boolean | string | SExpr;\n };\n 'dialog': {\n type: 'dialog';\n className?: string | SExpr;\n children?: unknown | string | SExpr;\n };\n 'dialogue-bubble': {\n type: 'dialogue-bubble';\n speaker?: string | SExpr;\n text: string | SExpr;\n portrait?: PatternPropValue | string | SExpr;\n position?: string | SExpr;\n mood?: string | SExpr;\n revealedChars?: number | string | SExpr;\n className?: string | SExpr;\n };\n 'divider': {\n type: 'divider';\n orientation?: string | SExpr;\n label?: string | SExpr;\n variant?: string | SExpr;\n className?: string | SExpr;\n };\n 'doc-breadcrumb': {\n type: 'doc-breadcrumb';\n items: unknown[] | string | SExpr;\n className?: string | SExpr;\n };\n 'doc-pagination': {\n type: 'doc-pagination';\n prev?: PatternPropValue | string | SExpr;\n next?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'doc-search': {\n type: 'doc-search';\n placeholder?: string | SExpr;\n onSearch?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n };\n 'doc-sidebar': {\n type: 'doc-sidebar';\n items: unknown[] | string | SExpr;\n className?: string | SExpr;\n };\n 'doc-toc': {\n type: 'doc-toc';\n items: unknown[] | string | SExpr;\n activeId?: string | SExpr;\n className?: string | SExpr;\n };\n 'document-viewer': {\n type: 'document-viewer';\n title?: string | SExpr;\n src?: unknown | string | SExpr;\n content?: string | SExpr;\n documentType?: string | SExpr;\n currentPage?: number | string | SExpr;\n totalPages?: number | string | SExpr;\n height?: number | string | SExpr;\n showToolbar?: boolean | string | SExpr;\n showDownload?: boolean | string | SExpr;\n showPrint?: boolean | string | SExpr;\n actions?: unknown[] | string | SExpr;\n documents?: unknown[] | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'draw-group': {\n type: 'draw-group';\n id?: string | SExpr;\n position: PatternPropValue | string | SExpr;\n scale?: number | string | SExpr;\n rotate?: number | string | SExpr;\n opacity?: number | string | SExpr;\n items: unknown[] | string | SExpr;\n };\n 'draw-shape': {\n type: 'draw-shape';\n id?: string | SExpr;\n shape: string | SExpr;\n position: PatternPropValue | string | SExpr;\n anchor?: PatternPropValue | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n radiusX?: number | string | SExpr;\n radiusY?: number | string | SExpr;\n offsetX?: number | string | SExpr;\n offsetY?: number | string | SExpr;\n points?: unknown[] | string | SExpr;\n d?: string | SExpr;\n fill?: string | SExpr;\n gradient?: PatternPropValue | string | SExpr;\n stroke?: string | SExpr;\n strokeWidth?: number | string | SExpr;\n rotate?: number | string | SExpr;\n pivot?: PatternPropValue | string | SExpr;\n shadow?: PatternPropValue | string | SExpr;\n animation?: PatternPropValue | string | SExpr;\n opacity?: number | string | SExpr;\n };\n 'draw-shape-layer': {\n type: 'draw-shape-layer';\n id?: string | SExpr;\n items: unknown[] | string | SExpr;\n };\n 'draw-sprite': {\n type: 'draw-sprite';\n id?: string | SExpr;\n position: PatternPropValue | string | SExpr;\n asset: PatternPropValue | string | SExpr;\n anchor?: PatternPropValue | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n frame?: PatternPropValue | string | SExpr;\n animation?: string | SExpr;\n flipX?: boolean | string | SExpr;\n rotation?: number | string | SExpr;\n opacity?: number | string | SExpr;\n shadow?: PatternPropValue | string | SExpr;\n };\n 'draw-sprite-layer': {\n type: 'draw-sprite-layer';\n id?: string | SExpr;\n items: unknown[] | string | SExpr;\n };\n 'draw-text': {\n type: 'draw-text';\n id?: string | SExpr;\n text: string | SExpr;\n position: PatternPropValue | string | SExpr;\n anchor?: PatternPropValue | string | SExpr;\n offsetX?: number | string | SExpr;\n offsetY?: number | string | SExpr;\n color: string | SExpr;\n font?: string | SExpr;\n align?: PatternPropValue | string | SExpr;\n baseline?: PatternPropValue | string | SExpr;\n opacity?: number | string | SExpr;\n };\n 'draw-text-layer': {\n type: 'draw-text-layer';\n id?: string | SExpr;\n items: unknown[] | string | SExpr;\n };\n 'drawer': {\n type: 'drawer';\n isOpen?: boolean | string | SExpr;\n onClose?: ((...args: unknown[]) => unknown) | string | SExpr;\n title?: unknown | string | SExpr;\n children?: unknown | string | SExpr;\n footer?: unknown | string | SExpr;\n position?: string | SExpr;\n width?: string | SExpr;\n showCloseButton?: boolean | string | SExpr;\n closeOnOverlayClick?: boolean | string | SExpr;\n closeOnEscape?: boolean | string | SExpr;\n className?: string | SExpr;\n closeEvent?: string | SExpr;\n };\n 'drawer-slot': {\n type: 'drawer-slot';\n children?: unknown | string | SExpr;\n title?: string | SExpr;\n position?: string | SExpr;\n size?: string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n entity?: string | SExpr;\n sourceTrait?: string | SExpr;\n };\n 'edge-decoration': {\n type: 'edge-decoration';\n variant?: string | SExpr;\n side?: string | SExpr;\n opacity?: number | string | SExpr;\n color?: string | SExpr;\n strokeWidth?: number | string | SExpr;\n width?: number | string | SExpr;\n className?: string | SExpr;\n };\n 'emoji-picker': {\n type: 'emoji-picker';\n pickEvent?: string | SExpr;\n position?: string | SExpr;\n triggerIcon?: unknown | string | SExpr;\n triggerLabel?: string | SExpr;\n className?: string | SExpr;\n };\n 'empty-state': {\n type: 'empty-state';\n icon?: unknown | string | SExpr;\n title?: string | SExpr;\n message?: string | SExpr;\n description?: string | SExpr;\n actionLabel?: string | SExpr;\n onAction?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n destructive?: boolean | string | SExpr;\n variant?: string | SExpr;\n actionEvent?: string | SExpr;\n look?: string | SExpr;\n };\n 'entity-cards': {\n type: 'entity-cards';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n minCardWidth?: number | string | SExpr;\n maxCols?: number | string | SExpr;\n gap?: string | SExpr;\n alignItems?: string | SExpr;\n children?: unknown | string | SExpr;\n fields: unknown[] | string | SExpr;\n fieldNames?: unknown[] | string | SExpr;\n columns?: unknown[] | string | SExpr;\n itemActions?: unknown[] | string | SExpr;\n showTotal?: boolean | string | SExpr;\n showAvatar?: boolean | string | SExpr;\n variant?: string | SExpr;\n imageField?: string | SExpr;\n };\n 'entity-list': {\n type: 'entity-list';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n entityType?: string | SExpr;\n selectable?: boolean | string | SExpr;\n itemActions?: ((...args: unknown[]) => unknown) | unknown[] | string | SExpr;\n showDividers?: boolean | string | SExpr;\n variant?: string | SExpr;\n emptyMessage?: string | SExpr;\n renderItem?: ((...args: unknown[]) => unknown) | string | SExpr;\n children?: unknown | string | SExpr;\n fields: unknown[] | string | SExpr;\n fieldNames?: unknown[] | string | SExpr;\n };\n 'entity-table': {\n type: 'entity-table';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n fields: unknown[] | string | SExpr;\n columns?: unknown[] | string | SExpr;\n itemActions?: unknown[] | string | SExpr;\n emptyIcon?: unknown | string | SExpr;\n emptyTitle?: string | SExpr;\n emptyDescription?: string | SExpr;\n emptyAction?: PatternPropValue | string | SExpr;\n selectable?: boolean | string | SExpr;\n searchable?: boolean | string | SExpr;\n searchPlaceholder?: string | SExpr;\n rowActions?: unknown[] | string | SExpr;\n bulkActions?: unknown[] | string | SExpr;\n headerActions?: unknown | string | SExpr;\n showTotal?: boolean | string | SExpr;\n look?: string | SExpr;\n };\n 'error-boundary': {\n type: 'error-boundary';\n children: unknown | string | SExpr;\n fallback?: unknown | ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n onError?: ((...args: unknown[]) => unknown) | string | SExpr;\n };\n 'error-state': {\n type: 'error-state';\n title?: string | SExpr;\n message?: string | SExpr;\n description?: string | SExpr;\n onRetry?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n retryEvent?: string | SExpr;\n };\n 'feature-card': {\n type: 'feature-card';\n icon?: unknown | string | SExpr;\n title: string | SExpr;\n description: string | SExpr;\n href?: string | SExpr;\n linkLabel?: string | SExpr;\n variant?: string | SExpr;\n size?: string | SExpr;\n className?: string | SExpr;\n };\n 'feature-detail-page-template': {\n type: 'feature-detail-page-template';\n entity: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'feature-grid': {\n type: 'feature-grid';\n items: unknown[] | string | SExpr;\n columns?: number | string | SExpr;\n gap?: string | SExpr;\n className?: string | SExpr;\n };\n 'feature-grid-organism': {\n type: 'feature-grid-organism';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n columns?: number | string | SExpr;\n heading?: string | SExpr;\n subtitle?: string | SExpr;\n };\n 'file-tree': {\n type: 'file-tree';\n tree: unknown[] | string | SExpr;\n selectedPath?: string | SExpr;\n onFileSelect?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n indent?: number | string | SExpr;\n };\n 'filter-group': {\n type: 'filter-group';\n entity: string | SExpr;\n filters: unknown[] | string | SExpr;\n onFilterChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n onClearAll?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n variant?: string | SExpr;\n showIcon?: boolean | string | SExpr;\n query?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n look?: string | SExpr;\n event?: string | SExpr;\n clearEvent?: string | SExpr;\n };\n 'filter-pill': {\n type: 'filter-pill';\n className?: string | SExpr;\n variant?: string | SExpr;\n size?: string | SExpr;\n label?: string | number | SExpr;\n icon?: unknown | string | SExpr;\n onRemove?: ((...args: unknown[]) => unknown) | string | SExpr;\n removable?: boolean | string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n clickEvent?: string | SExpr;\n removeEvent?: string | SExpr;\n };\n 'flex': {\n type: 'flex';\n direction?: string | SExpr;\n wrap?: string | SExpr;\n align?: string | SExpr;\n justify?: string | SExpr;\n gap?: string | SExpr;\n inline?: boolean | string | SExpr;\n grow?: boolean | number | string | SExpr;\n shrink?: boolean | number | string | SExpr;\n basis?: string | number | SExpr;\n className?: string | SExpr;\n children: unknown | string | SExpr;\n as?: unknown | string | SExpr;\n };\n 'flip-card': {\n type: 'flip-card';\n front: unknown | string | SExpr;\n back: unknown | string | SExpr;\n flipped?: boolean | string | SExpr;\n onFlip?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n height?: string | SExpr;\n };\n 'flip-container': {\n type: 'flip-container';\n flipped: boolean | string | SExpr;\n className?: string | SExpr;\n children: unknown | string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n };\n 'floating-action-button': {\n type: 'floating-action-button';\n action?: string | SExpr;\n actionPayload?: PatternPropValue | string | SExpr;\n actions?: unknown[] | string | SExpr;\n icon?: unknown | string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n variant?: string | SExpr;\n label?: string | SExpr;\n position?: string | SExpr;\n className?: string | SExpr;\n };\n 'form': {\n type: 'form';\n children?: unknown | string | SExpr;\n onSubmit?: string | SExpr;\n onCancel?: string | SExpr;\n layout?: string | SExpr;\n gap?: string | SExpr;\n className?: string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n mode?: string | SExpr;\n fields: unknown[] | string | SExpr;\n initialData?: PatternPropValue | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n submitLabel?: string | SExpr;\n cancelLabel?: string | SExpr;\n showCancel?: boolean | string | SExpr;\n showSubmit?: boolean | string | SExpr;\n title?: string | SExpr;\n submitEvent?: string | SExpr;\n cancelEvent?: string | SExpr;\n relationsData?: PatternPropValue | string | SExpr;\n relationsLoading?: PatternPropValue | string | SExpr;\n conditionalFields?: PatternPropValue | boolean | string | SExpr;\n hiddenCalculations?: unknown[] | boolean | string | SExpr;\n violationTriggers?: unknown[] | boolean | string | SExpr;\n evaluationContext?: PatternPropValue | string | SExpr;\n sections?: unknown[] | string | SExpr;\n onFieldChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n configPath?: string | SExpr;\n repeatable?: boolean | string | SExpr;\n };\n 'form-actions': {\n type: 'form-actions';\n children?: unknown | string | SExpr;\n primary?: PatternPropValue | string | SExpr;\n secondary?: unknown[] | string | SExpr;\n variant?: string | SExpr;\n orientation?: string | SExpr;\n className?: string | SExpr;\n entity?: string | SExpr;\n filters?: unknown[] | string | SExpr;\n look?: string | SExpr;\n };\n 'form-field': {\n type: 'form-field';\n label: string | SExpr;\n required?: boolean | string | SExpr;\n error?: string | SExpr;\n hint?: string | SExpr;\n className?: string | SExpr;\n children: unknown | string | SExpr;\n };\n 'form-layout': {\n type: 'form-layout';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n children: unknown | string | SExpr;\n dividers?: boolean | string | SExpr;\n };\n 'form-section': {\n type: 'form-section';\n children?: unknown | string | SExpr;\n onSubmit?: string | SExpr;\n onCancel?: string | SExpr;\n layout?: string | SExpr;\n gap?: string | SExpr;\n className?: string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n mode?: string | SExpr;\n fields: unknown[] | string | SExpr;\n initialData?: PatternPropValue | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n submitLabel?: string | SExpr;\n cancelLabel?: string | SExpr;\n showCancel?: boolean | string | SExpr;\n showSubmit?: boolean | string | SExpr;\n title?: string | SExpr;\n submitEvent?: string | SExpr;\n cancelEvent?: string | SExpr;\n relationsData?: PatternPropValue | string | SExpr;\n relationsLoading?: PatternPropValue | string | SExpr;\n conditionalFields?: PatternPropValue | boolean | string | SExpr;\n hiddenCalculations?: unknown[] | boolean | string | SExpr;\n violationTriggers?: unknown[] | boolean | string | SExpr;\n evaluationContext?: PatternPropValue | string | SExpr;\n sections?: unknown[] | string | SExpr;\n onFieldChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n configPath?: string | SExpr;\n repeatable?: boolean | string | SExpr;\n };\n 'form-section-header': {\n type: 'form-section-header';\n title: string | SExpr;\n subtitle?: string | SExpr;\n isCollapsed?: boolean | string | SExpr;\n onToggle?: ((...args: unknown[]) => unknown) | string | SExpr;\n badge?: string | SExpr;\n badgeVariant?: string | SExpr;\n icon?: unknown | string | SExpr;\n hasErrors?: boolean | string | SExpr;\n isComplete?: boolean | string | SExpr;\n className?: string | SExpr;\n };\n 'game-audio-toggle': {\n type: 'game-audio-toggle';\n size?: string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n onAsset?: PatternPropValue | string | SExpr;\n offAsset?: PatternPropValue | string | SExpr;\n };\n 'game-hud': {\n type: 'game-hud';\n position?: string | SExpr;\n stats?: unknown[] | string | SExpr;\n items?: unknown[] | string | SExpr;\n elements?: unknown[] | string | SExpr;\n size?: string | SExpr;\n className?: string | SExpr;\n transparent?: boolean | string | SExpr;\n };\n 'game-icon': {\n type: 'game-icon';\n assetUrl?: PatternPropValue | string | SExpr;\n icon: unknown | string | SExpr;\n size?: number | string | SExpr;\n alt?: string | SExpr;\n className?: string | SExpr;\n };\n 'game-menu': {\n type: 'game-menu';\n title: string | SExpr;\n subtitle?: string | SExpr;\n options?: unknown[] | string | SExpr;\n menuItems?: unknown[] | string | SExpr;\n onSelect?: ((...args: unknown[]) => unknown) | string | SExpr;\n background?: string | SExpr;\n logo?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'game-shell': {\n type: 'game-shell';\n appName?: string | SExpr;\n hud?: unknown | string | SExpr;\n addons?: unknown | string | SExpr;\n controls?: unknown | string | SExpr;\n overlay?: unknown | string | SExpr;\n className?: string | SExpr;\n showTopBar?: boolean | string | SExpr;\n children?: unknown | string | SExpr;\n backgroundAsset?: PatternPropValue | string | SExpr;\n hudBackgroundAsset?: PatternPropValue | string | SExpr;\n fontFamily?: string | SExpr;\n 'data-theme'?: string | SExpr;\n };\n 'generic-app-template': {\n type: 'generic-app-template';\n entity: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n title: string | SExpr;\n subtitle?: string | SExpr;\n children: unknown | string | SExpr;\n headerActions?: unknown | string | SExpr;\n footer?: unknown | string | SExpr;\n };\n 'geometric-pattern': {\n type: 'geometric-pattern';\n variant?: string | SExpr;\n mode?: string | SExpr;\n opacity?: number | string | SExpr;\n color?: string | SExpr;\n scale?: number | string | SExpr;\n strokeWidth?: number | string | SExpr;\n children?: unknown | string | SExpr;\n className?: string | SExpr;\n };\n 'gradient-divider': {\n type: 'gradient-divider';\n color?: string | SExpr;\n className?: string | SExpr;\n };\n 'graph-canvas': {\n type: 'graph-canvas';\n title?: string | SExpr;\n nodes?: unknown[] | string | SExpr;\n edges?: unknown[] | string | SExpr;\n proposedEdges?: unknown[] | string | SExpr;\n similarity?: unknown[] | string | SExpr;\n height?: number | string | SExpr;\n showLabels?: boolean | string | SExpr;\n interactive?: boolean | string | SExpr;\n draggable?: boolean | string | SExpr;\n actions?: unknown[] | string | SExpr;\n onNodeClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onMarkClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onNodeDoubleClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onBadgeClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n nodeClickEvent?: string | SExpr;\n selectedNodeId?: string | SExpr;\n repulsion?: number | string | SExpr;\n linkDistance?: number | string | SExpr;\n nodeSpacing?: number | string | SExpr;\n linkOpacity?: number | string | SExpr;\n layout?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'graph-view': {\n type: 'graph-view';\n nodes: unknown[] | string | SExpr;\n edges: unknown[] | string | SExpr;\n onNodeClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onNodeHover?: ((...args: unknown[]) => unknown) | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n className?: string | SExpr;\n showLabels?: boolean | string | SExpr;\n zoomToFit?: boolean | string | SExpr;\n };\n 'grid': {\n type: 'grid';\n cols?: number | string | PatternPropValue | SExpr;\n rows?: number | string | SExpr;\n gap?: string | SExpr;\n rowGap?: string | SExpr;\n colGap?: string | SExpr;\n alignItems?: string | SExpr;\n justifyItems?: string | SExpr;\n flow?: string | SExpr;\n className?: string | SExpr;\n style?: PatternPropValue | string | SExpr;\n children: unknown | string | SExpr;\n as?: unknown | string | SExpr;\n };\n 'header': {\n type: 'header';\n logo?: unknown | string | SExpr;\n logoSrc?: unknown | string | SExpr;\n brandName?: string | SExpr;\n navigationItems?: unknown[] | string | SExpr;\n showMenuToggle?: boolean | string | SExpr;\n isMenuOpen?: boolean | string | SExpr;\n onMenuToggle?: ((...args: unknown[]) => unknown) | string | SExpr;\n showSearch?: boolean | string | SExpr;\n searchPlaceholder?: string | SExpr;\n onSearch?: ((...args: unknown[]) => unknown) | string | SExpr;\n userAvatar?: PatternPropValue | string | SExpr;\n userName?: string | SExpr;\n onUserClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n actions?: unknown | string | SExpr;\n sticky?: boolean | string | SExpr;\n variant?: string | SExpr;\n look?: string | SExpr;\n onLogoClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n };\n 'health-bar': {\n type: 'health-bar';\n current: number | string | SExpr;\n max: number | string | SExpr;\n format?: string | SExpr;\n level?: number | string | SExpr;\n showLabel?: boolean | string | SExpr;\n labelSuffix?: string | SExpr;\n size?: string | SExpr;\n className?: string | SExpr;\n animated?: boolean | string | SExpr;\n frameAsset?: PatternPropValue | string | SExpr;\n fillAsset?: PatternPropValue | string | SExpr;\n };\n 'hero-organism': {\n type: 'hero-organism';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | string | SExpr;\n children?: unknown | string | SExpr;\n };\n 'hero-section': {\n type: 'hero-section';\n tag?: string | SExpr;\n tagVariant?: string | SExpr;\n title: string | SExpr;\n titleAccent?: string | SExpr;\n subtitle: string | SExpr;\n primaryAction?: PatternPropValue | string | SExpr;\n secondaryAction?: PatternPropValue | string | SExpr;\n installCommand?: string | SExpr;\n image?: PatternPropValue | string | SExpr;\n imagePosition?: string | SExpr;\n background?: string | SExpr;\n align?: string | SExpr;\n backgroundElement?: unknown | string | SExpr;\n children?: unknown | string | SExpr;\n className?: string | SExpr;\n };\n 'hstack': {\n type: 'hstack';\n gap?: string | SExpr;\n align?: string | SExpr;\n justify?: string | SExpr;\n wrap?: boolean | string | SExpr;\n reverse?: boolean | string | SExpr;\n flex?: boolean | string | SExpr;\n className?: string | SExpr;\n style?: PatternPropValue | string | SExpr;\n children?: unknown | string | SExpr;\n as?: unknown | string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onKeyDown?: ((...args: unknown[]) => unknown) | string | SExpr;\n role?: string | SExpr;\n tabIndex?: number | string | SExpr;\n action?: string | SExpr;\n actionPayload?: PatternPropValue | string | SExpr;\n responsive?: boolean | string | SExpr;\n };\n 'icon': {\n type: 'icon';\n icon?: unknown | string | SExpr;\n name?: string | SExpr;\n size?: string | SExpr;\n color?: string | SExpr;\n animation?: string | SExpr;\n className?: string | SExpr;\n strokeWidth?: number | string | SExpr;\n style?: PatternPropValue | string | SExpr;\n };\n 'import-preview-tree': {\n type: 'import-preview-tree';\n units: unknown[] | string | SExpr;\n skipped?: unknown[] | string | SExpr;\n entityDisplay: PatternPropValue | string | SExpr;\n onConfirm?: ((...args: unknown[]) => unknown) | string | SExpr;\n onCancel?: ((...args: unknown[]) => unknown) | string | SExpr;\n confirmLabel?: string | SExpr;\n cancelLabel?: string | SExpr;\n indent?: number | string | SExpr;\n className?: string | SExpr;\n };\n 'import-progress': {\n type: 'import-progress';\n step: string | SExpr;\n counts?: PatternPropValue | string | SExpr;\n labels?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'import-source-picker': {\n type: 'import-source-picker';\n sources: unknown[] | string | SExpr;\n onSelect?: ((...args: unknown[]) => unknown) | string | SExpr;\n onFilesSelected?: ((...args: unknown[]) => unknown) | string | SExpr;\n title?: string | SExpr;\n moreSources?: unknown | string | SExpr;\n className?: string | SExpr;\n };\n 'infinite-scroll-sentinel': {\n type: 'infinite-scroll-sentinel';\n loadMoreEvent: string | SExpr;\n loadMorePayload?: PatternPropValue | string | SExpr;\n isLoading?: boolean | string | SExpr;\n hasMore?: boolean | string | SExpr;\n threshold?: string | SExpr;\n className?: string | SExpr;\n };\n 'input': {\n type: 'input';\n className?: string | SExpr;\n placeholder?: string | SExpr;\n value?: string | number | SExpr;\n disabled?: boolean | string | SExpr;\n action?: string | SExpr;\n inputType?: string | SExpr;\n label?: string | SExpr;\n helperText?: string | SExpr;\n error?: string | SExpr;\n leftIcon?: unknown | string | SExpr;\n rightIcon?: unknown | string | SExpr;\n icon?: unknown | string | SExpr;\n clearable?: boolean | string | SExpr;\n onClear?: ((...args: unknown[]) => unknown) | string | SExpr;\n options?: unknown[] | string | SExpr;\n rows?: number | string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n };\n 'input-group': {\n type: 'input-group';\n className?: string | SExpr;\n placeholder?: string | SExpr;\n value?: string | number | SExpr;\n disabled?: boolean | string | SExpr;\n action?: string | SExpr;\n inputType?: string | SExpr;\n label?: string | SExpr;\n helperText?: string | SExpr;\n error?: string | SExpr;\n leftIcon?: unknown | string | SExpr;\n rightIcon?: unknown | string | SExpr;\n clearable?: boolean | string | SExpr;\n onClear?: ((...args: unknown[]) => unknown) | string | SExpr;\n options?: unknown[] | string | SExpr;\n rows?: number | string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n leftAddon?: unknown | unknown | string | SExpr;\n rightAddon?: unknown | unknown | string | SExpr;\n };\n 'install-box': {\n type: 'install-box';\n command: string | SExpr;\n label?: string | SExpr;\n className?: string | SExpr;\n };\n 'jazari-state-machine': {\n type: 'jazari-state-machine';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n schema?: PatternPropValue | string | SExpr;\n trait?: PatternPropValue | string | SExpr;\n traitIndex?: number | string | SExpr;\n entityFields?: unknown[] | string | SExpr;\n direction?: string | SExpr;\n };\n 'label': {\n type: 'label';\n className?: string | SExpr;\n text?: string | SExpr;\n htmlFor?: string | SExpr;\n required?: boolean | string | SExpr;\n };\n 'landing-page-template': {\n type: 'landing-page-template';\n entity: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n variant?: string | SExpr;\n featureColumns?: number | string | SExpr;\n };\n 'law-reference-tooltip': {\n type: 'law-reference-tooltip';\n reference: PatternPropValue | string | SExpr;\n children: unknown | string | SExpr;\n position?: string | SExpr;\n className?: string | SExpr;\n };\n 'learning-canvas': {\n type: 'learning-canvas';\n className?: string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n backgroundColor?: string | SExpr;\n shapes?: unknown[] | string | SExpr;\n interactive?: boolean | string | SExpr;\n animate?: boolean | string | SExpr;\n onShapeClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onShapeHover?: ((...args: unknown[]) => unknown) | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n };\n 'lightbox': {\n type: 'lightbox';\n images: unknown[] | string | SExpr;\n currentIndex?: number | string | SExpr;\n isOpen?: boolean | string | SExpr;\n showCounter?: boolean | string | SExpr;\n closeAction?: string | SExpr;\n onClose?: ((...args: unknown[]) => unknown) | string | SExpr;\n onIndexChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n };\n 'likert-scale': {\n type: 'likert-scale';\n question?: string | SExpr;\n options?: unknown[] | string | SExpr;\n value?: number | string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n changeEvent?: string | SExpr;\n disabled?: boolean | string | SExpr;\n size?: string | SExpr;\n variant?: string | SExpr;\n className?: string | SExpr;\n };\n 'line-chart': {\n type: 'line-chart';\n data: unknown[] | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n showGrid?: boolean | string | SExpr;\n showValues?: boolean | string | SExpr;\n showArea?: boolean | string | SExpr;\n lineColor?: string | SExpr;\n areaColor?: string | SExpr;\n className?: string | SExpr;\n };\n 'loading-state': {\n type: 'loading-state';\n title?: string | SExpr;\n message?: string | SExpr;\n className?: string | SExpr;\n fullPage?: boolean | string | SExpr;\n };\n 'map-view': {\n type: 'map-view';\n markers?: unknown[] | string | SExpr;\n routes?: unknown[] | string | SExpr;\n centerLat?: number | string | SExpr;\n centerLng?: number | string | SExpr;\n zoom?: number | string | SExpr;\n height?: string | SExpr;\n onMarkerClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onMapClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n mapClickEvent?: string | SExpr;\n markerClickEvent?: string | SExpr;\n showClickedPin?: boolean | string | SExpr;\n className?: string | SExpr;\n showAttribution?: boolean | string | SExpr;\n };\n 'markdown-content': {\n type: 'markdown-content';\n content: string | SExpr;\n direction?: string | SExpr;\n className?: string | SExpr;\n };\n 'marketing-footer': {\n type: 'marketing-footer';\n columns: unknown[] | string | SExpr;\n copyright?: string | SExpr;\n logo?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'marketing-stat-card': {\n type: 'marketing-stat-card';\n value: string | SExpr;\n label: string | SExpr;\n size?: string | SExpr;\n className?: string | SExpr;\n };\n 'master-detail': {\n type: 'master-detail';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n masterFields: unknown[] | string | SExpr;\n detailFields?: unknown[] | string | SExpr;\n loading?: boolean | string | SExpr;\n };\n 'master-detail-layout': {\n type: 'master-detail-layout';\n master: unknown | string | SExpr;\n detail: unknown | string | SExpr;\n emptyDetail?: unknown | string | SExpr;\n hasSelection?: boolean | string | SExpr;\n masterWidth?: string | SExpr;\n className?: string | SExpr;\n masterClassName?: string | SExpr;\n detailClassName?: string | SExpr;\n };\n 'math-canvas': {\n type: 'math-canvas';\n className?: string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n title?: string | SExpr;\n xMin?: number | string | SExpr;\n xMax?: number | string | SExpr;\n yMin?: number | string | SExpr;\n yMax?: number | string | SExpr;\n showAxes?: boolean | string | SExpr;\n showGrid?: boolean | string | SExpr;\n gridStep?: number | string | SExpr;\n curves?: unknown[] | string | SExpr;\n points?: unknown[] | string | SExpr;\n vectors?: unknown[] | string | SExpr;\n shapes?: unknown[] | string | SExpr;\n interactive?: boolean | string | SExpr;\n animate?: boolean | string | SExpr;\n onShapeClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n };\n 'matrix-question': {\n type: 'matrix-question';\n title?: string | SExpr;\n rows: unknown[] | string | SExpr;\n columns?: unknown[] | string | SExpr;\n values?: PatternPropValue | string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n changeEvent?: string | SExpr;\n disabled?: boolean | string | SExpr;\n size?: string | SExpr;\n className?: string | SExpr;\n };\n 'media-gallery': {\n type: 'media-gallery';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n title?: string | SExpr;\n items?: unknown[] | string | SExpr;\n columns?: number | string | SExpr;\n selectable?: boolean | string | SExpr;\n selectedItems?: unknown[] | string | SExpr;\n selectionEvent?: string | SExpr;\n showUpload?: boolean | string | SExpr;\n actions?: unknown[] | string | SExpr;\n aspectRatio?: string | SExpr;\n };\n 'menu': {\n type: 'menu';\n trigger: unknown | string | SExpr;\n items: unknown[] | string | SExpr;\n position?: string | SExpr;\n className?: string | SExpr;\n header?: unknown | string | SExpr;\n footer?: unknown | string | SExpr;\n };\n 'meter': {\n type: 'meter';\n value: number | string | SExpr;\n min?: number | string | SExpr;\n max?: number | string | SExpr;\n label?: string | SExpr;\n unit?: string | SExpr;\n variant?: string | SExpr;\n thresholds?: unknown[] | string | SExpr;\n segments?: number | string | SExpr;\n showValue?: boolean | string | SExpr;\n size?: string | SExpr;\n actions?: unknown[] | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'modal': {\n type: 'modal';\n isOpen?: boolean | string | SExpr;\n onClose?: ((...args: unknown[]) => unknown) | string | SExpr;\n onExited?: ((...args: unknown[]) => unknown) | string | SExpr;\n title?: string | SExpr;\n children?: unknown | string | SExpr;\n footer?: unknown | string | SExpr;\n size?: string | SExpr;\n showCloseButton?: boolean | string | SExpr;\n closeOnOverlayClick?: boolean | string | SExpr;\n closeOnEscape?: boolean | string | SExpr;\n className?: string | SExpr;\n closeEvent?: string | SExpr;\n swipeDownToClose?: boolean | string | SExpr;\n look?: string | SExpr;\n };\n 'modal-slot': {\n type: 'modal-slot';\n children?: unknown | string | SExpr;\n title?: string | SExpr;\n size?: string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n entity?: string | SExpr;\n sourceTrait?: string | SExpr;\n };\n 'module-card': {\n type: 'module-card';\n data: PatternPropValue | string | SExpr;\n };\n 'navigation': {\n type: 'navigation';\n items: unknown[] | string | SExpr;\n orientation?: string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n };\n 'notification': {\n type: 'notification';\n variant?: string | SExpr;\n message: string | SExpr;\n title?: string | SExpr;\n duration?: number | string | SExpr;\n dismissible?: boolean | string | SExpr;\n onDismiss?: ((...args: unknown[]) => unknown) | string | SExpr;\n actionLabel?: string | SExpr;\n onAction?: ((...args: unknown[]) => unknown) | string | SExpr;\n badge?: string | number | SExpr;\n className?: string | SExpr;\n dismissEvent?: string | SExpr;\n actionEvent?: string | SExpr;\n };\n 'number-stepper': {\n type: 'number-stepper';\n value?: number | string | SExpr;\n min?: number | string | SExpr;\n max?: number | string | SExpr;\n step?: number | string | SExpr;\n size?: string | SExpr;\n disabled?: boolean | string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n action?: string | SExpr;\n actionPayload?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n label?: string | SExpr;\n };\n 'option-constraint-group': {\n type: 'option-constraint-group';\n groupId: string | SExpr;\n title: string | SExpr;\n description?: string | SExpr;\n options: unknown[] | string | SExpr;\n constraint?: PatternPropValue | string | SExpr;\n selected?: unknown[] | string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n changeEvent?: string | SExpr;\n size?: string | SExpr;\n className?: string | SExpr;\n };\n 'orbital-visualization': {\n type: 'orbital-visualization';\n schema?: PatternPropValue | string | SExpr;\n complexity?: number | string | SExpr;\n size?: string | SExpr;\n showLabel?: boolean | string | SExpr;\n animated?: boolean | string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n };\n 'overlay': {\n type: 'overlay';\n isVisible?: boolean | string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n blur?: boolean | string | SExpr;\n action?: string | SExpr;\n };\n 'page-header': {\n type: 'page-header';\n title?: string | number | SExpr;\n subtitle?: string | number | SExpr;\n showBack?: boolean | string | SExpr;\n backEvent?: string | SExpr;\n breadcrumbs?: unknown[] | string | SExpr;\n status?: PatternPropValue | string | SExpr;\n actions?: unknown[] | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n tabs?: unknown[] | string | SExpr;\n activeTab?: string | SExpr;\n onTabChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n children?: unknown | string | SExpr;\n className?: string | SExpr;\n };\n 'page-transition': {\n type: 'page-transition';\n locationKey: string | SExpr;\n children: unknown | string | SExpr;\n className?: string | SExpr;\n };\n 'pagination': {\n type: 'pagination';\n currentPage: number | string | SExpr;\n totalPages: number | string | SExpr;\n onPageChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n showPageSize?: boolean | string | SExpr;\n pageSizeOptions?: unknown[] | string | SExpr;\n pageSize?: number | string | SExpr;\n onPageSizeChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n showJumpToPage?: boolean | string | SExpr;\n showTotal?: boolean | string | SExpr;\n totalItems?: number | string | SExpr;\n maxVisiblePages?: number | string | SExpr;\n className?: string | SExpr;\n pageChangeEvent?: string | SExpr;\n pageSizeChangeEvent?: string | SExpr;\n };\n 'pattern-tile': {\n type: 'pattern-tile';\n variant?: string | SExpr;\n size?: number | string | SExpr;\n color?: string | SExpr;\n strokeWidth?: number | string | SExpr;\n className?: string | SExpr;\n };\n 'physics-canvas': {\n type: 'physics-canvas';\n className?: string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n title?: string | SExpr;\n backgroundColor?: string | SExpr;\n bodies?: unknown[] | string | SExpr;\n constraints?: unknown[] | string | SExpr;\n showVelocity?: boolean | string | SExpr;\n showForces?: boolean | string | SExpr;\n velocityScale?: number | string | SExpr;\n forceScale?: number | string | SExpr;\n shapes?: unknown[] | string | SExpr;\n interactive?: boolean | string | SExpr;\n animate?: boolean | string | SExpr;\n onShapeClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n };\n 'popover': {\n type: 'popover';\n content: unknown | string | SExpr;\n children: unknown | string | SExpr;\n position?: string | SExpr;\n trigger?: string | SExpr;\n showArrow?: boolean | string | SExpr;\n open?: boolean | string | SExpr;\n onOpenChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n };\n 'positioned-canvas': {\n type: 'positioned-canvas';\n items: PatternPropValue | unknown[] | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n selectedId?: string | SExpr;\n editable?: boolean | string | SExpr;\n onSelect?: ((...args: unknown[]) => unknown) | string | SExpr;\n onMove?: ((...args: unknown[]) => unknown) | string | SExpr;\n selectEvent?: string | SExpr;\n moveEvent?: string | SExpr;\n className?: string | SExpr;\n };\n 'presence': {\n type: 'presence';\n show: boolean | string | SExpr;\n className?: string | SExpr;\n children: unknown | string | SExpr;\n };\n 'pricing-card': {\n type: 'pricing-card';\n name: string | SExpr;\n price: string | SExpr;\n description?: string | SExpr;\n features: unknown[] | string | SExpr;\n action: PatternPropValue | string | SExpr;\n highlighted?: boolean | string | SExpr;\n badge?: string | SExpr;\n className?: string | SExpr;\n };\n 'pricing-grid': {\n type: 'pricing-grid';\n plans: unknown[] | string | SExpr;\n className?: string | SExpr;\n };\n 'pricing-organism': {\n type: 'pricing-organism';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n heading?: string | SExpr;\n subtitle?: string | SExpr;\n };\n 'pricing-page-template': {\n type: 'pricing-page-template';\n entity: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'progress-bar': {\n type: 'progress-bar';\n value: number | string | SExpr;\n max?: number | string | SExpr;\n progressType?: string | SExpr;\n variant?: string | SExpr;\n color?: string | SExpr;\n showPercentage?: boolean | string | SExpr;\n showLabel?: boolean | string | SExpr;\n label?: string | SExpr;\n size?: string | SExpr;\n steps?: number | string | SExpr;\n className?: string | SExpr;\n };\n 'progress-dots': {\n type: 'progress-dots';\n count: number | string | SExpr;\n currentIndex: number | string | SExpr;\n getState?: ((...args: unknown[]) => unknown) | string | SExpr;\n onDotClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n size?: string | SExpr;\n };\n 'pull-quote': {\n type: 'pull-quote';\n children: string | SExpr;\n className?: string | SExpr;\n };\n 'pull-to-refresh': {\n type: 'pull-to-refresh';\n refreshEvent: string | SExpr;\n refreshPayload?: PatternPropValue | string | SExpr;\n threshold?: number | string | SExpr;\n children: unknown | string | SExpr;\n className?: string | SExpr;\n };\n 'qr-scanner': {\n type: 'qr-scanner';\n onScan?: ((...args: unknown[]) => unknown) | string | SExpr;\n scanEvent?: string | SExpr;\n onError?: ((...args: unknown[]) => unknown) | string | SExpr;\n facingMode?: string | SExpr;\n paused?: boolean | string | SExpr;\n showOverlay?: boolean | string | SExpr;\n showCameraControls?: boolean | string | SExpr;\n fallback?: unknown | string | SExpr;\n className?: string | SExpr;\n };\n 'quiz-block': {\n type: 'quiz-block';\n question: string | SExpr;\n answer: string | SExpr;\n className?: string | SExpr;\n };\n 'radio': {\n type: 'radio';\n className?: string | SExpr;\n options?: unknown[] | string | SExpr;\n value?: string | SExpr;\n action?: string | SExpr;\n label?: string | SExpr;\n helperText?: string | SExpr;\n error?: string | SExpr;\n size?: string | SExpr;\n };\n 'range-slider': {\n type: 'range-slider';\n className?: string | SExpr;\n min?: number | string | SExpr;\n max?: number | string | SExpr;\n value?: number | string | SExpr;\n step?: number | string | SExpr;\n showTooltip?: boolean | string | SExpr;\n showTicks?: boolean | string | SExpr;\n buffered?: number | string | SExpr;\n size?: string | SExpr;\n disabled?: boolean | string | SExpr;\n action?: string | SExpr;\n actionPayload?: PatternPropValue | string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n formatValue?: ((...args: unknown[]) => unknown) | string | SExpr;\n };\n 'reflection-block': {\n type: 'reflection-block';\n prompt: string | SExpr;\n index: number | string | SExpr;\n savedNote?: string | SExpr;\n saveEvent?: string | SExpr;\n className?: string | SExpr;\n };\n 'relation-select': {\n type: 'relation-select';\n value?: string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n options: unknown[] | string | SExpr;\n placeholder?: string | SExpr;\n required?: boolean | string | SExpr;\n disabled?: boolean | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: string | SExpr;\n clearable?: boolean | string | SExpr;\n name?: string | SExpr;\n className?: string | SExpr;\n searchPlaceholder?: string | SExpr;\n emptyMessage?: string | SExpr;\n };\n 'repeatable-form-section': {\n type: 'repeatable-form-section';\n sectionType: string | SExpr;\n title: string | SExpr;\n items: unknown[] | string | SExpr;\n renderItem: ((...args: unknown[]) => unknown) | string | SExpr;\n minItems?: number | string | SExpr;\n maxItems?: number | string | SExpr;\n allowReorder?: boolean | string | SExpr;\n addLabel?: string | SExpr;\n emptyMessage?: string | SExpr;\n readOnly?: boolean | string | SExpr;\n className?: string | SExpr;\n onAdd?: ((...args: unknown[]) => unknown) | string | SExpr;\n onRemove?: ((...args: unknown[]) => unknown) | string | SExpr;\n onReorder?: ((...args: unknown[]) => unknown) | string | SExpr;\n trackAddedInState?: boolean | string | SExpr;\n currentState?: string | SExpr;\n showAuditInfo?: boolean | string | SExpr;\n };\n 'reply-tree': {\n type: 'reply-tree';\n nodes: PatternPropValue | unknown[] | string | SExpr;\n maxDepth?: number | string | SExpr;\n onVote?: ((...args: unknown[]) => unknown) | string | SExpr;\n onReply?: ((...args: unknown[]) => unknown) | string | SExpr;\n onFlag?: ((...args: unknown[]) => unknown) | string | SExpr;\n onContinueThread?: ((...args: unknown[]) => unknown) | string | SExpr;\n voteEvent?: string | SExpr;\n replyEvent?: string | SExpr;\n flagEvent?: string | SExpr;\n continueThreadEvent?: string | SExpr;\n showActions?: boolean | string | SExpr;\n className?: string | SExpr;\n };\n 'rich-block-editor': {\n type: 'rich-block-editor';\n initialBlocks?: PatternPropValue | unknown[] | string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n changeEvent?: string | SExpr;\n readOnly?: boolean | string | SExpr;\n placeholder?: string | SExpr;\n enableBlocks?: boolean | string | SExpr;\n showToolbar?: boolean | string | SExpr;\n className?: string | SExpr;\n };\n 'runtime-debugger': {\n type: 'runtime-debugger';\n position?: string | SExpr;\n defaultCollapsed?: boolean | string | SExpr;\n className?: string | SExpr;\n mode?: string | SExpr;\n defaultTab?: string | SExpr;\n schema?: PatternPropValue | string | SExpr;\n };\n 'scaled-diagram': {\n type: 'scaled-diagram';\n children: unknown | string | SExpr;\n className?: string | SExpr;\n };\n 'score-display': {\n type: 'score-display';\n assetUrl?: PatternPropValue | string | SExpr;\n value: number | string | SExpr;\n score?: number | string | SExpr;\n label?: string | SExpr;\n icon?: unknown | string | SExpr;\n size?: string | SExpr;\n className?: string | SExpr;\n locale?: string | SExpr;\n };\n 'search-input': {\n type: 'search-input';\n value?: string | SExpr;\n onSearch?: ((...args: unknown[]) => unknown) | string | SExpr;\n debounceMs?: number | string | SExpr;\n isLoading?: boolean | string | SExpr;\n placeholder?: string | SExpr;\n clearable?: boolean | string | SExpr;\n className?: string | SExpr;\n event?: string | SExpr;\n entity?: string | SExpr;\n query?: string | SExpr;\n };\n 'section': {\n type: 'section';\n title?: string | SExpr;\n description?: string | SExpr;\n action?: unknown | string | SExpr;\n padding?: string | SExpr;\n variant?: string | SExpr;\n divider?: boolean | string | SExpr;\n className?: string | SExpr;\n children: unknown | string | SExpr;\n headerClassName?: string | SExpr;\n contentClassName?: string | SExpr;\n as?: unknown | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n };\n 'section-header': {\n type: 'section-header';\n title: string | SExpr;\n subtitle?: string | SExpr;\n align?: string | SExpr;\n level?: number | string | SExpr;\n className?: string | SExpr;\n };\n 'segment-renderer': {\n type: 'segment-renderer';\n segments: unknown[] | string | SExpr;\n className?: string | SExpr;\n containerClassName?: string | SExpr;\n userProgress?: PatternPropValue | string | SExpr;\n onRunCodeSimulation?: ((...args: unknown[]) => unknown) | string | SExpr;\n onRenderVisualization?: ((...args: unknown[]) => unknown) | string | SExpr;\n };\n 'select': {\n type: 'select';\n className?: string | SExpr;\n options?: unknown[] | string | SExpr;\n groups?: unknown[] | string | SExpr;\n placeholder?: string | SExpr;\n value?: string | unknown[] | SExpr;\n action?: string | SExpr;\n error?: string | SExpr;\n multiple?: boolean | string | SExpr;\n searchable?: boolean | string | SExpr;\n clearable?: boolean | string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n onValueChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n };\n 'sequence-bar': {\n type: 'sequence-bar';\n slots: unknown[] | string | SExpr;\n maxSlots: number | string | SExpr;\n onSlotDrop?: ((...args: unknown[]) => unknown) | string | SExpr;\n onSlotRemove?: ((...args: unknown[]) => unknown) | string | SExpr;\n slotDropEvent?: string | SExpr;\n slotRemoveEvent?: string | SExpr;\n playing?: boolean | string | SExpr;\n currentStep?: number | string | SExpr;\n categoryColors?: PatternPropValue | string | SExpr;\n slotFeedback?: unknown[] | string | SExpr;\n size?: string | SExpr;\n className?: string | SExpr;\n };\n 'service-catalog': {\n type: 'service-catalog';\n services: unknown[] | string | SExpr;\n className?: string | SExpr;\n };\n 'showcase-card': {\n type: 'showcase-card';\n title: string | SExpr;\n description?: string | SExpr;\n image: PatternPropValue | string | SExpr;\n href?: string | SExpr;\n badge?: string | SExpr;\n accentColor?: string | SExpr;\n className?: string | SExpr;\n };\n 'showcase-organism': {\n type: 'showcase-organism';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n columns?: number | string | SExpr;\n heading?: string | SExpr;\n subtitle?: string | SExpr;\n };\n 'side-panel': {\n type: 'side-panel';\n title: string | SExpr;\n children: unknown | string | SExpr;\n isOpen: boolean | string | SExpr;\n onClose: ((...args: unknown[]) => unknown) | string | SExpr;\n width?: string | SExpr;\n position?: string | SExpr;\n showOverlay?: boolean | string | SExpr;\n className?: string | SExpr;\n closeEvent?: string | SExpr;\n };\n 'sidebar': {\n type: 'sidebar';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n logo?: unknown | string | SExpr;\n logoSrc?: unknown | string | SExpr;\n brandName?: string | SExpr;\n items: unknown[] | string | SExpr;\n userSection?: unknown | string | SExpr;\n footerContent?: unknown | string | SExpr;\n collapsed?: boolean | string | SExpr;\n defaultCollapsed?: boolean | string | SExpr;\n collapseChangeEvent?: string | SExpr;\n hideCollapseButton?: boolean | string | SExpr;\n showCloseButton?: boolean | string | SExpr;\n closeEvent?: string | SExpr;\n logoClickEvent?: string | SExpr;\n };\n 'signature-pad': {\n type: 'signature-pad';\n label?: string | SExpr;\n helperText?: string | SExpr;\n strokeColor?: string | SExpr;\n strokeWidth?: number | string | SExpr;\n height?: number | string | SExpr;\n readOnly?: boolean | string | SExpr;\n value?: string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n signEvent?: string | SExpr;\n clearEvent?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'simple-grid': {\n type: 'simple-grid';\n minChildWidth?: number | string | SExpr;\n maxCols?: number | string | SExpr;\n cols?: number | string | SExpr;\n gap?: string | SExpr;\n className?: string | SExpr;\n children: unknown | string | SExpr;\n };\n 'skeleton': {\n type: 'skeleton';\n variant?: string | SExpr;\n rows?: number | string | SExpr;\n columns?: number | string | SExpr;\n fields?: number | string | SExpr;\n className?: string | SExpr;\n };\n 'social-proof': {\n type: 'social-proof';\n items: unknown[] | string | SExpr;\n variant?: string | SExpr;\n className?: string | SExpr;\n };\n 'sortable-list': {\n type: 'sortable-list';\n items: PatternPropValue | unknown[] | string | SExpr;\n renderItem: ((...args: unknown[]) => unknown) | string | SExpr;\n reorderEvent: string | SExpr;\n reorderPayload?: PatternPropValue | string | SExpr;\n dragHandlePosition?: string | SExpr;\n className?: string | SExpr;\n };\n 'spacer': {\n type: 'spacer';\n size?: string | SExpr;\n axis?: string | SExpr;\n className?: string | SExpr;\n };\n 'sparkline': {\n type: 'sparkline';\n data: unknown[] | string | SExpr;\n color?: string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n strokeWidth?: number | string | SExpr;\n fill?: boolean | string | SExpr;\n className?: string | SExpr;\n };\n 'spinner': {\n type: 'spinner';\n className?: string | SExpr;\n size?: string | SExpr;\n overlay?: boolean | string | SExpr;\n };\n 'split': {\n type: 'split';\n ratio?: string | SExpr;\n gap?: string | SExpr;\n reverse?: boolean | string | SExpr;\n stackOnMobile?: boolean | string | SExpr;\n stackBreakpoint?: string | SExpr;\n align?: string | SExpr;\n className?: string | SExpr;\n leftClassName?: string | SExpr;\n rightClassName?: string | SExpr;\n children: unknown[] | string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n };\n 'split-pane': {\n type: 'split-pane';\n direction?: string | SExpr;\n ratio?: number | string | SExpr;\n minSize?: number | string | SExpr;\n resizable?: boolean | string | SExpr;\n left: unknown | string | SExpr;\n right: unknown | string | SExpr;\n className?: string | SExpr;\n leftClassName?: string | SExpr;\n rightClassName?: string | SExpr;\n };\n 'split-section': {\n type: 'split-section';\n title: string | SExpr;\n description: string | unknown | SExpr;\n bullets?: unknown[] | string | SExpr;\n image?: PatternPropValue | string | SExpr;\n imagePosition?: string | SExpr;\n background?: string | SExpr;\n children?: unknown | string | SExpr;\n className?: string | SExpr;\n };\n 'stack': {\n type: 'stack';\n direction?: string | SExpr;\n gap?: string | SExpr;\n align?: string | SExpr;\n justify?: string | SExpr;\n wrap?: boolean | string | SExpr;\n reverse?: boolean | string | SExpr;\n flex?: boolean | string | SExpr;\n className?: string | SExpr;\n style?: PatternPropValue | string | SExpr;\n children?: unknown | string | SExpr;\n as?: unknown | string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onKeyDown?: ((...args: unknown[]) => unknown) | string | SExpr;\n role?: string | SExpr;\n tabIndex?: number | string | SExpr;\n action?: string | SExpr;\n actionPayload?: PatternPropValue | string | SExpr;\n responsive?: boolean | string | SExpr;\n };\n 'star-rating': {\n type: 'star-rating';\n value?: number | string | SExpr;\n max?: number | string | SExpr;\n readOnly?: boolean | string | SExpr;\n precision?: string | SExpr;\n size?: string | SExpr;\n action?: string | SExpr;\n actionPayload?: PatternPropValue | string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n label?: string | SExpr;\n };\n 'stat-badge': {\n type: 'stat-badge';\n assetUrl?: PatternPropValue | string | SExpr;\n iconUrl?: PatternPropValue | string | SExpr;\n label: string | SExpr;\n value?: number | string | SExpr;\n max?: number | string | SExpr;\n source?: string | SExpr;\n field?: string | SExpr;\n format?: string | SExpr;\n icon?: unknown | string | SExpr;\n size?: string | SExpr;\n variant?: string | SExpr;\n className?: string | SExpr;\n };\n 'stat-card': {\n type: 'stat-card';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n label?: string | SExpr;\n title?: string | SExpr;\n value?: string | number | unknown[] | SExpr;\n previousValue?: number | string | SExpr;\n currentValue?: number | string | SExpr;\n trend?: number | string | SExpr;\n trendDirection?: string | SExpr;\n invertTrend?: boolean | string | SExpr;\n icon?: unknown | string | SExpr;\n iconBg?: string | SExpr;\n iconColor?: string | SExpr;\n subtitle?: string | SExpr;\n action?: PatternPropValue | string | SExpr;\n metrics?: unknown[] | string | SExpr;\n compact?: boolean | string | SExpr;\n sparklineData?: unknown[] | string | SExpr;\n };\n 'stat-display': {\n type: 'stat-display';\n label: string | SExpr;\n value: number | string | SExpr;\n max?: number | string | SExpr;\n target?: number | string | SExpr;\n trend?: number | string | SExpr;\n trendPolarity?: string | SExpr;\n trendFormat?: string | SExpr;\n sparklineData?: unknown[] | string | SExpr;\n clickEvent?: string | SExpr;\n prefix?: string | SExpr;\n suffix?: string | SExpr;\n icon?: unknown | string | SExpr;\n iconBg?: string | SExpr;\n iconColor?: string | SExpr;\n format?: string | SExpr;\n size?: string | SExpr;\n variant?: string | SExpr;\n compact?: boolean | string | SExpr;\n look?: string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n };\n 'state-graph': {\n type: 'state-graph';\n states: unknown[] | string | SExpr;\n transitions?: unknown[] | string | SExpr;\n currentState?: string | SExpr;\n selectedState?: string | SExpr;\n addingFrom?: string | SExpr;\n initialState?: string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n nodeClickEvent?: string | SExpr;\n className?: string | SExpr;\n };\n 'state-json-view': {\n type: 'state-json-view';\n name: string | SExpr;\n initialState: string | SExpr;\n states: unknown[] | string | SExpr;\n transitions: unknown[] | string | SExpr;\n label?: string | SExpr;\n defaultExpanded?: boolean | string | SExpr;\n className?: string | SExpr;\n };\n 'state-machine-view': {\n type: 'state-machine-view';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n layoutData?: PatternPropValue | string | SExpr;\n renderStateNode?: ((...args: unknown[]) => unknown) | string | SExpr;\n };\n 'stats-grid': {\n type: 'stats-grid';\n stats: unknown[] | string | SExpr;\n columns?: number | string | SExpr;\n className?: string | SExpr;\n };\n 'stats-organism': {\n type: 'stats-organism';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n columns?: number | string | SExpr;\n };\n 'status-dot': {\n type: 'status-dot';\n className?: string | SExpr;\n status?: string | SExpr;\n pulse?: boolean | string | SExpr;\n size?: string | SExpr;\n label?: string | SExpr;\n };\n 'step-flow': {\n type: 'step-flow';\n steps: unknown[] | string | SExpr;\n orientation?: string | SExpr;\n showConnectors?: boolean | string | SExpr;\n className?: string | SExpr;\n };\n 'step-flow-organism': {\n type: 'step-flow-organism';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n orientation?: string | SExpr;\n showConnectors?: boolean | string | SExpr;\n heading?: string | SExpr;\n subtitle?: string | SExpr;\n };\n 'subagent-trace-panel': {\n type: 'subagent-trace-panel';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n subagents: unknown[] | string | SExpr;\n focusedOrbital?: string | SExpr;\n disclosureLevel: number | string | SExpr;\n open: boolean | string | SExpr;\n onClose?: ((...args: unknown[]) => unknown) | string | SExpr;\n coordinatorActivities?: unknown[] | string | SExpr;\n coordinatorMessages?: unknown[] | string | SExpr;\n mode?: string | SExpr;\n };\n 'svg-branch': {\n type: 'svg-branch';\n x?: number | string | SExpr;\n y?: number | string | SExpr;\n variant?: string | SExpr;\n branches?: number | string | SExpr;\n size?: number | string | SExpr;\n color?: string | SExpr;\n opacity?: number | string | SExpr;\n className?: string | SExpr;\n asRoot?: boolean | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n };\n 'svg-connection': {\n type: 'svg-connection';\n x1?: number | string | SExpr;\n y1?: number | string | SExpr;\n x2?: number | string | SExpr;\n y2?: number | string | SExpr;\n variant?: string | SExpr;\n color?: string | SExpr;\n strokeWidth?: number | string | SExpr;\n opacity?: number | string | SExpr;\n className?: string | SExpr;\n asRoot?: boolean | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n };\n 'svg-flow': {\n type: 'svg-flow';\n points?: unknown[] | string | SExpr;\n color?: string | SExpr;\n strokeWidth?: number | string | SExpr;\n animated?: boolean | string | SExpr;\n opacity?: number | string | SExpr;\n className?: string | SExpr;\n asRoot?: boolean | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n };\n 'svg-grid': {\n type: 'svg-grid';\n x?: number | string | SExpr;\n y?: number | string | SExpr;\n cols?: number | string | SExpr;\n rows?: number | string | SExpr;\n spacing?: number | string | SExpr;\n nodeRadius?: number | string | SExpr;\n color?: string | SExpr;\n opacity?: number | string | SExpr;\n className?: string | SExpr;\n highlights?: unknown[] | string | SExpr;\n asRoot?: boolean | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n };\n 'svg-lobe': {\n type: 'svg-lobe';\n cx?: number | string | SExpr;\n cy?: number | string | SExpr;\n rx?: number | string | SExpr;\n ry?: number | string | SExpr;\n rotation?: number | string | SExpr;\n shells?: number | string | SExpr;\n color?: string | SExpr;\n opacity?: number | string | SExpr;\n className?: string | SExpr;\n asRoot?: boolean | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n };\n 'svg-mesh': {\n type: 'svg-mesh';\n cx?: number | string | SExpr;\n cy?: number | string | SExpr;\n nodes?: number | string | SExpr;\n radius?: number | string | SExpr;\n color?: string | SExpr;\n connectionDensity?: number | string | SExpr;\n opacity?: number | string | SExpr;\n className?: string | SExpr;\n asRoot?: boolean | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n };\n 'svg-morph': {\n type: 'svg-morph';\n x?: number | string | SExpr;\n y?: number | string | SExpr;\n size?: number | string | SExpr;\n variant?: string | SExpr;\n color?: string | SExpr;\n opacity?: number | string | SExpr;\n className?: string | SExpr;\n asRoot?: boolean | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n };\n 'svg-node': {\n type: 'svg-node';\n x?: number | string | SExpr;\n y?: number | string | SExpr;\n r?: number | string | SExpr;\n variant?: string | SExpr;\n color?: string | SExpr;\n opacity?: number | string | SExpr;\n className?: string | SExpr;\n label?: string | SExpr;\n asRoot?: boolean | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n };\n 'svg-pulse': {\n type: 'svg-pulse';\n cx?: number | string | SExpr;\n cy?: number | string | SExpr;\n rings?: number | string | SExpr;\n maxRadius?: number | string | SExpr;\n color?: string | SExpr;\n animated?: boolean | string | SExpr;\n opacity?: number | string | SExpr;\n className?: string | SExpr;\n asRoot?: boolean | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n };\n 'svg-ring': {\n type: 'svg-ring';\n cx?: number | string | SExpr;\n cy?: number | string | SExpr;\n r?: number | string | SExpr;\n variant?: string | SExpr;\n color?: string | SExpr;\n strokeWidth?: number | string | SExpr;\n opacity?: number | string | SExpr;\n className?: string | SExpr;\n label?: string | SExpr;\n asRoot?: boolean | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n };\n 'svg-shield': {\n type: 'svg-shield';\n x?: number | string | SExpr;\n y?: number | string | SExpr;\n size?: number | string | SExpr;\n variant?: string | SExpr;\n color?: string | SExpr;\n opacity?: number | string | SExpr;\n className?: string | SExpr;\n asRoot?: boolean | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n };\n 'svg-stack': {\n type: 'svg-stack';\n x?: number | string | SExpr;\n y?: number | string | SExpr;\n layers?: number | string | SExpr;\n width?: number | string | SExpr;\n height?: number | string | SExpr;\n color?: string | SExpr;\n opacity?: number | string | SExpr;\n className?: string | SExpr;\n labels?: unknown[] | string | SExpr;\n asRoot?: boolean | string | SExpr;\n svgWidth?: number | string | SExpr;\n svgHeight?: number | string | SExpr;\n };\n 'swipeable-row': {\n type: 'swipeable-row';\n leftActions?: unknown[] | string | SExpr;\n rightActions?: unknown[] | string | SExpr;\n threshold?: number | string | SExpr;\n children: unknown | string | SExpr;\n itemData?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'switch': {\n type: 'switch';\n checked?: boolean | string | SExpr;\n defaultChecked?: boolean | string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n disabled?: boolean | string | SExpr;\n label?: string | SExpr;\n id?: string | SExpr;\n name?: string | SExpr;\n className?: string | SExpr;\n };\n 'tabbed-container': {\n type: 'tabbed-container';\n tabs: unknown[] | string | SExpr;\n defaultTab?: string | SExpr;\n activeTab?: string | SExpr;\n onTabChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n position?: string | SExpr;\n className?: string | SExpr;\n };\n 'table-view': {\n type: 'table-view';\n dragGroup?: string | SExpr;\n accepts?: string | SExpr;\n sortable?: boolean | string | SExpr;\n dropEvent?: string | SExpr;\n reorderEvent?: string | SExpr;\n positionEvent?: string | SExpr;\n dndItemIdField?: string | SExpr;\n dndRoot?: boolean | string | SExpr;\n entity: PatternPropValue | unknown[] | string | SExpr;\n columns?: unknown[] | string | SExpr;\n fields?: unknown[] | string | SExpr;\n itemActions?: unknown[] | string | SExpr;\n maxInlineActions?: number | string | SExpr;\n itemClickEvent?: string | SExpr;\n selectable?: boolean | string | SExpr;\n selectEvent?: string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n sortEvent?: string | SExpr;\n sortColumn?: string | SExpr;\n sortDirection?: string | SExpr;\n className?: string | SExpr;\n emptyMessage?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n groupBy?: string | SExpr;\n pageSize?: number | string | SExpr;\n children?: ((...args: unknown[]) => unknown) | string | SExpr;\n renderItem?: ((...args: unknown[]) => unknown) | string | SExpr;\n look?: string | SExpr;\n };\n 'tabs': {\n type: 'tabs';\n items?: unknown[] | string | SExpr;\n tabs?: unknown[] | string | SExpr;\n defaultActiveTab?: string | SExpr;\n activeTab?: string | SExpr;\n onTabChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n tabChangeEvent?: string | SExpr;\n variant?: string | SExpr;\n orientation?: string | SExpr;\n className?: string | SExpr;\n };\n 'tag-cloud': {\n type: 'tag-cloud';\n tags: unknown[] | string | SExpr;\n variant?: string | SExpr;\n className?: string | SExpr;\n };\n 'tag-input': {\n type: 'tag-input';\n value: unknown[] | string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n placeholder?: string | SExpr;\n disabled?: boolean | string | SExpr;\n variant?: string | SExpr;\n unique?: boolean | string | SExpr;\n helperText?: string | SExpr;\n className?: string | SExpr;\n addEvent?: string | SExpr;\n removeEvent?: string | SExpr;\n };\n 'team-card': {\n type: 'team-card';\n name: string | SExpr;\n nameAr?: string | SExpr;\n role: string | SExpr;\n bio: string | SExpr;\n avatar?: unknown | PatternPropValue | string | SExpr;\n className?: string | SExpr;\n };\n 'team-organism': {\n type: 'team-organism';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n sortBy?: string | SExpr;\n sortDirection?: string | SExpr;\n searchValue?: string | SExpr;\n page?: number | string | SExpr;\n pageSize?: number | string | SExpr;\n totalCount?: number | string | SExpr;\n activeFilters?: PatternPropValue | string | SExpr;\n selectedIds?: unknown[] | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n heading?: string | SExpr;\n subtitle?: string | SExpr;\n };\n 'text-highlight': {\n type: 'text-highlight';\n highlightType: string | SExpr;\n isActive?: boolean | string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onMouseEnter?: ((...args: unknown[]) => unknown) | string | SExpr;\n onMouseLeave?: ((...args: unknown[]) => unknown) | string | SExpr;\n annotationId?: string | SExpr;\n className?: string | SExpr;\n children: unknown | string | SExpr;\n action?: string | SExpr;\n hoverEvent?: string | SExpr;\n };\n 'textarea': {\n type: 'textarea';\n className?: string | SExpr;\n placeholder?: string | SExpr;\n rows?: number | string | SExpr;\n action?: string | SExpr;\n error?: string | SExpr;\n onChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n };\n 'theme-toggle': {\n type: 'theme-toggle';\n className?: string | SExpr;\n size?: string | SExpr;\n showLabel?: boolean | string | SExpr;\n };\n 'time-slot-cell': {\n type: 'time-slot-cell';\n time: string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n children?: unknown | string | SExpr;\n isOccupied?: boolean | string | SExpr;\n };\n 'timeline': {\n type: 'timeline';\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n entity?: PatternPropValue | unknown[] | string | SExpr;\n title?: string | SExpr;\n items?: unknown[] | string | SExpr;\n fields: unknown[] | string | SExpr;\n itemActions?: unknown[] | string | SExpr;\n look?: string | SExpr;\n };\n 'timer-display': {\n type: 'timer-display';\n seconds: number | string | SExpr;\n running?: boolean | string | SExpr;\n format?: string | SExpr;\n size?: string | SExpr;\n className?: string | SExpr;\n lowThreshold?: number | string | SExpr;\n iconAsset?: PatternPropValue | string | SExpr;\n };\n 'toast-slot': {\n type: 'toast-slot';\n children?: unknown | string | SExpr;\n variant?: string | SExpr;\n title?: string | SExpr;\n duration?: number | string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n entity?: string | SExpr;\n sourceTrait?: string | SExpr;\n };\n 'tooltip': {\n type: 'tooltip';\n content: unknown | string | SExpr;\n children: unknown | string | SExpr;\n position?: string | SExpr;\n delay?: number | string | SExpr;\n hideDelay?: number | string | SExpr;\n showArrow?: boolean | string | SExpr;\n className?: string | SExpr;\n };\n 'trait-frame': {\n type: 'trait-frame';\n traitName: string | SExpr;\n fallback?: unknown | string | SExpr;\n };\n 'trait-slot': {\n type: 'trait-slot';\n slotNumber: number | string | SExpr;\n equippedItem?: PatternPropValue | string | SExpr;\n locked?: boolean | string | SExpr;\n lockLabel?: string | SExpr;\n selected?: boolean | string | SExpr;\n size?: string | SExpr;\n showTooltip?: boolean | string | SExpr;\n categoryColors?: PatternPropValue | string | SExpr;\n tooltipFrameUrl?: PatternPropValue | string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n onItemDrop?: ((...args: unknown[]) => unknown) | string | SExpr;\n draggable?: boolean | string | SExpr;\n onDragStart?: ((...args: unknown[]) => unknown) | string | SExpr;\n feedback?: string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onRemove?: ((...args: unknown[]) => unknown) | string | SExpr;\n clickEvent?: string | SExpr;\n removeEvent?: string | SExpr;\n dropEvent?: string | SExpr;\n };\n 'trend-indicator': {\n type: 'trend-indicator';\n className?: string | SExpr;\n value?: number | string | SExpr;\n direction?: string | SExpr;\n showValue?: boolean | string | SExpr;\n invert?: boolean | string | SExpr;\n label?: string | SExpr;\n size?: string | SExpr;\n };\n 'typewriter-text': {\n type: 'typewriter-text';\n text: string | SExpr;\n speed?: number | string | SExpr;\n startDelay?: number | string | SExpr;\n className?: string | SExpr;\n onComplete?: ((...args: unknown[]) => unknown) | string | SExpr;\n };\n 'typography': {\n type: 'typography';\n variant?: string | SExpr;\n level?: number | string | SExpr;\n color?: string | SExpr;\n align?: string | SExpr;\n weight?: string | SExpr;\n size?: string | SExpr;\n truncate?: boolean | string | SExpr;\n overflow?: string | SExpr;\n as?: unknown | string | SExpr;\n id?: string | SExpr;\n className?: string | SExpr;\n style?: PatternPropValue | string | SExpr;\n format?: string | SExpr;\n content?: unknown | string | SExpr;\n children?: unknown | string | SExpr;\n };\n 'ui-slot-renderer': {\n type: 'ui-slot-renderer';\n includeHud?: boolean | string | SExpr;\n hudMode?: string | SExpr;\n includeFloating?: boolean | string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n entity?: string | SExpr;\n suspense?: boolean | PatternPropValue | string | SExpr;\n };\n 'upload-drop-zone': {\n type: 'upload-drop-zone';\n accept?: string | SExpr;\n maxSize?: number | string | SExpr;\n maxFiles?: number | string | SExpr;\n label?: string | SExpr;\n description?: string | SExpr;\n icon?: unknown | string | SExpr;\n disabled?: boolean | string | SExpr;\n action?: string | SExpr;\n actionPayload?: PatternPropValue | string | SExpr;\n onFiles?: ((...args: unknown[]) => unknown) | string | SExpr;\n className?: string | SExpr;\n };\n 'version-diff': {\n type: 'version-diff';\n revisions: unknown[] | PatternPropValue | string | SExpr;\n beforeId?: string | SExpr;\n afterId?: string | SExpr;\n view?: string | SExpr;\n onSelectBefore?: ((...args: unknown[]) => unknown) | string | SExpr;\n onSelectAfter?: ((...args: unknown[]) => unknown) | string | SExpr;\n onRevert?: ((...args: unknown[]) => unknown) | string | SExpr;\n selectBeforeEvent?: string | SExpr;\n selectAfterEvent?: string | SExpr;\n revertEvent?: string | SExpr;\n language?: string | SExpr;\n className?: string | SExpr;\n };\n 'violation-alert': {\n type: 'violation-alert';\n violation: PatternPropValue | string | SExpr;\n severity?: string | SExpr;\n dismissible?: boolean | string | SExpr;\n onDismiss?: ((...args: unknown[]) => unknown) | string | SExpr;\n onNavigateToField?: ((...args: unknown[]) => unknown) | string | SExpr;\n compact?: boolean | string | SExpr;\n className?: string | SExpr;\n message?: string | SExpr;\n };\n 'vote-stack': {\n type: 'vote-stack';\n count: number | string | SExpr;\n userVote?: string | SExpr;\n onVote?: ((...args: unknown[]) => unknown) | string | SExpr;\n voteEvent?: string | SExpr;\n disabled?: boolean | string | SExpr;\n size?: string | SExpr;\n variant?: string | SExpr;\n className?: string | SExpr;\n label?: string | SExpr;\n };\n 'vstack': {\n type: 'vstack';\n gap?: string | SExpr;\n align?: string | SExpr;\n justify?: string | SExpr;\n wrap?: boolean | string | SExpr;\n reverse?: boolean | string | SExpr;\n flex?: boolean | string | SExpr;\n className?: string | SExpr;\n style?: PatternPropValue | string | SExpr;\n children?: unknown | string | SExpr;\n as?: unknown | string | SExpr;\n onClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onKeyDown?: ((...args: unknown[]) => unknown) | string | SExpr;\n role?: string | SExpr;\n tabIndex?: number | string | SExpr;\n action?: string | SExpr;\n actionPayload?: PatternPropValue | string | SExpr;\n responsive?: boolean | string | SExpr;\n };\n 'wizard-container': {\n type: 'wizard-container';\n steps: unknown[] | string | SExpr;\n currentStep?: number | string | SExpr;\n onStepChange?: ((...args: unknown[]) => unknown) | string | SExpr;\n onComplete?: ((...args: unknown[]) => unknown) | string | SExpr;\n showProgress?: boolean | string | SExpr;\n allowBack?: boolean | string | SExpr;\n compact?: boolean | string | SExpr;\n className?: string | SExpr;\n isLoading?: boolean | string | SExpr;\n error?: PatternPropValue | string | SExpr;\n nextEvent?: string | SExpr;\n backEvent?: string | SExpr;\n completeEvent?: string | SExpr;\n };\n 'wizard-navigation': {\n type: 'wizard-navigation';\n currentStep: number | string | SExpr;\n totalSteps: number | string | SExpr;\n isValid?: boolean | string | SExpr;\n showBack?: boolean | string | SExpr;\n showNext?: boolean | string | SExpr;\n showComplete?: boolean | string | SExpr;\n backLabel?: string | SExpr;\n nextLabel?: string | SExpr;\n completeLabel?: string | SExpr;\n onBack?: string | SExpr;\n onNext?: string | SExpr;\n onComplete?: string | SExpr;\n onBackClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onNextClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n onCompleteClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n compact?: boolean | string | SExpr;\n className?: string | SExpr;\n };\n 'wizard-progress': {\n type: 'wizard-progress';\n steps?: unknown[] | string | SExpr;\n currentStep: number | string | SExpr;\n onStepClick?: ((...args: unknown[]) => unknown) | string | SExpr;\n allowNavigation?: boolean | string | SExpr;\n compact?: boolean | string | SExpr;\n className?: string | SExpr;\n stepClickEvent?: string | SExpr;\n };\n}\n\n/**\n * Get the props type for a specific pattern.\n */\nexport type PatternProps<T extends PatternType> = PatternPropsMap[T];\n\n/**\n * Type-safe pattern configuration.\n */\nexport type PatternConfig<T extends PatternType = PatternType> = PatternPropsMap[T];\n\n/**\n * Discriminated union of all pattern configs.\n */\nexport type AnyPatternConfig = PatternPropsMap[PatternType];\n\n/**\n * Array of all pattern type names (for runtime validation).\n */\nexport const PATTERN_TYPES: PatternType[] = [\n 'about-page-template',\n 'accordion',\n 'action-palette',\n 'action-tile',\n 'activation-block',\n 'alert',\n 'algorithm-canvas',\n 'animated-counter',\n 'animated-graphic',\n 'animated-reveal',\n 'article-section',\n 'aside',\n 'atlas-image',\n 'atlas-panel',\n 'auth-layout',\n 'avatar',\n 'badge',\n 'behavior-view',\n 'biology-canvas',\n 'bloom-quiz-block',\n 'book-chapter-view',\n 'book-cover-page',\n 'book-nav-bar',\n 'book-table-of-contents',\n 'book-viewer',\n 'box',\n 'branching-logic-builder',\n 'breadcrumb',\n 'button',\n 'calendar-grid',\n 'canvas',\n 'canvas-2d',\n 'card',\n 'carousel',\n 'case-study-card',\n 'case-study-organism',\n 'center',\n 'chart',\n 'chart-legend',\n 'chat-bar',\n 'checkbox',\n 'chemistry-canvas',\n 'choice-button',\n 'code-block',\n 'code-runner-panel',\n 'community-links',\n 'conditional-wrapper',\n 'confetti-effect',\n 'confirm-dialog',\n 'connection-block',\n 'container',\n 'content-renderer',\n 'content-section',\n 'control-button',\n 'control-grid',\n 'counter-template',\n 'cta-banner',\n 'dashboard-grid',\n 'dashboard-layout',\n 'data-grid',\n 'data-list',\n 'date-range-picker',\n 'date-range-selector',\n 'day-cell',\n 'detail-panel',\n 'dialog',\n 'dialogue-bubble',\n 'divider',\n 'doc-breadcrumb',\n 'doc-pagination',\n 'doc-search',\n 'doc-sidebar',\n 'doc-toc',\n 'document-viewer',\n 'draw-group',\n 'draw-shape',\n 'draw-shape-layer',\n 'draw-sprite',\n 'draw-sprite-layer',\n 'draw-text',\n 'draw-text-layer',\n 'drawer',\n 'drawer-slot',\n 'edge-decoration',\n 'emoji-picker',\n 'empty-state',\n 'entity-cards',\n 'entity-list',\n 'entity-table',\n 'error-boundary',\n 'error-state',\n 'feature-card',\n 'feature-detail-page-template',\n 'feature-grid',\n 'feature-grid-organism',\n 'file-tree',\n 'filter-group',\n 'filter-pill',\n 'flex',\n 'flip-card',\n 'flip-container',\n 'floating-action-button',\n 'form',\n 'form-actions',\n 'form-field',\n 'form-layout',\n 'form-section',\n 'form-section-header',\n 'game-audio-toggle',\n 'game-hud',\n 'game-icon',\n 'game-menu',\n 'game-shell',\n 'generic-app-template',\n 'geometric-pattern',\n 'gradient-divider',\n 'graph-canvas',\n 'graph-view',\n 'grid',\n 'header',\n 'health-bar',\n 'hero-organism',\n 'hero-section',\n 'hstack',\n 'icon',\n 'import-preview-tree',\n 'import-progress',\n 'import-source-picker',\n 'infinite-scroll-sentinel',\n 'input',\n 'input-group',\n 'install-box',\n 'jazari-state-machine',\n 'label',\n 'landing-page-template',\n 'law-reference-tooltip',\n 'learning-canvas',\n 'lightbox',\n 'likert-scale',\n 'line-chart',\n 'loading-state',\n 'map-view',\n 'markdown-content',\n 'marketing-footer',\n 'marketing-stat-card',\n 'master-detail',\n 'master-detail-layout',\n 'math-canvas',\n 'matrix-question',\n 'media-gallery',\n 'menu',\n 'meter',\n 'modal',\n 'modal-slot',\n 'module-card',\n 'navigation',\n 'notification',\n 'number-stepper',\n 'option-constraint-group',\n 'orbital-visualization',\n 'overlay',\n 'page-header',\n 'page-transition',\n 'pagination',\n 'pattern-tile',\n 'physics-canvas',\n 'popover',\n 'positioned-canvas',\n 'presence',\n 'pricing-card',\n 'pricing-grid',\n 'pricing-organism',\n 'pricing-page-template',\n 'progress-bar',\n 'progress-dots',\n 'pull-quote',\n 'pull-to-refresh',\n 'qr-scanner',\n 'quiz-block',\n 'radio',\n 'range-slider',\n 'reflection-block',\n 'relation-select',\n 'repeatable-form-section',\n 'reply-tree',\n 'rich-block-editor',\n 'runtime-debugger',\n 'scaled-diagram',\n 'score-display',\n 'search-input',\n 'section',\n 'section-header',\n 'segment-renderer',\n 'select',\n 'sequence-bar',\n 'service-catalog',\n 'showcase-card',\n 'showcase-organism',\n 'side-panel',\n 'sidebar',\n 'signature-pad',\n 'simple-grid',\n 'skeleton',\n 'social-proof',\n 'sortable-list',\n 'spacer',\n 'sparkline',\n 'spinner',\n 'split',\n 'split-pane',\n 'split-section',\n 'stack',\n 'star-rating',\n 'stat-badge',\n 'stat-card',\n 'stat-display',\n 'state-graph',\n 'state-json-view',\n 'state-machine-view',\n 'stats-grid',\n 'stats-organism',\n 'status-dot',\n 'step-flow',\n 'step-flow-organism',\n 'subagent-trace-panel',\n 'svg-branch',\n 'svg-connection',\n 'svg-flow',\n 'svg-grid',\n 'svg-lobe',\n 'svg-mesh',\n 'svg-morph',\n 'svg-node',\n 'svg-pulse',\n 'svg-ring',\n 'svg-shield',\n 'svg-stack',\n 'swipeable-row',\n 'switch',\n 'tabbed-container',\n 'table-view',\n 'tabs',\n 'tag-cloud',\n 'tag-input',\n 'team-card',\n 'team-organism',\n 'text-highlight',\n 'textarea',\n 'theme-toggle',\n 'time-slot-cell',\n 'timeline',\n 'timer-display',\n 'toast-slot',\n 'tooltip',\n 'trait-frame',\n 'trait-slot',\n 'trend-indicator',\n 'typewriter-text',\n 'typography',\n 'ui-slot-renderer',\n 'upload-drop-zone',\n 'version-diff',\n 'violation-alert',\n 'vote-stack',\n 'vstack',\n 'wizard-container',\n 'wizard-navigation',\n 'wizard-progress',\n];\n\n/**\n * Check if a string is a valid pattern type.\n */\nexport function isValidPatternType(type: string): type is PatternType {\n return PATTERN_TYPES.includes(type as PatternType);\n}\n","/**\n * Pattern Type for Orbital Units\n *\n * Re-exports pattern type definitions from @almadar/core/patterns,\n * which is the single source of truth for all pattern types.\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Pattern Type - Re-exported from @almadar/core/patterns\n// ============================================================================\n\n/**\n * All valid pattern type names, imported from the @almadar/core/patterns registry.\n * The authoritative list is auto-generated from patterns-registry.json.\n */\nexport {\n PATTERN_TYPES,\n isValidPatternType,\n} from '../patterns/index.js';\nexport type { PatternType } from '../patterns/index.js';\n\n/**\n * Zod schema for pattern types.\n * Accepts any string - validation against full registry happens at runtime.\n */\nexport const PatternTypeSchema = z.string();\n","/**\n * Service Contract Types\n *\n * Formalizes the two public surfaces of an Almadar service:\n * 1. Call-Service Contract — what the .orb schema can invoke on the TypeScript package\n * 2. Event Contract — what events enter/leave the service\n *\n * Plus internal-but-standardized patterns:\n * 3. StoreContract — database abstraction boundary\n * 4. LazyService — singleton lifecycle pattern\n *\n * @packageDocumentation\n */\n\nimport type { EventPayload, EventPayloadValue, LogMeta } from './types/expression.js';\nimport type { ServiceParams } from './types/service.js';\n\n// ============================================================================\n// Service Action Names (generated from services-registry.json)\n// ============================================================================\n\n/**\n * All known service action names across all contracts.\n * Kept in sync with `tools/almadar-service-sync/services-registry.json`.\n *\n * Persist operations are listed separately because they also appear\n * as `EffectResult.action` for persist effects.\n */\nexport type PersistActionName =\n | \"create\"\n | \"update\"\n | \"delete\"\n | \"list\"\n | \"query\";\n\n/**\n * Union of all service action names across the registered service contracts.\n */\nexport type ServiceActionName =\n | PersistActionName\n // Data service\n | \"get\"\n | \"getById\"\n | \"set\"\n | \"remove\"\n | \"size\"\n // LLM\n | \"generate\"\n | \"classify\"\n | \"extract\"\n | \"summarize\"\n // Messaging\n | \"send\"\n | \"sendMessage\"\n | \"sendSMS\"\n | \"sendWhatsApp\"\n // Auth / Identity\n | \"authorize\"\n | \"revoke\"\n | \"token\"\n | \"refresh\"\n | \"userinfo\"\n | \"register\"\n // Git / VCS\n | \"cloneRepo\"\n | \"commit\"\n | \"createBranch\"\n | \"createPR\"\n | \"getPRComments\"\n | \"pull\"\n | \"push\"\n // CI / Build\n | \"build\"\n | \"compile\"\n | \"compileSchema\"\n | \"run\"\n | \"validate\"\n | \"validateSchema\"\n | \"publish\"\n // Queue / Jobs\n | \"enqueue\"\n | \"dequeue\"\n | \"cancel\"\n // Storage / Assets\n | \"upload\"\n | \"download\"\n | \"getSignedUrl\"\n // Search / Issues\n | \"search\"\n | \"getIssue\"\n | \"listIssues\"\n // Agent / Generation\n | \"generateAll\"\n | \"generateDomainLanguage\"\n | \"generateFix\"\n | \"generateOrbitals\"\n | \"cancelGeneration\"\n | \"getGenerationHistory\"\n | \"recordGeneration\"\n // Telemetry / Metrics\n | \"startSpan\"\n | \"endSpan\"\n | \"getSpan\"\n | \"recordMetric\"\n | \"getMetrics\"\n | \"increment\"\n | \"logs\"\n // Events / Channels\n | \"addEvent\"\n | \"emit\"\n | \"findEmitters\"\n | \"findListeners\"\n | \"getListenerCounts\"\n | \"getChannel\"\n | \"subscribe\"\n // User / Preferences\n | \"getUserPreferences\"\n | \"updateUserPreferences\"\n | \"getThreadHistory\"\n // Migration / Import\n | \"listDocuments\"\n | \"fetchDocument\"\n // Media\n | \"getVideo\"\n // Payments\n | \"createPaymentIntent\"\n | \"confirmPayment\"\n | \"refund\"\n // Lifecycle\n | \"complete\"\n | \"fail\"\n | \"expire\"\n | \"resume\"\n | \"status\"\n | \"stop\"\n | \"lock\"\n | \"unlock\"\n | \"clear\";\n\n// ============================================================================\n// Call-Service Contract\n// ============================================================================\n\n/**\n * Action definition for a service contract.\n *\n * - `params` is bus-payload-shaped (`ServiceParams`): JSON-serializable\n * key/value bag with optional nesting. Service contracts override this\n * with stricter shapes via the generic position on `ServiceContract`.\n *\n * - `result` is JSON-serializable too (`EventPayloadValue`): a primitive,\n * `null`/`undefined`, an array of values, or an `EventPayload` object.\n * This is the same recursive shape the bus accepts when an effect's\n * `success` event fires with the call-service result, so no boundary\n * widening is needed when the runtime forwards the value.\n */\nexport interface ServiceAction {\n params: ServiceParams;\n result: EventPayloadValue;\n}\n\n/**\n * What `[\"call-service\", \"name\", \"action\", {...}]` actually calls at runtime.\n * Each service defines its action map as a Record<string, ServiceAction>.\n *\n * @example\n * ```typescript\n * type LLMActions = {\n * generate: {\n * params: { userPrompt: string; model: string; maxTokens: number };\n * result: { content: string; tokensUsed: number; latencyMs: number };\n * };\n * };\n *\n * class LLMService implements ServiceContract<LLMActions> {\n * async execute(action, params) { ... }\n * }\n * ```\n */\nexport interface ServiceContract<\n Actions extends Record<string, ServiceAction>,\n> {\n execute<A extends keyof Actions & string>(\n action: A,\n params: Actions[A][\"params\"],\n ): Promise<Actions[A][\"result\"]>;\n}\n\n// ============================================================================\n// Event Contract\n// ============================================================================\n\n/**\n * Event contract — what events the service emits/listens with typed payloads.\n * Derived from the `.orb` schema's `emits` and `listens` declarations.\n *\n * @example\n * ```typescript\n * type LLMEventMap = {\n * AGENT_LLM_REQUEST: { requestId: string; prompt: string };\n * LLM_RESPONSE: { requestId: string; content: string; tokensUsed: number };\n * LLM_ERROR: { requestId: string; error: string };\n * };\n *\n * const events: ServiceEvents<LLMEventMap> = getEventBus();\n * events.emit('LLM_RESPONSE', { requestId: '1', content: '...', tokensUsed: 42 });\n * ```\n */\nexport interface ServiceEvents<\n EventMap extends Record<string, EventPayload>,\n> {\n emit<E extends keyof EventMap & string>(\n event: E,\n payload: EventMap[E],\n ): void;\n on<E extends keyof EventMap & string>(\n event: E,\n handler: (payload: EventMap[E]) => void,\n ): () => void;\n}\n\n/**\n * Create a typed view of an untyped EventBus. Wraps the raw EventBus\n * with compile-time type checking while keeping runtime behavior identical.\n *\n * @example\n * ```typescript\n * type LLMEventMap = {\n * LLM_RESPONSE: { requestId: string; content: string };\n * LLM_ERROR: { requestId: string; error: string };\n * };\n *\n * const typedBus = createTypedEventBus<LLMEventMap>(getServerEventBus());\n * typedBus.emit('LLM_RESPONSE', { requestId: '1', content: '...' }); // type-safe\n * typedBus.on('LLM_ERROR', (payload) => { payload.error; }); // payload is typed\n * ```\n */\n/**\n * Creates a typed event bus from an untyped bus implementation.\n * \n * This wrapper adds TypeScript type safety to event emission and listening.\n * The generic `EventMap` defines the shape of all events and their payloads.\n * \n * @template EventMap - Type mapping event names to their payload types\n * @param {Object} bus - Untyped event bus implementation\n * @param {Function} bus.emit - Function to emit events\n * @param {Function} bus.on - Function to listen to events\n * @returns {ServiceEvents<EventMap>} Typed event bus interface\n * \n * @example\n * interface MyEvents {\n * 'user.created': { id: string; name: string };\n * 'user.deleted': { id: string };\n * }\n * \n * const typedBus = createTypedEventBus<MyEvents>(rawBus);\n * typedBus.emit('user.created', { id: '123', name: 'Alice' });\n */\nexport function createTypedEventBus<\n EventMap extends Record<string, EventPayload>,\n>(bus: {\n emit(event: string, payload?: unknown, meta?: LogMeta): void;\n on(event: string, handler: (payload: unknown, meta?: LogMeta) => void): () => void;\n}): ServiceEvents<EventMap> {\n return {\n emit<E extends keyof EventMap & string>(event: E, payload: EventMap[E]): void {\n bus.emit(event, payload);\n },\n on<E extends keyof EventMap & string>(\n event: E,\n handler: (payload: EventMap[E]) => void,\n ): () => void {\n return bus.on(event, handler as (payload: unknown) => void);\n },\n };\n}\n\n// ============================================================================\n// Store Contract\n// ============================================================================\n\n/** Filter operator for store queries. */\nexport type StoreFilterOp =\n | \"==\"\n | \"!=\"\n | \"<\"\n | \"<=\"\n | \">\"\n | \">=\"\n | \"in\"\n | \"not-in\"\n | \"contains\";\n\n/** A single filter clause for store queries. */\nexport interface StoreFilter<T> {\n field: keyof T & string;\n op: StoreFilterOp;\n value: unknown;\n}\n\n/**\n * Database abstraction boundary. Services receive `StoreContract<T>`,\n * not raw database clients. Swappable per database engine.\n *\n * @example\n * ```typescript\n * interface LLMRequest { id: string; prompt: string; status: string }\n *\n * class FirestoreLLMRequestStore implements StoreContract<LLMRequest> {\n * async getById(id) { ... }\n * async create(data) { ... }\n * async update(id, data) { ... }\n * async delete(id) { ... }\n * async query(filters) { ... }\n * }\n * ```\n */\nexport interface StoreContract<T extends { id: string }> {\n getById(id: string): Promise<T | null>;\n create(data: Omit<T, \"id\">): Promise<T>;\n update(id: string, data: Partial<T>): Promise<T>;\n delete(id: string): Promise<void>;\n query(filters: StoreFilter<T>[]): Promise<T[]>;\n}\n\n// ============================================================================\n// Lazy Service (Singleton Pattern)\n// ============================================================================\n\n/**\n * Standardized singleton lifecycle. Replaces ad-hoc\n * `let x = null; export function getX()` patterns.\n *\n * @example\n * ```typescript\n * const llmClient = createLazyService(() => new LLMClient({ apiKey: process.env.LLM_KEY }));\n *\n * // In request handler:\n * const client = llmClient.get(); // created on first call, cached after\n *\n * // In test teardown:\n * llmClient.reset(); // next get() creates a fresh instance\n * ```\n */\nexport interface LazyService<T> {\n /** Get the singleton instance (creates on first call). */\n get(): T;\n /** Reset the singleton (next get() creates fresh). For test isolation. */\n reset(): void;\n}\n\n/**\n * Create a lazy singleton from a factory function.\n * \n * Creates a service that lazily initializes on first access and caches the instance.\n * Useful for expensive resources like database connections or API clients.\n * \n * @template T - The type of service to create\n * @param {() => T} factory - Factory function that creates the service instance\n * @returns {LazyService<T>} Lazy service with get() and reset() methods\n * \n * @example\n * const dbService = createLazyService(() => new DatabaseClient(config));\n * const db = dbService.get(); // Initializes on first call\n */\nexport function createLazyService<T>(factory: () => T): LazyService<T> {\n let instance: T | null = null;\n return {\n get(): T {\n if (instance === null) {\n instance = factory();\n }\n return instance;\n },\n reset(): void {\n instance = null;\n },\n };\n}\n","/**\n * Shared Intermediate Representation Types\n *\n * Unified IR types used by both the compiler and runtime.\n * This is the single source of truth for IR structures.\n *\n * @packageDocumentation\n */\n\nimport type { SExpr } from './expression.js';\nimport type { Entity, EntityRow, FieldValue } from './entity.js';\nimport type { JsonValue, RuntimeValue } from './json.js';\nimport type { ListenSource } from './trait.js';\nimport type { AnyPatternConfig } from '../patterns/index.js';\n\n// ============================================================================\n// Transition Types\n// ============================================================================\n\n/**\n * Transition source state specification.\n * - string: Single state name (e.g., 'Idle')\n * - '*': Wildcard - matches any current state\n * - string[]: Array of states - matches any of the listed states\n */\nexport type TransitionFrom = string | '*' | string[];\n\n// ============================================================================\n// Field Types\n// ============================================================================\n\nexport interface ResolvedField {\n name: string;\n type: string;\n tsType: string;\n description?: string;\n /** Field default — JSON-shaped, mirroring `EntityField.default`. */\n default?: JsonValue;\n required: boolean;\n /** Validation constraints carried from the schema (enum whitelist). */\n validation?: { enum?: string[] };\n /** Enum values for enum or constrained string fields */\n values?: string[];\n /** Enum values (alias for values, for compatibility) */\n enumValues?: string[];\n /** Relation configuration for foreign key references */\n relation?: {\n entity: string;\n cardinality?: string;\n field?: string;\n };\n}\n\n// ============================================================================\n// Entity Types\n// ============================================================================\n\nexport interface ResolvedEntity {\n name: string;\n description?: string;\n icon?: string;\n collection: string;\n fields: ResolvedField[];\n\n /** Whether this entity only exists in runtime (not persisted to Firestore) */\n runtime?: boolean;\n\n /** Whether this entity's state is shared across every bound trait (vs a per-trait copy). Orthogonal to `runtime`. */\n shared?: boolean;\n\n /** Whether this entity has pre-authored instances in the schema */\n hasInstances?: boolean;\n\n /** Pre-authored instances from the schema (seed data or static reference data) */\n instances?: EntityRow[];\n\n /** Default field values from schema (for spawning singletons) */\n defaults?: Record<string, FieldValue>;\n\n // Cross-references\n usedByTraits: string[];\n usedByPages: string[];\n}\n\nexport interface ResolvedEntityBinding {\n /** Binding name in code */\n name: string;\n\n /** Entity being bound */\n entity: ResolvedEntity;\n\n /** CRUD operations to generate */\n operations: ('list' | 'get' | 'create' | 'update' | 'delete')[];\n}\n\n// ============================================================================\n// Trait Types\n// ============================================================================\n\nexport interface ResolvedTraitState {\n name: string;\n isInitial: boolean;\n isFinal: boolean;\n}\n\nexport interface ResolvedTraitEvent {\n key: string;\n name: string;\n payload?: Record<string, string>;\n}\n\nexport interface ResolvedTraitTransition {\n /** Source state(s): string, '*' for wildcard, or array of states */\n from: TransitionFrom;\n to: string;\n event: string;\n guard?: SExpr;\n effects: SExpr[];\n}\n\nexport interface ResolvedTraitGuard {\n name: string;\n condition: SExpr;\n}\n\nexport interface ResolvedTraitTick {\n name: string;\n /**\n * `number` (ms), `'frame'`, a duration string (`'5s'`/`'1m'`/`'1h'`), or a\n * 5-field cron expression (`'0 9 * * *'`) — `schema-to-ir.ts`'s\n * `interval: tick.interval || 0` passes the source schema's raw\n * `string | number` straight through with no normalization, so this must\n * match that reality rather than the narrower `number | 'frame'` it used\n * to declare (which made every non-'frame' string an unchecked cast at\n * every consumer).\n */\n interval: number | string;\n guard?: SExpr;\n effects: SExpr[];\n priority: number;\n appliesTo: string[];\n}\n\nexport interface ResolvedTraitListener {\n event: string;\n triggers: string;\n guard?: SExpr;\n /** `with { ... }` payload rewrite: `{ targetField: SExpr }`, evaluated against the source payload. */\n payloadMapping?: Record<string, SExpr>;\n /** Source scoping (see `ListenSource` in types/trait). */\n source?: ListenSource;\n}\n\nexport interface ResolvedTraitDataEntity {\n name: string;\n fields: ResolvedField[];\n runtime: boolean;\n singleton: boolean;\n}\n\n/**\n * UI binding for interaction traits - maps states to presentations\n */\nexport interface ResolvedTraitUIBinding {\n [stateName: string]: {\n /** Presentation type: modal, drawer, popover, inline, confirm-dialog */\n presentation: string;\n /** Content pattern(s) to render */\n content: AnyPatternConfig | AnyPatternConfig[];\n /** Presentation props */\n props?: {\n size?: string;\n position?: string;\n title?: string;\n closable?: boolean;\n width?: string;\n showProgress?: boolean;\n step?: number;\n totalSteps?: number;\n };\n };\n}\n\n/**\n * Fully resolved trait - expanded from schema OR library.\n * The compiler generates code from this structure universally,\n * without knowing which specific trait it is.\n */\nexport interface ResolvedTrait {\n /** Unique trait identifier */\n name: string;\n\n /** Human-readable description */\n description?: string;\n\n /** Where this trait came from */\n source: 'schema' | 'library' | 'inline';\n\n /** Category for organizing traits */\n category?: 'lifecycle' | 'temporal' | 'validation' | 'notification' | 'integration' | 'interaction' | 'agent' |\n 'game-core' | 'game-character' | 'game-ai' | 'game-combat' | 'game-items' | 'game-cards' | 'game-board' | 'game-puzzle';\n\n // State Machine (all optional - not all traits have state machines)\n states: ResolvedTraitState[];\n events: ResolvedTraitEvent[];\n transitions: ResolvedTraitTransition[];\n guards: ResolvedTraitGuard[];\n\n // Behavior\n ticks: ResolvedTraitTick[];\n\n // Communication\n listens: ResolvedTraitListener[];\n\n // Data\n dataEntities: ResolvedTraitDataEntity[];\n\n /**\n * Atom-declared linked entity. The atom (e.g. std-pagination)\n * declares which entity its `@entity.X` bindings resolve against\n * (e.g. `PagedItem`). Distinct from the call-site rebind on\n * `ResolvedTraitBinding.linkedEntity`, which a molecule may use\n * to override the atom's default. Either side may be undefined\n * for traits that don't bind any entity (pure interaction).\n */\n linkedEntity?: string;\n\n /**\n * The trait's DECLARED `config { }` schema (per-field\n * `{ type, default? }`). Drives `@config.X` substitution: each\n * field's `default` seeds the binding context behind any caller-\n * supplied call-site `config: { ... }` override on the trait\n * reference. Authored on the atom; flows through verbatim from\n * `Trait.config`.\n *\n * (Caller-supplied call-site overrides live on the page-trait\n * binding's `config: TraitConfig` — see `ResolvedTraitBinding`.)\n */\n config?: import('./trait.js').DeclaredTraitConfig;\n\n // UI Bindings for interaction traits\n ui?: ResolvedTraitUIBinding;\n}\n\n/**\n * Trait binding on a page - links a resolved trait to the page\n */\nexport interface ResolvedTraitBinding {\n /** Reference name */\n ref?: string;\n\n /** Fully resolved trait */\n trait: ResolvedTrait;\n\n /** Entity this trait operates on (if any) */\n linkedEntity?: string;\n\n /** Instance configuration */\n config?: import('./trait.js').TraitConfig;\n}\n\n// ============================================================================\n// Pattern & Section Types\n// ============================================================================\n\nexport interface ResolvedPattern {\n /** Pattern type (e.g., 'page-header', 'entity-list', 'game-canvas') */\n type: string;\n\n /** Pattern configuration */\n config: AnyPatternConfig;\n\n /** Shell component to use */\n shellComponent?: string;\n}\n\nexport interface ResolvedSectionEvent {\n event: string;\n action: string;\n target?: string;\n}\n\nexport interface ResolvedSection {\n /** Section identifier */\n id: string;\n\n /** Resolved pattern */\n pattern: ResolvedPattern;\n\n /** Events emitted by this section */\n events: ResolvedSectionEvent[];\n\n /** Position in page layout */\n position?: number;\n\n /** Entity binding for this section */\n binding?: ResolvedEntityBinding;\n}\n\n// ============================================================================\n// Page Types\n// ============================================================================\n\nexport interface ResolvedNavigation {\n event?: string;\n from?: string;\n to: string;\n trigger?: string;\n params?: Record<string, string>;\n label?: string;\n path?: string;\n icon?: string;\n}\n\nexport interface ResolvedPage {\n /** Page identifier */\n name: string;\n\n /** URL path */\n path: string;\n\n /** Feature folder name */\n featureName: string;\n\n /** Layout component */\n layout?: string;\n\n /** View type (dashboard, list, detail, create, edit) */\n viewType?: 'dashboard' | 'list' | 'detail' | 'create' | 'edit';\n\n /** Resolved sections */\n sections: ResolvedSection[];\n\n /** Resolved trait bindings */\n traits: ResolvedTraitBinding[];\n\n /** Entity data bindings */\n entityBindings: ResolvedEntityBinding[];\n\n /** Navigation wiring */\n navigation: ResolvedNavigation[];\n\n /** Singleton entities to spawn on this page (runtime singletons) */\n singletonEntities: ResolvedEntity[];\n}\n\n// ============================================================================\n// IR Types\n// ============================================================================\n\n/**\n * Complete resolved IR - all references expanded\n */\nexport interface ResolvedIR {\n /** App name */\n appName: string;\n\n /** App description */\n description?: string;\n\n /** App version */\n version?: string;\n\n /** All resolved entities (Map for lookup) */\n entities: Map<string, ResolvedEntity>;\n\n /** All resolved traits (Map for lookup) */\n traits: Map<string, ResolvedTrait>;\n\n /** All resolved pages (Map for lookup) */\n pages: Map<string, ResolvedPage>;\n\n /** Entity bindings (used for data hook generation) */\n entityBindings: ResolvedEntityBinding[];\n\n /** Raw data entities (used for instance data generation) */\n rawEntities?: Entity[];\n\n /** Generation timestamp */\n generatedAt: string;\n}\n\n// ============================================================================\n// Factory Functions\n// ============================================================================\n\n/**\n * Create an empty resolved trait with defaults\n */\nexport function createEmptyResolvedTrait(name: string, source: 'schema' | 'library' | 'inline'): ResolvedTrait {\n return {\n name,\n source,\n states: [],\n events: [],\n transitions: [],\n guards: [],\n ticks: [],\n listens: [],\n dataEntities: [],\n };\n}\n\n/**\n * Create an empty resolved page with defaults\n */\nexport function createEmptyResolvedPage(name: string): ResolvedPage {\n return {\n name,\n path: `/${name.toLowerCase()}`,\n featureName: name.toLowerCase(),\n sections: [],\n traits: [],\n entityBindings: [],\n navigation: [],\n singletonEntities: [],\n };\n}\n\n/**\n * Infer TypeScript type from schema type\n */\nexport function inferTsType(schemaType: string): string {\n const typeMap: Record<string, string> = {\n string: 'string',\n number: 'number',\n boolean: 'boolean',\n date: 'Date',\n datetime: 'Date',\n timestamp: 'number',\n array: 'unknown[]',\n object: 'Record<string, unknown>',\n any: 'unknown',\n };\n\n // Handle array types like \"string[]\"\n if (schemaType.endsWith('[]')) {\n const baseType = schemaType.slice(0, -2);\n return `${typeMap[baseType] || baseType}[]`;\n }\n\n // Handle the typed-map form `Map<K,V>` (the orbital `Map K V` type) →\n // `Record<K, V>`. Mirrors the Rust `parse_payload_field_type` map branch so\n // TS-land type derivation agrees with codegen. Key is comma-free (split on\n // the first comma; value may itself be `Map<…>`).\n if (schemaType.startsWith('Map<') && schemaType.endsWith('>')) {\n const inner = schemaType.slice(4, -1);\n const comma = inner.indexOf(',');\n if (comma !== -1) {\n const key = inferTsType(inner.slice(0, comma).trim());\n const value = inferTsType(inner.slice(comma + 1).trim());\n return `Record<${key}, ${value}>`;\n }\n }\n\n return typeMap[schemaType] || schemaType;\n}\n\n/**\n * Create a resolved field with TypeScript type inference\n */\nexport function createResolvedField(field: {\n name: string;\n type: string;\n description?: string;\n default?: JsonValue;\n required?: boolean;\n validation?: { enum?: string[] };\n values?: string[];\n}): ResolvedField {\n return {\n name: field.name,\n type: field.type,\n tsType: inferTsType(field.type),\n description: field.description,\n default: field.default,\n required: field.required ?? false,\n validation: field.validation,\n values: field.values,\n };\n}\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\n/**\n * Type guard to check if an object is a ResolvedIR.\n * \n * Validates that an unknown value conforms to the ResolvedIR structure.\n * Checks for required properties and correct types. Used for runtime\n * type checking and validation.\n * \n * @param {unknown} ir - Value to check\n * @returns {boolean} True if value is ResolvedIR, false otherwise\n * \n * @example\n * if (isResolvedIR(schema)) {\n * // Type-safe access to ResolvedIR properties\n * console.log('Valid IR:', schema.appName);\n * }\n */\nexport function isResolvedIR(ir: RuntimeValue): ir is ResolvedIR {\n if (!ir || typeof ir !== 'object') return false;\n const r = ir as ResolvedIR;\n return typeof r.appName === 'string' && r.traits instanceof Map && r.pages instanceof Map;\n}\n","/**\n * Validation error types — the shape emitted by every\n * `.orb` / `.lolo` validator pass.\n *\n * `ValidationError` is the wire shape: `{ code, path, message, suggestion? }`.\n * `code` is `ValidationErrorCode`, which is an OPEN `string` to let the\n * Rust validator emit new codes without an `@almadar/core` rev. The\n * `KNOWN_VALIDATION_ERROR_CODES` const documents the codes currently\n * emitted by the validator + lolo lower pipeline (extracted from\n * `orbital-rust/crates/orbital-compiler/src/phases/validation/` +\n * `orbital-rust/crates/orbital-lolo/src/`).\n *\n * Consumers that want to narrow a code to the closed known set use\n * `KnownValidationErrorCode`:\n *\n * ```ts\n * if (err.code in KNOWN_VALIDATION_ERROR_CODES) {\n * // err.code is now narrowable to KnownValidationErrorCode for\n * // exhaustive switch handling.\n * }\n * ```\n *\n * @packageDocumentation\n */\n\n/**\n * One validation diagnostic emitted by the validator / lolo lower pipeline.\n *\n * - `code`: machine-readable identifier (see `KNOWN_VALIDATION_ERROR_CODES`).\n * - `path`: JSON pointer-like path into the failing schema location,\n * e.g. `'orbitals[0].traits[2].stateMachine.transitions[1].effects[0]'`.\n * - `message`: human-readable description of the failure.\n * - `suggestion`: optional hint the validator may add to help the\n * author / LLM fix the issue.\n */\nexport interface ValidationError {\n code: ValidationErrorCode;\n path: string;\n message: string;\n suggestion?: string;\n}\n\n/**\n * Validation error code — open `string` for forward-compat with the\n * Rust validator's evolving code set. Narrow to the closed known set\n * via `KnownValidationErrorCode` when exhaustive handling is needed.\n */\nexport type ValidationErrorCode = string;\n\n/**\n * The result of a single validator pass: a boolean verdict plus the errors\n * and warnings (the validator wire shape, `ValidationError`).\n *\n * Distinct from `ValidationResults` (app.ts): that is the Firestore-persisted\n * app-document shape keyed on `ValidationIssue` (with `severity` + array path\n * + `validatedAt`). This `ValidationResult` is the in-process pass result keyed\n * on `ValidationError` (code + JSON-pointer string path + `suggestion`).\n * `ok === true` iff there are zero errors AND zero warnings.\n */\nexport interface ValidationResult {\n ok: boolean;\n errors: ValidationError[];\n warnings: ValidationError[];\n}\n\n/**\n * Closed set of validation codes the Rust validator + lolo lower\n * pipeline currently emit. Source-tagged: codes are extracted from\n * `orbital-rust/crates/orbital-compiler/src/phases/validation/**.rs`\n * and `orbital-rust/crates/orbital-lolo/src/**.rs`. Keep this in sync\n * with the Rust side; mismatches are caught by the Rust validator's\n * own unit tests, which assert the emitted code-set matches an\n * exported manifest.\n *\n * Categories (prefix → meaning):\n * - `ORB_BINDING_*` — binding (`@entity.X`, `@payload.Y`, ...) issues\n * - `ORB_E_*` / `ORB_EFF_*` / `ORB_EMIT_*` — entity / effect / emit\n * - `ORB_GEN_*` — generic / cross-cutting structure\n * - `ORB_O_*` / `ORB_P_*` / `ORB_S_*` / `ORB_SM_*` / `ORB_T_*` —\n * orbital / page / schema / state-machine / trait\n * - `ORB_QUERY_*` — query / search behaviors\n * - `ORB_RUI_*` — render-UI binding + prop validation\n * - `ORB_SLOT_*` — UI-slot conflict / contention\n * - `ORB_SVC_*` / `ORB_UI_*` — service / UI primitives\n * - `ORB_X_*` — cross-orbital constraints (listens, emits, IDs)\n * - `ORB_ID_*` — V4 dual-carry id integrity (unknown ref, name/kind\n * mismatch, ledger orphan)\n */\nexport const KNOWN_VALIDATION_ERROR_CODES = {\n // Binding (`@entity.X`, `@payload.Y`, `@state.Z`, `@now`, ...)\n ORB_BINDING_ENTITY_FIELD_NEVER_SET: 'ORB_BINDING_ENTITY_FIELD_NEVER_SET',\n ORB_BINDING_ENTITY_FIELD_NOT_FOUND: 'ORB_BINDING_ENTITY_FIELD_NOT_FOUND',\n ORB_BINDING_INVALID_FIELD_NAME: 'ORB_BINDING_INVALID_FIELD_NAME',\n ORB_BINDING_INVALID_FORMAT: 'ORB_BINDING_INVALID_FORMAT',\n ORB_BINDING_INVALID_PATH: 'ORB_BINDING_INVALID_PATH',\n ORB_BINDING_NOW_NO_PATH: 'ORB_BINDING_NOW_NO_PATH',\n ORB_BINDING_PAYLOAD_FIELD_UNDECLARED: 'ORB_BINDING_PAYLOAD_FIELD_UNDECLARED',\n ORB_BINDING_PAYLOAD_IN_TICK: 'ORB_BINDING_PAYLOAD_IN_TICK',\n ORB_BINDING_PAYLOAD_TYPE_INCOMPATIBLE: 'ORB_BINDING_PAYLOAD_TYPE_INCOMPATIBLE',\n ORB_BINDING_SET_TARGET_MISSING_PATH: 'ORB_BINDING_SET_TARGET_MISSING_PATH',\n ORB_BINDING_STATE_NO_PATH: 'ORB_BINDING_STATE_NO_PATH',\n ORB_BINDING_TRAIT_CYCLE: 'ORB_BINDING_TRAIT_CYCLE',\n ORB_BINDING_TRAIT_INVALID_FORMAT: 'ORB_BINDING_TRAIT_INVALID_FORMAT',\n ORB_BINDING_TRAIT_INVALID_POSITION: 'ORB_BINDING_TRAIT_INVALID_POSITION',\n ORB_BINDING_TRAIT_MISSING_NAME: 'ORB_BINDING_TRAIT_MISSING_NAME',\n ORB_BINDING_TRAIT_SELF_REFERENCE: 'ORB_BINDING_TRAIT_SELF_REFERENCE',\n ORB_BINDING_TRAIT_UNKNOWN: 'ORB_BINDING_TRAIT_UNKNOWN',\n ORB_BINDING_UNKNOWN_ENTITY: 'ORB_BINDING_UNKNOWN_ENTITY',\n ORB_BINDING_UNKNOWN_ROOT: 'ORB_BINDING_UNKNOWN_ROOT',\n\n // Entity / field\n ORB_E_DUPLICATE_FIELD: 'ORB_E_DUPLICATE_FIELD',\n ORB_E_EMPTY_ENUM_VALUES: 'ORB_E_EMPTY_ENUM_VALUES',\n ORB_E_INVALID_FIELD_NAME: 'ORB_E_INVALID_FIELD_NAME',\n ORB_E_INVALID_FIELD_TYPE: 'ORB_E_INVALID_FIELD_TYPE',\n ORB_E_INVALID_RELATION: 'ORB_E_INVALID_RELATION',\n ORB_E_LITERAL_UNION_DEFAULT_MISMATCH: 'ORB_E_LITERAL_UNION_DEFAULT_MISMATCH',\n ORB_E_MISSING_COLLECTION: 'ORB_E_MISSING_COLLECTION',\n ORB_E_MISSING_NAME: 'ORB_E_MISSING_NAME',\n ORB_E_NO_FIELDS: 'ORB_E_NO_FIELDS',\n\n // Effect / emit\n ORB_EFF_CALL_SERVICE_MISSING_ACTION: 'ORB_EFF_CALL_SERVICE_MISSING_ACTION',\n ORB_EFF_CALL_SERVICE_MISSING_HANDLERS: 'ORB_EFF_CALL_SERVICE_MISSING_HANDLERS',\n ORB_EFF_CALL_SERVICE_MISSING_SERVICE: 'ORB_EFF_CALL_SERVICE_MISSING_SERVICE',\n ORB_EFF_EMIT_INVALID_NAME: 'ORB_EFF_EMIT_INVALID_NAME',\n ORB_EFF_EMIT_KEY_INVALID: 'ORB_EFF_EMIT_KEY_INVALID',\n ORB_EFF_EMIT_UNDECLARED_EVENT: 'ORB_EFF_EMIT_UNDECLARED_EVENT',\n ORB_EFF_FETCH_INVALID_ENTITY: 'ORB_EFF_FETCH_INVALID_ENTITY',\n ORB_EFF_FETCH_INVALID_INCLUDE: 'ORB_EFF_FETCH_INVALID_INCLUDE',\n ORB_EFF_MISSING_FETCH_FOR_ENTITY: 'ORB_EFF_MISSING_FETCH_FOR_ENTITY',\n ORB_EFF_MISSING_REQUIRED_EMIT: 'ORB_EFF_MISSING_REQUIRED_EMIT',\n ORB_EFF_NAVIGATE_MISSING_PAYLOAD: 'ORB_EFF_NAVIGATE_MISSING_PAYLOAD',\n ORB_EFF_NAVIGATE_TARGET_UNREACHABLE: 'ORB_EFF_NAVIGATE_TARGET_UNREACHABLE',\n ORB_EFF_SET_INVALID_BINDING: 'ORB_EFF_SET_INVALID_BINDING',\n ORB_EFF_SET_PAYLOAD_NOT_ALLOWED: 'ORB_EFF_SET_PAYLOAD_NOT_ALLOWED',\n ORB_EFF_SLOT_CONFLICT: 'ORB_EFF_SLOT_CONFLICT',\n ORB_EFF_UNKNOWN_TYPE: 'ORB_EFF_UNKNOWN_TYPE',\n ORB_EMIT_DECLARED_BUT_UNFIRED: 'ORB_EMIT_DECLARED_BUT_UNFIRED',\n ORB_EMIT_PAYLOAD_EXTRA_FIELD: 'ORB_EMIT_PAYLOAD_EXTRA_FIELD',\n ORB_EMIT_PAYLOAD_FIELD_TYPE_MISMATCH: 'ORB_EMIT_PAYLOAD_FIELD_TYPE_MISMATCH',\n ORB_EMIT_PAYLOAD_MISSING_REQUIRED: 'ORB_EMIT_PAYLOAD_MISSING_REQUIRED',\n ORB_EMIT_SUCCESS_PAYLOAD_RETURN_MISMATCH: 'ORB_EMIT_SUCCESS_PAYLOAD_RETURN_MISMATCH',\n\n // Generic / cross-cutting structure\n ORB_GEN_DUPLICATE: 'ORB_GEN_DUPLICATE',\n ORB_GEN_INVALID_REFERENCE: 'ORB_GEN_INVALID_REFERENCE',\n ORB_GEN_INVALID_VALUE: 'ORB_GEN_INVALID_VALUE',\n ORB_GEN_MISSING_FIELD: 'ORB_GEN_MISSING_FIELD',\n\n // Orbital\n ORB_O_MISSING_PAGES: 'ORB_O_MISSING_PAGES',\n\n // Page\n ORB_P_DUPLICATE_PATH: 'ORB_P_DUPLICATE_PATH',\n ORB_P_EMPTY_TRAITS: 'ORB_P_EMPTY_TRAITS',\n ORB_P_INVALID_PATH: 'ORB_P_INVALID_PATH',\n ORB_P_INVALID_TRAIT_REF: 'ORB_P_INVALID_TRAIT_REF',\n ORB_P_INVALID_VIEW_TYPE: 'ORB_P_INVALID_VIEW_TYPE',\n ORB_P_MISSING_NAME: 'ORB_P_MISSING_NAME',\n ORB_P_MISSING_PATH: 'ORB_P_MISSING_PATH',\n ORB_P_MISSING_TRAITS: 'ORB_P_MISSING_TRAITS',\n ORB_P_SECTIONS_FORBIDDEN: 'ORB_P_SECTIONS_FORBIDDEN',\n\n // Query / search behaviors\n ORB_QUERY_MISSING_RECOMMENDED: 'ORB_QUERY_MISSING_RECOMMENDED',\n ORB_QUERY_MISSING_SEARCH: 'ORB_QUERY_MISSING_SEARCH',\n ORB_QUERY_UNKNOWN_SINGLETON: 'ORB_QUERY_UNKNOWN_SINGLETON',\n ORB_QUERY_UNSUPPORTED_PATTERN: 'ORB_QUERY_UNSUPPORTED_PATTERN',\n ORB_QUERY_UNUSED_SINGLETON: 'ORB_QUERY_UNUSED_SINGLETON',\n\n // Render-UI binding + prop validation\n ORB_RUI_BINDING_TYPE_MISMATCH: 'ORB_RUI_BINDING_TYPE_MISMATCH',\n ORB_RUI_ELEMENT_SHAPE_MISMATCH: 'ORB_RUI_ELEMENT_SHAPE_MISMATCH',\n ORB_RUI_EVENT_BINDING_PAYLOAD_MISMATCH: 'ORB_RUI_EVENT_BINDING_PAYLOAD_MISMATCH',\n ORB_RUI_INVALID_FIELD_PATH: 'ORB_RUI_INVALID_FIELD_PATH',\n ORB_RUI_INVALID_ITEM_ACTION: 'ORB_RUI_INVALID_ITEM_ACTION',\n ORB_RUI_INVALID_PATTERN: 'ORB_RUI_INVALID_PATTERN',\n ORB_RUI_INVALID_PROP: 'ORB_RUI_INVALID_PROP',\n ORB_RUI_INVALID_SLOT: 'ORB_RUI_INVALID_SLOT',\n ORB_RUI_MISSING_ACTION: 'ORB_RUI_MISSING_ACTION',\n ORB_RUI_MISSING_PATTERN_TYPE: 'ORB_RUI_MISSING_PATTERN_TYPE',\n ORB_RUI_MISSING_REQUIRED_PROP: 'ORB_RUI_MISSING_REQUIRED_PROP',\n ORB_RUI_PROP_TYPE_MISMATCH: 'ORB_RUI_PROP_TYPE_MISMATCH',\n ORB_RUI_UNKNOWN_ITEM_ACTION_PROP: 'ORB_RUI_UNKNOWN_ITEM_ACTION_PROP',\n\n // Schema-level\n ORB_S_EMPTY_VERSION: 'ORB_S_EMPTY_VERSION',\n ORB_S_MISSING_NAME: 'ORB_S_MISSING_NAME',\n ORB_S_NO_ORBITALS: 'ORB_S_NO_ORBITALS',\n\n // UI slots\n ORB_SLOT_CONTENTION: 'ORB_SLOT_CONTENTION',\n ORB_SLOT_CONTENTION_RUNTIME: 'ORB_SLOT_CONTENTION_RUNTIME',\n ORB_SLOT_HUD_NON_GAME: 'ORB_SLOT_HUD_NON_GAME',\n ORB_SLOT_INVALID_NAME: 'ORB_SLOT_INVALID_NAME',\n ORB_SLOT_INVALID_NESTING: 'ORB_SLOT_INVALID_NESTING',\n ORB_SLOT_MAIN_NOT_COVERED: 'ORB_SLOT_MAIN_NOT_COVERED',\n ORB_SLOT_PRIORITY_CONFLICT: 'ORB_SLOT_PRIORITY_CONFLICT',\n\n // Service\n ORB_SVC_DUPLICATE_NAME: 'ORB_SVC_DUPLICATE_NAME',\n ORB_SVC_INVALID_INTEGRATOR: 'ORB_SVC_INVALID_INTEGRATOR',\n ORB_SVC_INVALID_URL: 'ORB_SVC_INVALID_URL',\n ORB_SVC_MISSING_BASE_URL: 'ORB_SVC_MISSING_BASE_URL',\n ORB_SVC_MISSING_CAPABILITIES: 'ORB_SVC_MISSING_CAPABILITIES',\n ORB_SVC_MISSING_EVENTS: 'ORB_SVC_MISSING_EVENTS',\n ORB_SVC_MISSING_SERVER_PATH: 'ORB_SVC_MISSING_SERVER_PATH',\n ORB_SVC_RESERVED_EVENT: 'ORB_SVC_RESERVED_EVENT',\n ORB_SVC_UNKNOWN_TYPE: 'ORB_SVC_UNKNOWN_TYPE',\n\n // Trait\n ORB_T_CONFIG_OBJECT_ARRAY_FORBIDDEN: 'ORB_T_CONFIG_OBJECT_ARRAY_FORBIDDEN',\n ORB_T_CONFIG_SHAPE_MISMATCH: 'ORB_T_CONFIG_SHAPE_MISMATCH',\n ORB_T_CONFIG_TIER_INVALID: 'ORB_T_CONFIG_TIER_INVALID',\n ORB_T_DEPRECATED_UI: 'ORB_T_DEPRECATED_UI',\n ORB_T_DUPLICATE_NAME: 'ORB_T_DUPLICATE_NAME',\n ORB_T_DUPLICATE_STATE: 'ORB_T_DUPLICATE_STATE',\n ORB_T_DUPLICATE_TRANSITION: 'ORB_T_DUPLICATE_TRANSITION',\n ORB_T_ENTITY_NAME_SHADOWS_TRAIT_UNION: 'ORB_T_ENTITY_NAME_SHADOWS_TRAIT_UNION',\n ORB_T_EVENT_TYPE_WRONG_KIND: 'ORB_T_EVENT_TYPE_WRONG_KIND',\n ORB_T_EVT_DUPLICATE: 'ORB_T_EVT_DUPLICATE',\n ORB_T_EVT_EXTERNAL_MISSING_PAYLOAD: 'ORB_T_EVT_EXTERNAL_MISSING_PAYLOAD',\n ORB_T_EVT_INVALID_NAME: 'ORB_T_EVT_INVALID_NAME',\n ORB_T_EVT_SCOPE_MISMATCH: 'ORB_T_EVT_SCOPE_MISMATCH',\n ORB_T_EVT_TICK_UNDECLARED: 'ORB_T_EVT_TICK_UNDECLARED',\n ORB_T_EVT_UNDECLARED: 'ORB_T_EVT_UNDECLARED',\n ORB_T_INIT_MISSING_FETCH: 'ORB_T_INIT_MISSING_FETCH',\n ORB_T_INVALID_CATEGORY: 'ORB_T_INVALID_CATEGORY',\n ORB_T_INVALID_FORMAT: 'ORB_T_INVALID_FORMAT',\n ORB_T_INVALID_PATTERN_DEFAULT: 'ORB_T_INVALID_PATTERN_DEFAULT',\n ORB_T_INVALID_SLOT_DEFAULT: 'ORB_T_INVALID_SLOT_DEFAULT',\n ORB_T_INVALID_TRANSITION: 'ORB_T_INVALID_TRANSITION',\n ORB_T_MISSING_INIT_TRANSITION: 'ORB_T_MISSING_INIT_TRANSITION',\n ORB_T_MISSING_RENDER_UI: 'ORB_T_MISSING_RENDER_UI',\n ORB_T_MULTIPLE_INITIAL_STATES: 'ORB_T_MULTIPLE_INITIAL_STATES',\n ORB_T_NO_INITIAL_STATE: 'ORB_T_NO_INITIAL_STATE',\n ORB_T_TYPE_ANNOTATION_MISMATCH: 'ORB_T_TYPE_ANNOTATION_MISMATCH',\n ORB_T_TYPE_COMPOSITION_CONFLICT: 'ORB_T_TYPE_COMPOSITION_CONFLICT',\n ORB_T_TYPE_CYCLE: 'ORB_T_TYPE_CYCLE',\n ORB_T_TYPE_KIND_MISMATCH: 'ORB_T_TYPE_KIND_MISMATCH',\n ORB_T_TYPE_UNKNOWN: 'ORB_T_TYPE_UNKNOWN',\n ORB_T_TYPE_UNKNOWN_PARAM: 'ORB_T_TYPE_UNKNOWN_PARAM',\n ORB_T_TYPE_WRONG_ARG_COUNT: 'ORB_T_TYPE_WRONG_ARG_COUNT',\n ORB_T_UNDEFINED_EVENT: 'ORB_T_UNDEFINED_EVENT',\n ORB_T_UNDEFINED_TRAIT: 'ORB_T_UNDEFINED_TRAIT',\n\n // UI primitives (icons, etc.)\n ORB_UI_ICON_EMPTY: 'ORB_UI_ICON_EMPTY',\n ORB_UI_ICON_INVALID_FORMAT: 'ORB_UI_ICON_INVALID_FORMAT',\n ORB_UI_ICON_NOT_FOUND: 'ORB_UI_ICON_NOT_FOUND',\n\n // Cross-orbital constraints (listens, emits, IDs, payloads)\n ORB_X_CIRCULAR_DEPENDENCY: 'ORB_X_CIRCULAR_DEPENDENCY',\n ORB_X_CROSS_EMITTER_DECLARED_PAYLOAD_MISMATCH: 'ORB_X_CROSS_EMITTER_DECLARED_PAYLOAD_MISMATCH',\n ORB_X_DUPLICATE_ENTITY: 'ORB_X_DUPLICATE_ENTITY',\n ORB_X_EVENT_COLLISION: 'ORB_X_EVENT_COLLISION',\n ORB_X_INTERNAL_EVENT_EXPOSED: 'ORB_X_INTERNAL_EVENT_EXPOSED',\n ORB_X_LISTEN_SOURCE_UNRESOLVED: 'ORB_X_LISTEN_SOURCE_UNRESOLVED',\n ORB_X_MISSING_ORBITAL_NAME: 'ORB_X_MISSING_ORBITAL_NAME',\n ORB_X_ORPHAN_LISTENER: 'ORB_X_ORPHAN_LISTENER',\n ORB_X_PAYLOAD_MISMATCH: 'ORB_X_PAYLOAD_MISMATCH',\n ORB_X_RENDER_UI_EVENT_LITERAL_STALE: 'ORB_X_RENDER_UI_EVENT_LITERAL_STALE',\n ORB_X_UNRESOLVED_PATTERN_FIELD_REF: 'ORB_X_UNRESOLVED_PATTERN_FIELD_REF',\n ORB_X_UNUSED_EMISSION: 'ORB_X_UNUSED_EMISSION',\n\n // Identity — V4 dual-carry id integrity (`ORB_ID_*`). Mirrors\n // `orbital-compiler/src/phases/validation/id_integrity.rs`.\n ORB_ID_UNKNOWN_REF: 'ORB_ID_UNKNOWN_REF',\n ORB_ID_NAME_MISMATCH: 'ORB_ID_NAME_MISMATCH',\n ORB_ID_KIND_MISMATCH: 'ORB_ID_KIND_MISMATCH',\n ORB_ID_LEDGER_ORPHAN: 'ORB_ID_LEDGER_ORPHAN',\n} as const;\n\n/**\n * Narrow union of the codes documented in `KNOWN_VALIDATION_ERROR_CODES`.\n * Use this in exhaustive `switch` handlers; use the broader\n * `ValidationErrorCode` (open `string`) anywhere a fresh validator-side\n * code could plausibly arrive.\n */\nexport type KnownValidationErrorCode =\n typeof KNOWN_VALIDATION_ERROR_CODES[keyof typeof KNOWN_VALIDATION_ERROR_CODES];\n\n/**\n * Type guard: is the given code a known one? After the guard returns\n * true, the code can be narrowed to `KnownValidationErrorCode` via a\n * separate cast, because the type system can't track `in` against\n * `as const` records without an explicit narrowing helper.\n */\nexport function isKnownValidationErrorCode(\n code: ValidationErrorCode,\n): boolean {\n return code in KNOWN_VALIDATION_ERROR_CODES;\n}\n","/**\n * Living Orbital Schema — Golden Data Structure type system.\n *\n * The Living layer treats an `OrbitalSchema` as a heterogeneous attributed\n * graph: every vertex (orbital, entity, trait, state, transition, page, field,\n * event, effect, config-knob) carries a `SemanticAnnotation` + an embedding\n * vector, and the whole object can embed / validate / compile / similarity-\n * search / evolve itself. These are the canonical TYPE definitions shared by\n * the masar (Python) implementation and any TS implementation (rabit, Phase 5);\n * the numeric implementation lives outside @almadar/core.\n *\n * See `docs/Almadar_Masar_Golden_Data_Structure.md` §II/§III/§VIII. Existing\n * core vocabulary is reused, never re-defined: `SchemaChange`/`SemanticChangeKind`\n * (changeset.ts) back the evolution delta, `ValidationError`/`ValidationResult`\n * (validation.ts) back `validate()`, and the per-vertex payloads ARE the existing\n * structural types.\n *\n * @packageDocumentation\n */\n\nimport type { OrbitalSchema } from \"./schema.js\";\nimport type { OrbitalDefinition } from \"./orbital.js\";\nimport type { Entity } from \"./entity.js\";\nimport type { EntityField } from \"./field.js\";\nimport type { Trait, TraitConfigValue, ConfigFieldDeclaration } from \"./trait.js\";\nimport type { State, Transition, Event } from \"./state-machine.js\";\nimport type { Page } from \"./page.js\";\nimport type { Effect } from \"./effect.js\";\nimport type { SExpr, EvalContext, EventPayload } from \"./expression.js\";\nimport type { SchemaChange } from \"./changeset.js\";\nimport type { ValidationError, ValidationResult } from \"./validation.js\";\n// Type-only import (erased at build): no runtime cycle even though factory/\n// imports from types/. `AnnotationTier` is the documented superset of this.\nimport type { FactoryConfigTier } from \"../factory/types.js\";\n\n// ============================================================================\n// Semantic annotation (the NL → typed bridge)\n// ============================================================================\n\n/**\n * Decision-kind tier for the annotation layer. SUPERSET of the validator-\n * enforced `FactoryConfigTier` (`domain`/`policy`/`infra`/`presentation`/\n * `internal`), adding `essential` and `customization` for non-knob (event)\n * vertices that still carry the old vocabulary. Every `FactoryConfigTier`\n * value must be a member so `widenTier` stays a valid identity widen.\n */\nexport type AnnotationTier =\n | \"essential\"\n | \"domain\"\n | \"policy\"\n | \"infra\"\n | \"presentation\"\n | \"customization\"\n | \"internal\";\n\n/** Widen a knob's `FactoryConfigTier` into the annotation-layer `AnnotationTier`. */\nexport function widenTier(tier: FactoryConfigTier): AnnotationTier {\n return tier;\n}\n\n/**\n * The natural-language metadata attached to every living vertex — the text that\n * gets embedded for `similar()`/`match_intent()`. Today these four members live\n * scattered inline across core types (`EntityField.description`/`synonyms`,\n * `Event`/`TraitEventContract`.`description`/`synonyms`/`tier`,\n * `FactoryConfigParam.label`/`description`/`synonyms`/`tier`); `SemanticAnnotation`\n * is the uniform bundle of them, generalized to every vertex.\n */\nexport interface SemanticAnnotation {\n description: string;\n synonyms: string[];\n label: string;\n tier: AnnotationTier;\n}\n\n// ============================================================================\n// ML scalar/vector aliases\n// ============================================================================\n\n/**\n * A dense semantic embedding. In-memory form is `Float32Array`; the at-rest\n * JSON form (e.g. rabit's `knob-embeddings.json`) is `number[]`.\n */\nexport type SemanticVector = Float32Array;\n\n/** A probability in `[0, 1]`. */\nexport type Probability = number;\n\n/** Whether a semantic gate's transition is open, closed, or ~0.5 ambiguous. */\nexport type GateState = \"open\" | \"closed\" | \"ambiguous\";\n\n// ============================================================================\n// Graph vertex / edge typing\n// ============================================================================\n\n/** The typed vertex kinds of the living attributed graph (§II.1 `V_*`). */\nexport type VertexType =\n | \"orbital\"\n | \"entity\"\n | \"trait\"\n | \"state\"\n | \"transition\"\n | \"page\"\n | \"field\"\n | \"event\"\n | \"effect\"\n | \"value\";\n\n/**\n * A stable, structural, embedding-independent vertex id (path style, e.g.\n * `orb:Cart/trt:AddItem/st:Open`). Re-embedding never changes it.\n */\nexport type VertexId = string;\n\n/** The typed directed edge kinds of the living attributed graph (§II.1 `E_*`). */\nexport type EdgeType =\n | \"belongs_to\"\n | \"has_trait\"\n | \"has_state\"\n | \"has_transition\"\n | \"from_state\"\n | \"to_state\"\n | \"on_event\"\n | \"emits\"\n | \"listens\"\n | \"cross_orbital\"\n | \"has_effect\"\n | \"effect_seq\"\n | \"data_flow\"\n | \"ref_in_effect\"\n | \"has_page\"\n | \"has_field\"\n | \"ref\";\n\n/**\n * An effect vertex's payload. Effects are positional S-expression tuples\n * (`Effect`), so the synthesized coordinates (operator, owning transition,\n * positional index) carry the addressing the raw tuple lacks.\n */\nexport interface EffectPayload {\n sexpr: Effect;\n operator: string;\n transitionId: VertexId;\n index: number;\n}\n\n/**\n * A config-knob vertex's payload — joins a `Trait.config` dict key with its\n * declaration (no single core type carries both).\n */\nexport interface KnobPayload {\n name: string;\n declaration: ConfigFieldDeclaration;\n traitId: VertexId;\n}\n\n/** The union of every kind of vertex payload (the existing structural types). */\nexport type VertexPayload =\n | OrbitalDefinition\n | Entity\n | Trait\n | State\n | Transition\n | Page\n | EntityField\n | Event\n | EffectPayload\n | KnobPayload;\n\n/**\n * One vertex of the living graph: a structural payload plus its annotation and\n * embedding. Identity is `id` (structural); annotation/embedding are derived.\n */\nexport interface LivingVertex<P extends VertexPayload = VertexPayload> {\n id: VertexId;\n vtype: VertexType;\n payload: P;\n annotation: SemanticAnnotation;\n /** Lazily populated — undefined until the schema's `embed()` runs. */\n embedding?: SemanticVector;\n}\n\nexport type LivingOrbital = LivingVertex<OrbitalDefinition>;\nexport type LivingEntity = LivingVertex<Entity>;\nexport type LivingTrait = LivingVertex<Trait>;\nexport type LivingState = LivingVertex<State>;\nexport type LivingTransition = LivingVertex<Transition>;\nexport type LivingPage = LivingVertex<Page>;\nexport type LivingField = LivingVertex<EntityField>;\nexport type LivingEvent = LivingVertex<Event>;\nexport type LivingEffect = LivingVertex<EffectPayload>;\nexport type LivingValue = LivingVertex<KnobPayload>;\n\n/**\n * One directed edge. `via` carries the transition vertex for the ternary\n * `has_transition(from, via, to)` decomposition; `seq` carries the ordering for\n * `effect_seq`.\n */\nexport interface LivingEdge {\n etype: EdgeType;\n src: VertexId;\n dst: VertexId;\n via?: VertexId;\n seq?: number;\n}\n\n// ============================================================================\n// Evolution + lineage (composes changeset.ts vocabulary)\n// ============================================================================\n\n/**\n * A single evolution step over the living graph. `modified` reuses the canonical\n * `SchemaChange` (changeset.ts) rather than inventing a parallel operation enum;\n * `intent` is the natural-language delta that caused the change.\n */\nexport interface EvolutionDelta {\n added: VertexId[];\n removed: VertexId[];\n modified: SchemaChange[];\n intent: string;\n}\n\n/** One immutable entry in a living schema's evolution lineage (§6.2). */\nexport interface LineageEntry {\n root: string;\n parent: string;\n delta: EvolutionDelta;\n intent: string;\n time: number;\n valid: boolean;\n}\n\n// ============================================================================\n// Effect-simulation results\n// ============================================================================\n\n/** The result of simulating one effect's S-expression (§4.6) — pure, no I/O. */\nexport interface EffectResult {\n result: SExpr;\n sideEffects: string[];\n emittedEvents: string[];\n}\n\n// ============================================================================\n// The living schema contract (§VIII) — implemented by masar (Python) + rabit (TS)\n// ============================================================================\n\n/**\n * The operation surface of a living orbital schema. This interface is the shared\n * CONTRACT; the numeric implementation (embedding, cosine, validator shelling)\n * is language-specific. `compile()` is the bridge back to the canonical\n * `OrbitalSchema` (the ML surface — annotations beyond `description`, embeddings,\n * gates — is stripped).\n */\nexport interface LivingOrbitalSchema {\n // Orbital container\n orbitals: LivingOrbital[];\n addOrbital(name: string): LivingOrbital;\n removeOrbital(name: string): void;\n getOrbital(name: string): LivingOrbital;\n\n // Semantic layer\n annotations: Map<VertexId, SemanticAnnotation>;\n embeddings: Map<VertexId, SemanticVector>;\n\n // Structural operations\n embed(): void;\n compile(): OrbitalSchema;\n validate(): ValidationResult;\n\n // Semantic retrieval\n similar(query: string | SemanticVector, k: number, type?: VertexType): LivingVertex[];\n matchIntent(intent: string, threshold?: number): { vertex: LivingVertex; score: number }[];\n\n // Predictive operations\n predictConfig(intent: string, trait: Trait): Record<string, TraitConfigValue>;\n predictPresence(intent: string): Set<string>;\n suggestOrbital(intent: string): LivingOrbital[];\n suggestEntity(intent: string): LivingEntity[];\n suggestTrait(intent: string): LivingTrait[];\n\n // Evolution\n evolve(intentDelta: string): LivingOrbitalSchema;\n compose(other: LivingOrbitalSchema): LivingOrbitalSchema;\n repair(errors: ValidationError[]): LivingOrbitalSchema;\n\n // Cross-orbital wiring\n wireEvents(source: LivingEvent, target: LivingEvent): void;\n findWiringGaps(): LivingEvent[];\n\n // Effect simulation\n simulateEffect(effect: LivingEffect, context: EvalContext): EffectResult;\n simulateInteraction(effect: LivingEffect, path: string[]): { event: LivingEvent; payload: EventPayload };\n traceDataFlow(transition: LivingTransition, inputEntity: LivingEntity): LivingEffect[];\n\n // Gates\n evaluateGates(intentEmbedding: SemanticVector): Map<VertexId, GateState[]>;\n sampleTrajectory(intentEmbedding: SemanticVector, steps: number): LivingVertex[];\n\n // Lineage\n lineage: LineageEntry[];\n checkout(hash: string): LivingOrbitalSchema;\n diff(hash1: string, hash2: string): EvolutionDelta;\n}\n"]}