@almadar/core 11.1.0 → 11.2.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.
- package/dist/{builders-ZJeyUxCs.d.ts → builders-C4TIhiks.d.ts} +92 -92
- package/dist/builders.d.ts +4 -4
- package/dist/builders.js +3 -3
- package/dist/{bus-BwqO-o6e.d.ts → bus-do1P9luP.d.ts} +4 -4
- package/dist/{chunk-ENOCKYGA.js → chunk-2NKK2X53.js} +3 -3
- package/dist/{chunk-ENOCKYGA.js.map → chunk-2NKK2X53.js.map} +1 -1
- package/dist/{chunk-TDNQT3M3.js → chunk-3DZOFI53.js} +4 -4
- package/dist/{chunk-TDNQT3M3.js.map → chunk-3DZOFI53.js.map} +1 -1
- package/dist/{chunk-5YTPYMPZ.js → chunk-6H3UIZR2.js} +3 -3
- package/dist/{chunk-5YTPYMPZ.js.map → chunk-6H3UIZR2.js.map} +1 -1
- package/dist/{chunk-FGT5OS2Y.js → chunk-7B4JRMRL.js} +15 -3
- package/dist/chunk-7B4JRMRL.js.map +1 -0
- package/dist/{chunk-5WQ3U7NJ.js → chunk-IE6WCCJP.js} +14 -2
- package/dist/chunk-IE6WCCJP.js.map +1 -0
- package/dist/{chunk-PNGFWLHD.js → chunk-LPJ7GKRM.js} +18 -8
- package/dist/chunk-LPJ7GKRM.js.map +1 -0
- package/dist/{chunk-SNZYN7UA.js → chunk-N3CK4AYW.js} +106 -16
- package/dist/{chunk-SNZYN7UA.js.map → chunk-N3CK4AYW.js.map} +1 -1
- package/dist/{chunk-E4T2MQAV.js → chunk-PYYHDYTD.js} +3 -3
- package/dist/{chunk-E4T2MQAV.js.map → chunk-PYYHDYTD.js.map} +1 -1
- package/dist/{chunk-Z7BI7DE7.js → chunk-VIHQKKTZ.js} +45 -15
- package/dist/chunk-VIHQKKTZ.js.map +1 -0
- package/dist/{chunk-GF7KCLNR.js → chunk-VOFHP52Z.js} +29 -4
- package/dist/chunk-VOFHP52Z.js.map +1 -0
- package/dist/{chunk-66Q5VX2F.js → chunk-ZDIHVDTW.js} +6 -6
- package/dist/chunk-ZDIHVDTW.js.map +1 -0
- package/dist/{effect-BLpc68hI.d.ts → effect-Dr--GXRe.d.ts} +44 -36
- package/dist/{effect-result-AQSZ27vS.d.ts → effect-result-geymPT9w.d.ts} +39 -5
- package/dist/factory/index.d.ts +2 -2
- package/dist/factory/index.js +4 -4
- package/dist/factory-runtime/index.d.ts +2 -2
- package/dist/factory-runtime/index.js +10 -10
- package/dist/fixtures.d.ts +3 -3
- package/dist/fixtures.js +2 -2
- package/dist/i18n/index.js +1 -1
- package/dist/{index-CIlDAOq-.d.ts → index-C8mF8btS.d.ts} +20 -9
- package/dist/index.d.ts +12 -12
- package/dist/index.js +15 -15
- package/dist/kernel-wire.d.ts +2 -2
- package/dist/kernel-wire.js +1 -1
- package/dist/language/validation-codes.json +25 -0
- package/dist/language/vocabulary.json +2 -0
- package/dist/language-data.js +1 -1
- package/dist/patterns/component-mapping.json +1 -1
- package/dist/patterns/definitions.d.ts +1 -1
- package/dist/patterns/definitions.js +1 -1
- package/dist/patterns/event-contracts.json +1 -1
- package/dist/patterns/index.d.ts +2 -2
- package/dist/patterns/index.js +2 -2
- package/dist/patterns/patterns-registry.json +104 -14
- package/dist/patterns/registry.json +104 -14
- package/dist/{trait-SNHnODBK.d.ts → trait-D9MjuwGC.d.ts} +8 -8
- package/dist/types/index.d.ts +7 -7
- package/dist/types/index.js +7 -7
- package/dist/{types-DSAL7TDM.d.ts → types-Bi-KSa0a.d.ts} +2 -2
- package/package.json +4 -4
- package/dist/chunk-5WQ3U7NJ.js.map +0 -1
- package/dist/chunk-66Q5VX2F.js.map +0 -1
- package/dist/chunk-FGT5OS2Y.js.map +0 -1
- package/dist/chunk-GF7KCLNR.js.map +0 -1
- package/dist/chunk-PNGFWLHD.js.map +0 -1
- package/dist/chunk-Z7BI7DE7.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/factory/knob-defs.ts","../src/factory/questions/generate.ts","../src/factory/questions/reducer.ts","../src/factory/mutate.ts","../src/factory/params-schema.ts"],"names":[],"mappings":"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","file":"chunk-TDNQT3M3.js","sourcesContent":["import type { FactoryConfigParam, FactorySignatureCatalog } from './types.js';\n\n/**\n * Rehydrate `overridableConfigKeys` from a catalog's `knobDefs` table,\n * in place, and drop the wire-only `overridableConfigKeyRefs`.\n *\n * Call this immediately after parsing a catalog and before handing it to any\n * consumer — every consumer reads `overridableConfigKeys` and must never see\n * a signature mid-rehydration.\n *\n * A catalog with no `knobDefs` is returned untouched, which is what makes the\n * format change backward compatible: old catalogs still carry their knobs\n * inline. An out-of-range or missing ref is skipped rather than throwing —\n * a truncated table should degrade to fewer knobs, not take down every\n * consumer of the catalog.\n */\nexport function rehydrateKnobDefs(catalog: FactorySignatureCatalog): FactorySignatureCatalog {\n const table = catalog.knobDefs;\n if (table === undefined || table.length === 0) return catalog;\n for (const sig of catalog.signatures) {\n for (const trait of sig.traits ?? []) {\n const refs = trait.overridableConfigKeyRefs;\n if (refs === undefined) continue;\n const knobs: FactoryConfigParam[] = [];\n for (const i of refs) {\n const knob = table[i];\n if (knob !== undefined) knobs.push(knob);\n }\n const mutable = trait as {\n overridableConfigKeys: ReadonlyArray<FactoryConfigParam>;\n overridableConfigKeyRefs?: ReadonlyArray<number>;\n };\n mutable.overridableConfigKeys = knobs;\n delete mutable.overridableConfigKeyRefs;\n }\n // Orbital-level `config` — same table, same ref/rehydrate shape as the\n // per-trait `overridableConfigKeyRefs` above.\n const configRefs = sig.configRefs;\n if (configRefs === undefined) continue;\n const configKnobs: FactoryConfigParam[] = [];\n for (const i of configRefs) {\n const knob = table[i];\n if (knob !== undefined) configKnobs.push(knob);\n }\n const mutableSig = sig as {\n config?: ReadonlyArray<FactoryConfigParam>;\n configRefs?: ReadonlyArray<number>;\n };\n mutableSig.config = configKnobs;\n delete mutableSig.configRefs;\n }\n return catalog;\n}\n","/**\n * `generateQuestions(plan, catalog, ruleOverlay?)`.\n *\n * Deterministic, no LLM call. Walks each `FactoryCallSite` in the\n * durable plan against its matching `FactorySignature` and emits one\n * open question per advertised knob the user hasn't already filled.\n *\n * Two families of questions, both source-derived:\n *\n * 1. CONFIG-KEY — one question per\n * `signature.traits[*].overridableConfigKeys[*]`. Each entry is a\n * `FactoryConfigParam` carrying `{ key, type, default?, label?,\n * description?, enumValues?, items?, properties?, tier? }` lifted\n * directly from the source `.lolo` `config { }` block. The widget\n * choice falls out of `deriveInputType` (reads `items.properties`\n * and `properties` so structured types render proper editors, not\n * JSON textareas); the prompt comes from `label` (or a humanized\n * fallback of `key`); the default value pre-fills the widget.\n * Knobs tagged `tier: 'internal'` are filtered out entirely.\n *\n * 2. CAPABILITY-DRIVEN — one question per unique\n * `signature.traits[*].capabilities[*]` tag NOT already covered\n * by `ruleOverlay.rules[].capability`. Surfaces a `set-rule`\n * mutation template scoped to the bound entity.\n *\n * @packageDocumentation\n */\n\nimport type {\n FactoryCallSite,\n FactoryConfigParam,\n FactoryParamValue,\n FactorySignature,\n FactorySignatureEntityField,\n FactoryTraitSignature,\n} from '../types.js';\nimport type { RuleOverlay } from '../overlays.js';\nimport type { EntityField } from '../../types/field.js';\nimport type {\n DomainQuestion,\n DomainQuestionInputType,\n} from './types.js';\n\nexport function generateQuestions(\n plan: ReadonlyArray<FactoryCallSite>,\n catalog: ReadonlyArray<FactorySignature>,\n ruleOverlay?: RuleOverlay,\n /**\n * Optional user-authored prompt from the current session. Carried\n * through so downstream consumers (route handlers, ranking passes)\n * can re-order questions by relevance without re-generating. Does\n * not affect the emitted set — only threading and ordering.\n */\n _userPrompt?: string,\n): DomainQuestion[] {\n const out: DomainQuestion[] = [];\n const ruleCapabilities = collectRuleCapabilities(ruleOverlay);\n\n for (const call of plan) {\n const signature = findSignature(catalog, call.organism, call.orbital);\n if (!signature) continue;\n out.push(...configKeyQuestions(call, signature));\n out.push(...entityFieldQuestions(call, signature));\n out.push(...capabilityQuestions(call, signature, ruleCapabilities));\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// Config-key questions — derived from the source `config { }` declaration\n// ---------------------------------------------------------------------------\n\nconst TIER_D_NAMED_PRIMITIVES = new Set([\n 'layoutMode',\n 'layoutPattern',\n 'viewPattern',\n 'detailPattern',\n 'detailSlot',\n 'contentTrait',\n]);\n\nconst TIER_D_TYPES = new Set(['trait', 'slot', 'pattern', 'event']);\n\nfunction configKeyQuestions(\n call: FactoryCallSite,\n signature: FactorySignature,\n): DomainQuestion[] {\n const out: DomainQuestion[] = [];\n for (const trait of signature.traits) {\n for (const param of trait.overridableConfigKeys) {\n if (param.tier === 'internal') continue;\n if (TIER_D_TYPES.has(param.type)) continue;\n if (TIER_D_NAMED_PRIMITIVES.has(param.key)) continue;\n out.push(buildConfigKeyQuestion(call, trait, param));\n }\n }\n return out;\n}\n\nfunction buildConfigKeyQuestion(\n call: FactoryCallSite,\n trait: FactoryTraitSignature,\n param: FactoryConfigParam,\n): DomainQuestion {\n // `@label` renders verbatim; the fallback is a type guard, not inference —\n // a domain-tier knob reaching it is a missing-`@label` source defect.\n const question = param.label ?? humanizeKey(param.key);\n // Call-site override (organism pre-pinned this knob) takes precedence\n // over the atom-author's default. The question still renders so the\n // user can confirm or change the pre-pinned value.\n const callSiteOverride = callSiteOverrideValue(call, trait.name, param.key);\n const effectiveDefault =\n callSiteOverride !== undefined ? callSiteOverride : param.default;\n\n // `helpText` carries the param's authored description (how to answer).\n // `reason` is the distinct \"why you're seeing this\" — only set when it\n // adds information beyond what helpText already says.\n const helpText = param.description;\n const syntheticReason =\n `Customizes \"${param.key}\" on the ${trait.name} trait. ` +\n (effectiveDefault !== undefined\n ? `Default: ${stringifyDefault(effectiveDefault)}.`\n : `No default — leave blank to inherit the factory's behavior.`);\n const reason = helpText !== undefined ? undefined : syntheticReason;\n\n const isAdvanced = !isPrimaryTier(param.tier);\n\n const out: DomainQuestion = {\n id: `${factoryCallPlanOrbitalName(call)}.${trait.name}.${param.key}`,\n orbitalName: factoryCallPlanOrbitalName(call),\n question,\n inputType: deriveInputType(param),\n mutationTemplate: {\n kind: 'set-trait-override-config',\n orbitalName: factoryCallPlanOrbitalName(call),\n traitName: trait.name,\n configKey: param.key,\n },\n };\n if (reason !== undefined) {\n out.reason = reason;\n }\n if (helpText !== undefined) {\n out.helpText = helpText;\n }\n if (effectiveDefault !== undefined) {\n out.defaultValue = effectiveDefault;\n }\n if (param.enumValues && param.enumValues.length > 0) {\n out.suggestedAnswers = param.enumValues;\n }\n if (param.items) {\n out.itemSchema = param.items;\n }\n if (param.properties) {\n out.objectSchema = param.properties;\n }\n if (param.tier) {\n out.tier = param.tier;\n }\n if (isAdvanced) {\n out.advanced = true;\n }\n const weight = tierWeight(param.tier);\n out.weight = weight;\n out.priority = weight;\n return out;\n}\n\n/**\n * Impact weight by decision kind — the spine of both the wizard's\n * prescient-first ordering and its Confidence score. policy/domain are the\n * decisions that change what the business does; infra is operational wiring;\n * presentation is polish. Untagged defaults to presentation (1). `internal`\n * never reaches here (filtered in `configKeyQuestions`).\n */\nfunction tierWeight(tier: FactoryConfigParam['tier']): number {\n switch (tier) {\n case 'domain':\n case 'policy':\n return 3;\n case 'infra':\n return 2;\n case 'internal':\n return 0;\n case 'presentation':\n default:\n return 1;\n }\n}\n\n/** `true` only for the two tiers that render inline (not collapsed). */\nfunction isPrimaryTier(tier: FactoryConfigParam['tier']): boolean {\n return tier === 'domain' || tier === 'policy';\n}\n\nfunction callSiteOverrideValue(\n call: FactoryCallSite,\n traitName: string,\n configKey: string,\n): FactoryParamValue | undefined {\n const override = call.params.traitOverrides?.[traitName];\n if (!override?.config) return undefined;\n if (!Object.prototype.hasOwnProperty.call(override.config, configKey)) {\n return undefined;\n }\n return override.config[configKey] as FactoryParamValue;\n}\n\n/**\n * Pick a widget for a config-key question from the param's typed\n * declaration + its structural carriers. The type tag is lifted\n * verbatim from `.lolo`; `items.properties` and `properties` carry the\n * per-element / per-property schema for structured types so the studio\n * can render a real form instead of a JSON textarea.\n *\n * - `[T]` with `items.properties` → `listOfObjects` (repeatable form)\n * - `[T]` with `enumValues` → `multiselect` (closed checkboxes)\n * - `[T]` otherwise → `tagList` (free-form chips)\n * - `object` with `properties` → `objectForm` (per-property form)\n * - `object` otherwise → `text` (rare; flagged by tests)\n * - `number` / `integer` → `number`\n * - `boolean` → `boolean`\n * - `enum` → `enum`\n * - `string` with `enumValues` → `enum`\n * - `string` → `text`\n */\nexport function deriveInputType(\n param: FactoryConfigParam,\n): DomainQuestionInputType {\n if (param.type.startsWith('[')) {\n if (\n param.items?.properties &&\n Object.keys(param.items.properties).length > 0\n ) {\n return 'listOfObjects';\n }\n if (param.enumValues && param.enumValues.length > 0) {\n return 'multiselect';\n }\n return 'tagList';\n }\n // Typed map (`Map<K,V>`) — a dynamic-key dictionary; edited as an object.\n if (param.type.startsWith('Map<')) {\n return 'objectForm';\n }\n if (param.type === 'object') {\n if (param.properties && Object.keys(param.properties).length > 0) {\n return 'objectForm';\n }\n return 'text';\n }\n switch (param.type) {\n case 'number':\n case 'integer':\n return 'number';\n case 'boolean':\n return 'boolean';\n case 'enum':\n return 'enum';\n case 'string':\n return param.enumValues && param.enumValues.length > 0 ? 'enum' : 'text';\n default:\n return 'text';\n }\n}\n\n/**\n * Humanize a camelCase / kebab-case key into a question prompt\n * fallback when the source `.lolo` doesn't author an explicit label.\n *\n * `itemActions` → `\"Item Actions\"`\n * `owner-field` → `\"Owner Field\"`\n * `URL` → `\"URL\"` (preserves all-caps runs)\n */\nexport function humanizeKey(key: string): string {\n const parts = key\n .replace(/[-_]+/g, ' ')\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\n .split(' ')\n .filter((s) => s.length > 0);\n return parts\n .map((p) => (/^[A-Z]+$/.test(p) ? p : p.charAt(0).toUpperCase() + p.slice(1)))\n .join(' ');\n}\n\nfunction stringifyDefault(v: FactoryParamValue): string {\n if (typeof v === 'string') return JSON.stringify(v);\n if (typeof v === 'number' || typeof v === 'boolean') return String(v);\n if (Array.isArray(v)) return `${v.length} item${v.length === 1 ? '' : 's'}`;\n return 'object';\n}\n\n// ---------------------------------------------------------------------------\n// Entity-field question — lets the user add or override data model fields\n// ---------------------------------------------------------------------------\n\n/**\n * Emit one multiselect question per call site that has a canonical entity.\n *\n * The widget shows the entity's canonical fields as labelled checkboxes;\n * the user confirms or deselects them. The answer (selected field names)\n * flows through the UI's name→EntityField lookup via `fieldCandidates`,\n * then into `answersToMutations` → `set-orbital-entity-fields` → `applyEntityFields`\n * in `translate.ts` (additive/override semantics).\n *\n * `suggestedAnswers` = candidate field name strings (drives checkbox list).\n * `defaultValue` = the canonical field-name set pre-selected.\n * `fieldCandidates` = name → EntityField for the UI's resolution step.\n * `fieldDescriptions` = name → description for checkbox sub-labels.\n *\n * Phrased without an article so no \"a\"/\"an\" guess is needed: no\n * source-tagged noun phrase for an entity exists yet — the only\n * candidate, `defaultLabels.entitySingular`, lives on a different\n * registry AND defaults to the raw entity name, so it would not help.\n * An authored `@entityLabel` on the entity is the real fix.\n *\n * Type note: `FactorySignatureEntityField.type` is `SchemaFieldType` while\n * `EntityField` is a discriminated union. `signatureFieldToEntityField` maps\n * each variant faithfully.\n */\nfunction entityFieldQuestions(\n call: FactoryCallSite,\n signature: FactorySignature,\n): DomainQuestion[] {\n if (signature.entities.length === 0) return [];\n const entity = signature.entities[0];\n const entityName = call.params.entityName ?? entity.name;\n\n const candidateFields = entity.fields.map(signatureFieldToEntityField);\n const fieldCandidates: Record<string, EntityField> = {};\n const fieldDescriptions: Record<string, string> = {};\n const candidateNames: string[] = [];\n\n for (let i = 0; i < entity.fields.length; i++) {\n const sig = entity.fields[i];\n const ef = candidateFields[i];\n const name = sig.name;\n candidateNames.push(name);\n fieldCandidates[name] = ef;\n if (sig.description) {\n fieldDescriptions[name] = sig.description;\n }\n }\n\n const weight = tierWeight('domain');\n const q: DomainQuestion = {\n id: `${factoryCallPlanOrbitalName(call)}.__entityFields`,\n orbitalName: factoryCallPlanOrbitalName(call),\n question: `Fields for ${entityName}`,\n reason: `Defines the data model for ${entityName}. Pick the fields that matter for your use case.`,\n inputType: 'multiselect',\n mutationTemplate: {\n kind: 'set-orbital-entity-fields',\n orbitalName: factoryCallPlanOrbitalName(call),\n },\n suggestedAnswers: candidateNames,\n defaultValue: candidateNames,\n fieldCandidates,\n tier: 'domain',\n weight,\n priority: weight,\n };\n if (Object.keys(fieldDescriptions).length > 0) {\n q.fieldDescriptions = fieldDescriptions;\n }\n return [q];\n}\n\n/**\n * Map a `FactorySignatureEntityField` to an `EntityField` without unsafe casts.\n * Scalar types translate directly to `ScalarEntityField`. `array` and `object`\n * translate to their variants (no extra required fields). `enum` produces an\n * `EnumEntityField` when `values` is present, otherwise falls back to `string`.\n * `relation` produces a `RelationEntityField` when `relation` is present, otherwise\n * falls back to `string`.\n */\nfunction signatureFieldToEntityField(f: FactorySignatureEntityField): EntityField {\n const base = {\n name: f.name,\n required: f.required,\n description: f.description,\n synonyms: f.synonyms,\n intrinsic: f.intrinsic,\n } as const;\n switch (f.type) {\n case 'string':\n case 'number':\n case 'boolean':\n case 'date':\n case 'timestamp':\n case 'datetime':\n // Semantic string domains carry no dependent payload, so they pass through\n // as-is and the question widget narrows the input accordingly.\n case 'email':\n case 'url':\n case 'phone':\n case 'uuid':\n case 'image':\n return { ...base, type: f.type };\n case 'array':\n return { ...base, type: 'array' };\n case 'object':\n return { ...base, type: 'object' };\n case 'enum':\n if (Array.isArray(f.values) && f.values.length > 0) {\n return { ...base, type: 'enum', values: f.values };\n }\n // No values present — safe fallback; payload would be invalid without them.\n return { ...base, type: 'string' };\n case 'relation':\n if (f.relation !== undefined) {\n return { ...base, type: 'relation', relation: f.relation };\n }\n // No relation config present — safe fallback.\n return { ...base, type: 'string' };\n case 'node':\n // Renderable content is computed by the trait's effects, never asked\n // for in a questionnaire — no question payload beyond the tag.\n return { ...base, type: 'node' };\n case 'event':\n // Event-name reference (struct-alias member, e.g. `ItemAction.event`)\n // — authored by the trait, never asked for in a questionnaire, same\n // posture as `node`.\n return { ...base, type: 'event' };\n case 'money':\n case 'instant':\n case 'file':\n case 'bytes':\n // No type-dependent payload — same posture as the semantic string\n // domains above.\n return { ...base, type: f.type };\n default: {\n const _exhaustive: never = f.type;\n return { ...base, type: 'string' };\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Capability-driven questions\n// ---------------------------------------------------------------------------\n\n/**\n * Emit one yes/no question per unique capability not already covered by\n * the ruleOverlay. Capabilities whose name matches a `policy`-tier config\n * knob on the same trait are skipped — that knob already gives the user\n * a direct toggle for the governance behavior, so a second question adds\n * noise. Only capabilities with no backing policy knob get a question.\n *\n * The emitted question uses `inputType: 'boolean'` (a plain yes/no toggle)\n * with a plain-English prompt and `helpText` explaining what enabling it\n * does. The `set-rule` mutation template remains unchanged.\n */\nfunction capabilityQuestions(\n call: FactoryCallSite,\n signature: FactorySignature,\n ruleCapabilities: ReadonlySet<string>,\n): DomainQuestion[] {\n const entityName =\n call.params.entityName ?? signature.entities[0]?.name ?? factoryCallPlanOrbitalName(call);\n const seen = new Set<string>();\n const out: DomainQuestion[] = [];\n for (const trait of signature.traits) {\n const policyKnobKeys = new Set(\n trait.overridableConfigKeys\n .filter((p) => p.tier === 'policy')\n .map((p) => p.key),\n );\n for (const cap of trait.capabilities) {\n if (seen.has(cap)) continue;\n seen.add(cap);\n if (ruleCapabilities.has(cap)) continue;\n // Skip if a policy-tier knob on this trait already surfaces the toggle.\n if (policyKnobKeys.has(cap)) continue;\n out.push({\n id: `${factoryCallPlanOrbitalName(call)}.capability.${cap}`,\n orbitalName: factoryCallPlanOrbitalName(call),\n question: capabilityPrompt(cap, entityName),\n helpText: capabilityHelp(cap, trait),\n capability: cap,\n inputType: 'boolean',\n mutationTemplate: {\n kind: 'set-rule',\n capability: cap,\n appliesTo: [entityName],\n },\n // Capabilities encode governance/policy decisions — high impact.\n weight: 3,\n priority: 3,\n });\n }\n }\n return out;\n}\n\n/** Plain-English yes/no prompt for a capability toggle. */\nfunction capabilityPrompt(capability: string, entity: string): string {\n const label = humanizeKey(capability);\n return `Enable ${label} for ${entity}?`;\n}\n\n/** How-to-answer help text for a capability question. */\nfunction capabilityHelp(\n capability: string,\n trait: FactoryTraitSignature,\n): string {\n return `Turns on the \"${capability}\" behavior from the ${trait.name} trait. Say yes to wire a governance rule into the schema.`;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction findSignature(\n catalog: ReadonlyArray<FactorySignature>,\n organism: string,\n orbital: string,\n): FactorySignature | undefined {\n return catalog.find((s) => s.organism === organism && s.orbital === orbital);\n}\n\nfunction collectRuleCapabilities(\n overlay: RuleOverlay | undefined,\n): ReadonlySet<string> {\n const out = new Set<string>();\n for (const r of overlay?.rules ?? []) {\n if (typeof r.capability === 'string') out.add(r.capability);\n }\n return out;\n}\n\n/** The plan's name for a call site's orbital — `orbitalName` when it differs from the catalog `orbital`. */\nexport function factoryCallPlanOrbitalName(call: FactoryCallSite): string {\n return call.orbitalName ?? call.orbital;\n}\n","/**\n * `answersToMutations(answers, questions)` — turns a\n * `DomainQuestionAnswers` record into a typed\n * `FactoryCallPlanMutation[]`. Each question's `mutationTemplate`\n * matches one variant of the union; the answer fills in the value.\n * `null` (or omitted) answers produce no mutation.\n *\n * @packageDocumentation\n */\n\nimport type { EntityField } from '../../types/field.js';\nimport type { EntityPersistence } from '../../types/entity.js';\nimport type { TraitReference } from '../../types/trait.js';\nimport type { FactoryParamValue } from '../types.js';\nimport type { RuleOverlayEntry } from '../overlays.js';\nimport type { FactoryCallPlanMutation } from '../mutate.js';\nimport type {\n DomainQuestion,\n DomainQuestionAnswer,\n DomainQuestionAnswers,\n FactoryCallPlanMutationTemplate,\n} from './types.js';\n\nconst PERSISTENCE_VALUES: ReadonlyArray<EntityPersistence> = [\n 'persistent',\n 'runtime',\n];\n\nexport function answersToMutations(\n answers: DomainQuestionAnswers,\n questions: ReadonlyArray<DomainQuestion>,\n): FactoryCallPlanMutation[] {\n const out: FactoryCallPlanMutation[] = [];\n for (const q of questions) {\n const answer = answers[q.id];\n if (answer === undefined || answer === null) continue;\n out.push(...answerToMutations(q.mutationTemplate, answer, q));\n }\n return out;\n}\n\nexport function answerToMutations(\n template: FactoryCallPlanMutationTemplate,\n answer: DomainQuestionAnswer,\n _question: DomainQuestion,\n): FactoryCallPlanMutation[] {\n switch (template.kind) {\n case 'set-orbital-entity-name': {\n if (typeof answer !== 'string' || answer.length === 0) return [];\n return [\n {\n kind: 'set-orbital-entity-name',\n orbitalName: template.orbitalName,\n name: answer,\n },\n ];\n }\n case 'set-orbital-entity-fields': {\n if (!isEntityFieldArray(answer)) return [];\n if (answer.length === 0) return [];\n return [\n {\n kind: 'set-orbital-entity-fields',\n orbitalName: template.orbitalName,\n fields: answer,\n },\n ];\n }\n case 'set-orbital-persistence': {\n if (!isPersistence(answer)) return [];\n return [\n {\n kind: 'set-orbital-persistence',\n orbitalName: template.orbitalName,\n persistence: answer,\n },\n ];\n }\n case 'set-orbital-collection': {\n if (typeof answer !== 'string' || answer.length === 0) return [];\n return [\n {\n kind: 'set-orbital-collection',\n orbitalName: template.orbitalName,\n collection: answer,\n },\n ];\n }\n case 'set-orbital-page-path': {\n if (typeof answer !== 'string' || answer.length === 0) return [];\n return [\n {\n kind: 'set-orbital-page-path',\n orbitalName: template.orbitalName,\n pageName: template.pageName,\n path: answer,\n },\n ];\n }\n case 'set-trait-override-config': {\n if (!isFactoryParamValue(answer)) return [];\n return [\n {\n kind: 'set-trait-override-config',\n orbitalName: template.orbitalName,\n traitName: template.traitName,\n key: template.configKey,\n value: answer,\n },\n ];\n }\n case 'add-extra-trait': {\n if (!isTraitReference(answer)) return [];\n return [\n {\n kind: 'add-extra-trait',\n orbitalName: template.orbitalName,\n trait: answer,\n },\n ];\n }\n case 'remove-extra-trait': {\n if (typeof answer !== 'string' || answer.length === 0) return [];\n return [\n {\n kind: 'remove-extra-trait',\n orbitalName: template.orbitalName,\n ref: answer,\n },\n ];\n }\n case 'set-rule': {\n if (typeof answer !== 'string') return [];\n if (answer !== 'yes') return [];\n const rule: RuleOverlayEntry = {\n id: `${template.capability}::${template.appliesTo.join(',')}`,\n capability: template.capability,\n description: `User accepted ${template.capability} for ${template.appliesTo.join(', ')}.`,\n appliesTo: template.appliesTo,\n };\n return [{ kind: 'set-rule', rule }];\n }\n case 'remove-rule': {\n return [{ kind: 'remove-rule', ruleId: template.ruleId }];\n }\n }\n}\n\nfunction isEntityFieldArray(\n a: DomainQuestionAnswer,\n): a is ReadonlyArray<EntityField> {\n if (!Array.isArray(a)) return false;\n for (const x of a) {\n if (typeof x !== 'object' || x === null) return false;\n if (!('name' in x) || !('type' in x)) return false;\n if (typeof x.name !== 'string' || typeof x.type !== 'string') return false;\n }\n return true;\n}\n\nfunction isPersistence(a: DomainQuestionAnswer): a is EntityPersistence {\n return (\n typeof a === 'string' &&\n (PERSISTENCE_VALUES as ReadonlyArray<string>).includes(a)\n );\n}\n\nfunction isFactoryParamValue(a: DomainQuestionAnswer): a is FactoryParamValue {\n if (a === null) return false;\n const t = typeof a;\n if (t === 'string' || t === 'number' || t === 'boolean') return true;\n if (Array.isArray(a)) return true;\n if (t === 'object') return true;\n return false;\n}\n\nfunction isTraitReference(a: DomainQuestionAnswer): a is TraitReference {\n if (typeof a !== 'object' || a === null || Array.isArray(a)) return false;\n if (!('ref' in a)) return false;\n return typeof a.ref === 'string';\n}\n","import type { EntityField } from '../types/field.js';\nimport type { TraitReference } from '../types/trait.js';\nimport type { EntityPersistence } from '../types/entity.js';\nimport type { RuleOverlay, RuleOverlayEntry } from './overlays.js';\nimport type { FactoryParamValue } from './types.js';\n\n/**\n * One slot the agent emits per orbital. Slim shape — agent-facing,\n * carries only what factory dispatch needs. The studio renders forms\n * over this; the projector turns it into a `FactoryCallSite`.\n */\nexport interface OrbitalCallInput {\n orbitalName: string;\n organism?: string;\n orbital?: string;\n entityName?: string;\n entityFields?: ReadonlyArray<EntityField>;\n persistence?: EntityPersistence;\n collection?: string;\n pagePaths?: Readonly<Record<string, string>>;\n traitOverlay?: Readonly<\n Record<\n string,\n {\n config?: Readonly<Record<string, FactoryParamValue>>;\n linkedEntity?: string;\n name?: string;\n }\n >\n >;\n extraTraits?: ReadonlyArray<TraitReference>;\n}\n\n/**\n * Discriminated union of typed edits. Each variant carries only the\n * payload pieces that change. The reducer is total over the union.\n */\nexport type FactoryCallPlanMutation =\n | {\n kind: 'set-orbital-entity-fields';\n orbitalName: string;\n fields: ReadonlyArray<EntityField>;\n }\n | { kind: 'set-orbital-entity-name'; orbitalName: string; name: string }\n | {\n kind: 'set-orbital-persistence';\n orbitalName: string;\n persistence: EntityPersistence;\n }\n | { kind: 'set-orbital-collection'; orbitalName: string; collection: string }\n | {\n kind: 'set-orbital-page-path';\n orbitalName: string;\n pageName: string;\n path: string;\n }\n | {\n kind: 'set-trait-override-config';\n orbitalName: string;\n traitName: string;\n key: string;\n value: FactoryParamValue;\n }\n | {\n kind: 'add-extra-trait';\n orbitalName: string;\n trait: TraitReference;\n }\n | { kind: 'remove-extra-trait'; orbitalName: string; ref: string }\n | { kind: 'set-rule'; rule: RuleOverlayEntry }\n | { kind: 'remove-rule'; ruleId: string };\n\n/**\n * State shape the reducer operates on. Mirrors the slice of the\n * agent's analysis result that incremental edits target.\n */\nexport interface FactoryCallPlanState {\n orbitals: ReadonlyArray<OrbitalCallInput>;\n ruleOverlay?: RuleOverlay;\n}\n\n/**\n * Immutable reducer. Returns a new state; never mutates input.\n */\nexport function applyFactoryCallPlanMutation(\n state: FactoryCallPlanState,\n m: FactoryCallPlanMutation,\n): FactoryCallPlanState {\n switch (m.kind) {\n case 'set-orbital-entity-fields':\n return patchOrbital(state, m.orbitalName, (o) => ({\n ...o,\n entityFields: m.fields,\n }));\n case 'set-orbital-entity-name':\n return patchOrbital(state, m.orbitalName, (o) => ({\n ...o,\n entityName: m.name,\n }));\n case 'set-orbital-persistence':\n return patchOrbital(state, m.orbitalName, (o) => ({\n ...o,\n persistence: m.persistence,\n }));\n case 'set-orbital-collection':\n return patchOrbital(state, m.orbitalName, (o) => ({\n ...o,\n collection: m.collection,\n }));\n case 'set-orbital-page-path':\n return patchOrbital(state, m.orbitalName, (o) => ({\n ...o,\n pagePaths: { ...(o.pagePaths ?? {}), [m.pageName]: m.path },\n }));\n case 'set-trait-override-config':\n return patchOrbital(state, m.orbitalName, (o) => {\n const overlay = o.traitOverlay ?? {};\n const existing = overlay[m.traitName] ?? {};\n const existingConfig = existing.config ?? {};\n return {\n ...o,\n traitOverlay: {\n ...overlay,\n [m.traitName]: {\n ...existing,\n config: { ...existingConfig, [m.key]: m.value },\n },\n },\n };\n });\n case 'add-extra-trait':\n return patchOrbital(state, m.orbitalName, (o) => {\n const existing = o.extraTraits ?? [];\n if (existing.some((t) => t.ref === m.trait.ref)) return o;\n return { ...o, extraTraits: [...existing, m.trait] };\n });\n case 'remove-extra-trait':\n return patchOrbital(state, m.orbitalName, (o) => ({\n ...o,\n extraTraits: (o.extraTraits ?? []).filter((t) => t.ref !== m.ref),\n }));\n case 'set-rule': {\n const rules = state.ruleOverlay?.rules ?? [];\n const idx = rules.findIndex((r) => r.id === m.rule.id);\n const next = idx >= 0\n ? rules.map((r, i) => (i === idx ? m.rule : r))\n : [...rules, m.rule];\n return {\n ...state,\n ruleOverlay: { ...(state.ruleOverlay ?? { rules: [] }), rules: next },\n };\n }\n case 'remove-rule': {\n const rules = state.ruleOverlay?.rules ?? [];\n const next = rules.filter((r) => r.id !== m.ruleId);\n return {\n ...state,\n ruleOverlay: { ...(state.ruleOverlay ?? { rules: [] }), rules: next },\n };\n }\n }\n}\n\nfunction patchOrbital(\n state: FactoryCallPlanState,\n orbitalName: string,\n patch: (o: OrbitalCallInput) => OrbitalCallInput,\n): FactoryCallPlanState {\n return {\n ...state,\n orbitals: state.orbitals.map((o) =>\n o.orbitalName === orbitalName ? patch(o) : o,\n ),\n };\n}\n","/**\n * FactorySignature → JsonSchema generator.\n *\n * Walks a resolved `FactorySignature` (post `inheritCallSiteOverrideTypes`)\n * and emits a JSON Schema for the corresponding `AnalysisOrbitalParams`\n * shape: `entityName / pagePath / fields / traitOverrides / extraTraits\n * / pages / theme`. The `traitOverrides` property is the densest part — one\n * entry per trait with a typed `config` sub-schema reflecting\n * `overridableConfigKeys` (type + enum + items + properties + label +\n * synonyms metadata).\n *\n * The output is consumed by V2's tool-calling layer\n * (`@almadar-io/agent`'s coordinator + per-orbital subagent) via\n * OpenAI's `tool.parameters` with `strict: true` — the LLM is masked\n * to the schema and physically cannot emit unknown trait names,\n * invented knob keys, or out-of-set enum values.\n *\n * `additionalProperties: false` is set at every level so unknown keys\n * are rejected. Inherited descriptive metadata (label, description,\n * synonyms) flows into `description` / `x-label` / `x-synonyms`\n * extension keywords so studio UIs + prompt rendering can use the\n * same single artifact.\n */\nimport { getAllPatternTypes } from '../patterns/helpers/prompt-helpers.js';\nimport { persistenceModeAllowsOverrides } from '../types/entity.js';\nimport { UI_SLOTS } from '../types/effect.js';\nimport type { EntityField } from '../types/field.js';\nimport { NUM_WIDTH_TAGS } from '../types/field.js';\nimport type {\n FactoryConfigParam,\n FactoryParamValue,\n FactorySignature,\n FactoryTraitSignature,\n JsonSchema,\n JsonSchemaType,\n JsonValue,\n} from './types.js';\n\n// ============================================================================\n// Top-level: signature → params schema\n// ============================================================================\n\nexport function signatureToParamsSchema(\n signature: FactorySignature,\n options?: { readonly themeNames?: readonly string[] },\n): JsonSchema {\n // `trait`-typed knobs must hold `@trait.<TraitName>` naming a trait on\n // THIS orbital — the exact contract rabit's `validateTraitTypedConfigRefs`\n // enforces at fill time with a retry. Baking the same values as an enum\n // makes the invalid reference inexpressible instead of caught-and-retried\n // (SCAN-TRAITREF-KNOB-1: the fill spent its attempts on\n // `sidebarTrait = \"AuthorDirectory\"` and the HIT demoted).\n const traitRefValues = signature.traits.map((t) => `@trait.${t.name}`).sort();\n const traitProps: { [key: string]: JsonSchema } = {};\n for (const trait of signature.traits) {\n // An imported trait is carried, not overridable at the call site.\n if (trait.importedFrom !== undefined) continue;\n // A trait can never be its OWN content/sidebar slot — the compiler rejects\n // it as `ORB_BINDING_TRAIT_SELF_REFERENCE`. Offering it is an always-invalid\n // value in a closed enum: measured 1,238 of 1,238 trait-typed knobs carried\n // their own trait, and a fill that picked it demoted a factory HIT\n // (std-lms/AppointmentPolicyFromStdOrbital). Excluded per-trait rather than\n // globally — a SIBLING trait remains a legitimate value.\n const selectableRefs = traitRefValues.filter((v) => v !== `@trait.${trait.name}`);\n const traitSchema = traitToOverrideSchema(trait, selectableRefs);\n if (traitSchema !== null) {\n traitProps[trait.name] = traitSchema;\n }\n }\n\n const allowPersistenceOverride = persistenceModeAllowsOverrides(\n signature.entities[0]?.persistence,\n signature.entities[0]?.dataBearing ?? false,\n );\n\n const properties: { [key: string]: JsonSchema } = {\n entityName: {\n type: 'string',\n description: 'PascalCase singular entity rename (e.g. \"Listing\", \"Member\"). Renames the DOMAIN concept and rewrites every `@Entity.*` reference. Use this when the user wants to rename the THING, not where it\\'s stored.',\n },\n pagePath: {\n type: 'string',\n description: \"URL path override for the orbital's first page.\",\n },\n fields: {\n type: 'array',\n description: 'Extra entity fields appended to the canonical entity. Caller wins on name collision.',\n items: ENTITY_FIELD_SCHEMA,\n },\n traitOverrides: Object.keys(traitProps).length > 0\n ? {\n type: 'object',\n additionalProperties: false,\n description:\n 'Per-trait knob overrides keyed on the canonical trait name. Each value can include `config` (knob values), `linkedEntity` (rebind), `events` (per-key rename map), `listens` (cross-orbital subscriptions), `emitsScope` (`internal` keeps emits local; `external` lets sibling orbitals listen), and `name` (rename the inlined trait). Only the traits + knobs shown here are valid — the schema rejects unknown keys.',\n properties: traitProps,\n }\n : { type: 'object', additionalProperties: false, properties: {} },\n extraTraits: {\n type: 'array',\n description: 'Sibling traits to compose beyond the factory-authored stack.',\n items: EXTRA_TRAIT_SCHEMA,\n },\n pages: {\n type: 'array',\n description: 'Per-page overrides keyed by canonical page name.',\n items: PAGE_OVERRIDE_SCHEMA,\n },\n theme: {\n type: 'string',\n // Theme names are injected by the caller rather than harvested from\n // `@almadar-ui/themes/*.css` — core is UPSTREAM of `@almadar/ui`, which\n // owns the theme CSS, and cannot read the filesystem to discover it.\n ...(options?.themeNames !== undefined && options.themeNames.length > 0\n ? { enum: [...options.themeNames] }\n : {}),\n description:\n 'Theme key — the full `data-theme` value applied to the layout root (e.g. linear-clean-light, terminal-dark, game-adventure-dark). Plan-level: pick ONE for the whole app — it is threaded to every orbital. Omit to leave the factory default.',\n },\n };\n\n if (signature.config && signature.config.length > 0) {\n const configProps: { [key: string]: JsonSchema } = {};\n for (const knob of signature.config) {\n configProps[knob.key] = knobToSchema(knob, undefined, traitRefValues);\n }\n properties.config = {\n type: 'object',\n additionalProperties: false,\n description: \"This orbital's own declared knobs (Orbital.config). Only the keys shown are valid.\",\n properties: configProps,\n };\n }\n\n if (allowPersistenceOverride) {\n properties.collection = {\n type: 'string',\n description: 'Override the persistence collection / table name. Defaults to `plural(entityName).toLowerCase()`. Use this when the user names the database/table/storage location (\"save them under X\", \"the table is called X\", \"in our database it\\'s X\") — NOT when they rename the domain concept (that\\'s `entityName`).',\n };\n properties.persistence = {\n type: 'string',\n enum: ['persistent', 'runtime'],\n description: 'Override the entity persistence mode. `persistent` = stored in the configured backend; `runtime` = in-memory session-scoped only.',\n };\n }\n\n const schema: JsonSchema = {\n type: 'object',\n additionalProperties: false,\n description: `Typed params for ${signature.organism} / ${signature.orbital}. Empty {} = factory defaults.`,\n properties,\n };\n assertNoUnsatisfiableEnum(schema, `${signature.organism}/${signature.orbital}`);\n return schema;\n}\n\n/**\n * The standing form of the self-reference bug: **a closed enum must not be\n * empty.** An empty `enum` permits nothing, so every value the model can\n * produce is rejected and the HIT demotes with no path back — strictly worse\n * than a wrong default, and invisible because each individual construct is\n * still legal JSON Schema.\n *\n * This is deliberately the GENERAL check rather than a second per-slot filter.\n * Each enum here is built by projecting one candidate list across many slots\n * (traits, entities, events, patterns, themes), and every such projection can\n * narrow to nothing for some signature — the trait case did, at 1,238 of 1,238\n * offers, and was found only because a scan happened to trip on it. Anything\n * that empties a candidate set now fails the bake loudly instead of shipping a\n * schema the compiler will always reject.\n */\nexport function assertNoUnsatisfiableEnum(node: JsonSchema, where: string, path = ''): void {\n if (Array.isArray(node.enum) && node.enum.length === 0) {\n throw new Error(\n `[signatures] ${where}: empty enum at \"${path || '<root>'}\" — the schema permits no value, ` +\n 'so every fill for this knob is rejected. Omit the knob instead of offering an unsatisfiable one.',\n );\n }\n for (const [key, child] of Object.entries(node.properties ?? {})) {\n assertNoUnsatisfiableEnum(child, where, path === '' ? key : `${path}.${key}`);\n }\n if (node.items !== undefined) assertNoUnsatisfiableEnum(node.items, where, `${path}[]`);\n}\n\n// ============================================================================\n// Trait override schema — one entry per trait in the signature\n// ============================================================================\n\nfunction traitToOverrideSchema(\n trait: FactoryTraitSignature,\n traitRefValues?: ReadonlyArray<string>,\n): JsonSchema | null {\n // Skip traits with zero overridable knobs AND no other override surface.\n // A `@rebindable` trait always has an override surface (linkedEntity), so\n // it keeps an entry even with zero config knobs.\n if (trait.overridableConfigKeys.length === 0 && trait.entityRebindable !== true) return null;\n\n const knobProps: { [key: string]: JsonSchema } = {};\n for (const knob of trait.overridableConfigKeys) {\n // A trait-typed knob on a trait with no SELECTABLE sibling has no valid\n // value at all — the only candidate was the enclosing trait, which the\n // compiler rejects as ORB_BINDING_TRAIT_SELF_REFERENCE. Omit it, the same\n // way `listens` is omitted for render-only traits below: an unsatisfiable\n // knob must not be offered.\n //\n // Without this the self-reference filter would silently DEGRADE such a\n // knob to a free string (`knobToSchema` only builds the enum when the set\n // is non-empty), reopening SCAN-TRAITREF-KNOB-1 for exactly the orbitals\n // the filter was meant to protect. `undefined` still means \"topology\n // unknown\" (legacy catalog) and keeps the free-string surface; only a\n // DEFINED-and-empty set is unsatisfiable.\n if (knob.type === 'trait' && traitRefValues !== undefined && traitRefValues.length === 0) {\n continue;\n }\n knobProps[knob.key] = knobToSchema(knob, trait, traitRefValues);\n }\n\n // `linkedEntity` is ONLY offered for traits whose binding the atom author\n // marked `@rebindable`. For fixed-binding traits it's omitted entirely so\n // the LLM physically cannot author a rebind the validator would reject.\n // rabit narrows the value to a closed enum of the organism's entities.\n const properties: { [key: string]: JsonSchema } = {\n config: {\n type: 'object',\n additionalProperties: false,\n properties: knobProps,\n },\n };\n if (trait.entityRebindable === true) {\n properties.linkedEntity = {\n type: 'string',\n description: \"Rebind this trait to a different entity in the organism (rewrites every @entity.* / ref / fetch / persist binding inside it).\",\n };\n }\n\n // `listens[].triggers` must name an event THIS trait's own state machine\n // transitions on (ORB_X_LISTEN_TRIGGER_UNMATCHED otherwise). When the\n // signature carries the trait's topology, mask the LLM to it: enum the\n // triggers when transitions exist, and omit `listens` entirely for\n // render-only traits (zero transitions — no listen entry can ever be\n // valid; target the sibling trait that owns the transition instead).\n // Unknown topology (legacy catalogs) keeps the free-string surface.\n const triggersSchema: JsonSchema =\n trait.transitionEvents !== undefined && trait.transitionEvents.length > 0\n ? {\n type: 'string',\n enum: [...trait.transitionEvents],\n description: 'Local state-machine event fired when the subscription matches. Must be one of the events this trait\\'s own transitions already react to.',\n }\n : {\n type: 'string',\n description: 'Local state-machine event fired when the subscription matches.',\n };\n const listensProperty: { [key: string]: JsonSchema } =\n trait.transitionEvents !== undefined && trait.transitionEvents.length === 0\n ? {}\n : {\n listens: {\n type: 'array',\n items: {\n type: 'object',\n additionalProperties: false,\n required: ['event', 'triggers'],\n properties: {\n event: { type: 'string', description: 'Event key to subscribe to (bare name, no orbital prefix).' },\n triggers: triggersSchema,\n scope: { type: 'string', enum: ['internal', 'external'], description: '`internal` = same-orbital events. `external` = events from sibling orbitals (use this for cross-orbital reactivity).' },\n },\n },\n description: 'Replace this trait\\'s `listens` entirely. Empty array clears upstream listeners. For cross-orbital reactivity, add an entry with `scope: \"external\"` matching the source orbital\\'s emit event.',\n },\n };\n\n return {\n type: 'object',\n additionalProperties: false,\n description: `Override knobs for ${trait.name}.`,\n properties: {\n ...properties,\n name: {\n type: 'string',\n description: \"Rename the inlined trait at the call site. Does NOT change topology — just the trait's local name.\",\n },\n events: {\n type: 'object',\n additionalProperties: { type: 'string' },\n description: 'Per-key event rename map (e.g. `{ \"OPEN\": \"ADD_ITEM\" }`). Rewrites the events array, transition triggers, emit/listen event keys, and `[\"emit\", X]` SExpression literals inside the trait.',\n },\n ...listensProperty,\n emitsScope: {\n type: 'string',\n enum: ['internal', 'external'],\n description: '`internal` = emits stay local to this orbital. `external` = sibling orbitals can listen. Set to `external` when another orbital needs to react to this trait\\'s events (counter updates, list refreshes, badges, etc.).',\n },\n },\n };\n}\n\n// ============================================================================\n// Knob schema — FactoryConfigParam → JsonSchema for one knob\n// ============================================================================\n\nfunction knobToSchema(\n knob: FactoryConfigParam,\n trait?: FactoryTraitSignature,\n traitRefValues?: ReadonlyArray<string>,\n): JsonSchema {\n const out: JsonSchema = {};\n\n // Map the knob's declared type tag to a JSON Schema type.\n const baseType = mapKnobType(knob.type);\n if (baseType !== null) out.type = baseType;\n\n // Enum constraint — knob.enumValues becomes JSON Schema's `enum`.\n if (knob.enumValues && knob.enumValues.length > 0) {\n out.enum = [...knob.enumValues];\n // If type wasn't already string-ish, pin it to string for enum.\n if (!out.type) out.type = 'string';\n }\n\n // `slot`-typed knobs are a CLOSED registry (UI_SLOTS) — unconstrained,\n // the fill invents values like 'inline' that hard-fail the validator\n // (ORB_T_INVALID_SLOT_DEFAULT) and demote the whole HIT. Same posture\n // as the listens-triggers enum: constrain at the schema so an invalid\n // value can't reach the factory.\n if (knob.type === 'slot' && out.enum === undefined) {\n out.enum = [...UI_SLOTS];\n }\n\n // `pattern`-typed knobs are the same closed-registry shape as slots —\n // unconstrained, the fill invents names like 'full' that hard-fail\n // ORB_T_INVALID_PATTERN_DEFAULT + ORB_RUI_INVALID_PATTERN and demote the\n // HIT (SCAN-PATTERN-KNOB-1, organism-scan run12). Enum over the pattern\n // registry's type names; same self-consistency guard as the other pins.\n if (knob.type === 'pattern' && out.enum === undefined) {\n const patternTypes: readonly string[] = getAllPatternTypes();\n const selfConsistent =\n typeof knob.default !== 'string' ||\n knob.default === '' ||\n patternTypes.includes(knob.default);\n if (patternTypes.length > 0 && selfConsistent) {\n out.enum = [...patternTypes].sort();\n }\n }\n\n // `trait`-typed knobs: enum over the orbital's canonical `@trait.<name>`\n // references — the same value set `validateTraitTypedConfigRefs` accepts.\n // Same guards as the other reference pins: skip when unavailable or when\n // the knob's own non-empty default is missing from the set.\n if (\n knob.type === 'trait' &&\n out.enum === undefined &&\n traitRefValues !== undefined &&\n traitRefValues.length > 0\n ) {\n const selfConsistent =\n typeof knob.default !== 'string' ||\n knob.default === '' ||\n traitRefValues.includes(knob.default);\n if (selfConsistent) {\n out.enum =\n typeof knob.default === 'string' && knob.default === ''\n ? ['', ...traitRefValues]\n : [...traitRefValues];\n }\n }\n\n // `event`-DECLARED knobs (the `.lolo` type, never inferred) reference an\n // event in the owning trait's vocabulary — unconstrained, the fill\n // invents literals like 'note.search' that fail\n // ORB_T_INVALID_EVENT_DEFAULT and demote the HIT (SCAN-EVENT-KNOB-1).\n // Enum = the trait's event union from the signature, plus '' (the\n // validator's default-off outlet). Canonical names stay correct under\n // call-site renames because the inline pass rename-folds event-typed\n // knob values (event_typed_knob_rename_fold.rs). Guards: skip when the\n // union is empty (vacuous, compiler parity) or when the knob's own\n // non-empty default is missing from it (an enum that forbids its own\n // default is wrong by construction).\n //\n // A-UNIFY: a DEFINER knob (A-UNIFY spells it `: event` same as a\n // reference knob) is exempt — its value CREATES the event name rather\n // than referencing one, so pinning it to the trait's existing vocabulary\n // would forbid the very name it's meant to introduce. Left UNPINNED is\n // deliberate and correct: any name is valid by construction, a definer\n // cannot go stale. Do not \"fix\" this back to a pin.\n const isDefinerKnob = trait?.definerKnobs?.includes(knob.key) ?? false;\n if (knob.type === 'event' && isDefinerKnob) {\n out['x-role'] = 'definer';\n }\n if (knob.type === 'event' && !isDefinerKnob && out.enum === undefined && trait !== undefined) {\n const vocabulary = new Set<string>([\n ...trait.emittedEvents,\n ...trait.listenedEvents,\n ...(trait.transitionEvents ?? []),\n ]);\n vocabulary.delete('');\n const selfConsistent =\n typeof knob.default !== 'string' ||\n knob.default === '' ||\n vocabulary.has(knob.default);\n if (vocabulary.size > 0 && selfConsistent) {\n out.enum = ['', ...[...vocabulary].sort()];\n }\n }\n\n // Recursive shape for arrays: `items` shape from EntityField.\n if (knob.items !== undefined) {\n out.items = entityFieldToSchema(knob.items);\n if (!out.type) out.type = 'array';\n }\n\n // Recursive shape for objects / structs.\n if (knob.properties !== undefined && Object.keys(knob.properties).length > 0) {\n const props: { [key: string]: JsonSchema } = {};\n for (const [k, ef] of Object.entries(knob.properties)) {\n props[k] = entityFieldToSchema(ef);\n }\n out.properties = props;\n if (!out.type) out.type = 'object';\n }\n\n // Default value (if any) — passes through as JsonValue.\n if (knob.default !== undefined) {\n out.default = toJsonValue(knob.default);\n }\n\n // Descriptive metadata — surfaced for prompt rendering + studio UIs.\n if (knob.description) out.description = knob.description;\n if (knob.label) out['x-label'] = knob.label;\n if (knob.synonyms) out['x-synonyms'] = knob.synonyms;\n if (knob.tier) out['x-tier'] = knob.tier;\n\n return out;\n}\n\n// ============================================================================\n// EntityField → JsonSchema (used by knob.items / knob.properties / fields)\n// ============================================================================\n\nfunction entityFieldToSchema(field: EntityField): JsonSchema {\n // A union's `properties` are its VARIANTS by name, not members: offer one\n // closed shape per variant so a value is exactly one of them.\n if (field.type === 'union') {\n const variants = field.values\n .map((name) => field.properties?.[name])\n .filter((v): v is EntityField => v !== undefined);\n if (variants.length === 0) return {};\n return { oneOf: variants.map((v) => ({ ...entityFieldToSchema(v), additionalProperties: false })) };\n }\n const out: JsonSchema = {};\n const baseType = mapEntityFieldType(field.type);\n if (baseType !== null) out.type = baseType;\n\n // Enum / scalar vocabulary hint — both `enum` and scalar variants\n // carry an optional `values: string[]` in the discriminated union.\n if (\n (field.type === 'enum' ||\n field.type === 'string' ||\n field.type === 'number' ||\n field.type === 'boolean' ||\n field.type === 'date' ||\n field.type === 'timestamp' ||\n field.type === 'datetime') &&\n Array.isArray(field.values) &&\n field.values.length > 0\n ) {\n out.enum = field.values.filter(isEnumLeaf);\n if (!out.type) out.type = 'string';\n }\n if (field.type === 'array' && field.items !== undefined) {\n out.items = entityFieldToSchema(field.items);\n if (!out.type) out.type = 'array';\n }\n // Struct shape — a named struct like `[ItemAction]` lowers to an object\n // EntityField whose `properties` carry the per-field sub-tree with\n // `required` flags. Projecting them (plus `required`) lets the ajv\n // contract boundary reject a wrong field name (e.g. `action` instead of\n // `event`) at fill time instead of the factory type-check failing the\n // build afterwards and demoting the orbital.\n if (field.properties !== undefined && Object.keys(field.properties).length > 0) {\n const props: { [key: string]: JsonSchema } = {};\n const required: string[] = [];\n for (const [k, ef] of Object.entries(field.properties)) {\n props[k] = entityFieldToSchema(ef);\n if (ef.required === true) required.push(k);\n }\n out.properties = props;\n if (required.length > 0) out.required = required;\n if (!out.type) out.type = 'object';\n }\n if (field.default !== undefined) {\n out.default = toJsonValue(field.default);\n }\n return out;\n}\n\nfunction isEnumLeaf(v: JsonValue): v is string | number | boolean {\n return typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean';\n}\n\n// ============================================================================\n// Type mappers\n// ============================================================================\n\nfunction mapKnobType(knobType: string): JsonSchemaType | null {\n // Strip array bracket wrapper for `[T]` types.\n if (knobType.startsWith('[') && knobType.endsWith(']')) return 'array';\n switch (knobType) {\n case 'string':\n return 'string';\n case 'number':\n case 'integer':\n case 'float':\n return knobType === 'integer' ? 'integer' : 'number';\n case 'boolean':\n case 'bool':\n return 'boolean';\n case 'object':\n // An orbital value is `{ behavior, orbital, …import body }` on the wire; a behavior value is `{ behavior }`.\n case 'orbital':\n case 'behavior':\n return 'object';\n case 'array':\n return 'array';\n case 'enum':\n return 'string';\n // String-valued reference tags: a trait ref is \"@trait.<Name>\", a\n // slot/pattern/icon/asset is a registry name, an event is an event\n // key, a date is an ISO string. These were mis-emitted as `object`\n // (11k knobs catalog-wide carried an object type with a string\n // default), which was harmless while tool schemas were advisory but\n // breaks hard validation.\n case 'trait':\n case 'slot':\n case 'pattern':\n case 'secret':\n case 'icon':\n case 'asset':\n case 'event':\n case 'EventAddress':\n case 'CallKey':\n case 'field':\n case 'date':\n return 'string';\n case 'render-ui':\n // First-class render-ui SExpr tree (Layer 3 variant-body knob).\n // The runtime substitutes the value into the parent atom's\n // `(render-ui main @config.X)` body verbatim. Schema-wise it's a\n // recursive object with `type: \"<pattern-name>\"` + nested\n // `children`; for LLM JSON Schema we surface it as `object` and\n // rely on the knob description + pattern-registry awareness for\n // shape guidance.\n return 'object';\n // Polymorphic values: a `node` accepts a string leaf OR a render-ui\n // tree; `json`/`unknown` carry arbitrary JSON. No `type` — the\n // schema stays structurally honest instead of over-constraining.\n case 'node':\n case 'json':\n case 'unknown':\n return null;\n default:\n // Custom struct types (e.g. `FormatOption`) — `knobToSchema` pins\n // `object` iff `knob.properties` captured a shape; otherwise the\n // knob stays untyped rather than claiming a shape we don't know.\n return null;\n }\n}\n\nexport function mapEntityFieldType(fieldType: string): JsonSchemaType | null {\n switch (fieldType) {\n case 'string':\n case 'date':\n case 'timestamp':\n case 'datetime':\n // JSON Schema has no email/url/phone/uuid/image primitive — the declared\n // domain is carried on the signature's own `type` field (see\n // `asSchemaFieldType`), not here. This maps to the WIRE shape only.\n case 'email':\n case 'url':\n case 'phone':\n case 'uuid':\n case 'image':\n case 'bytes':\n return 'string';\n case 'number':\n case 'instant':\n return 'number';\n case 'boolean':\n return 'boolean';\n case 'array':\n return 'array';\n case 'object':\n case 'relation':\n case 'orbital':\n case 'behavior':\n return 'object';\n case 'enum':\n return 'string';\n case 'trait':\n case 'slot':\n case 'pattern':\n case 'secret':\n return 'string';\n // Phase B (SCAN-EVENT-KNOB-2): event-name reference — a string at the\n // wire level, same as `mapKnobType`'s `case 'event'` (that asymmetry\n // — this function fell to `default: null`, leaving struct-field\n // `event` members with NO json-schema type — was the bug).\n case 'event':\n case 'EventAddress':\n case 'CallKey':\n case 'field':\n return 'string';\n // Polymorphic renderable content: a node accepts a string leaf OR a\n // render-ui tree — no JSON-Schema `type` constraint, mirroring\n // `mapKnobType`'s `case 'node'`. (The default would return null too;\n // explicit for parity and self-documentation.)\n case 'node':\n return null;\n default:\n return null;\n }\n}\n\n// ============================================================================\n// Coerce arbitrary value into JsonValue (no unknown leaks)\n// ============================================================================\n\n/**\n * Widen the two JSON-shaped value types the signature carries\n * (`FactoryConfigParam.default` is `FactoryParamValue`, `EntityField.default`\n * is `JsonValue`) into the mutable `JsonValue` a schema `default` holds.\n *\n * Typed as their union rather than `unknown`: both are already JSON by\n * construction, so no escape hatch is needed and the recursion stays checked.\n * Non-finite numbers become `null` because `NaN`/`Infinity` have no JSON\n * encoding and would serialise as `null` anyway — better to say so here than\n * to let `JSON.stringify` decide silently.\n */\nfunction toJsonValue(value: FactoryParamValue | JsonValue): JsonValue {\n if (value === null) return null;\n if (typeof value === 'string') return value;\n if (typeof value === 'number') return Number.isFinite(value) ? value : null;\n if (typeof value === 'boolean') return value;\n if (Array.isArray(value)) {\n return value.map(toJsonValue);\n }\n const out: { [key: string]: JsonValue } = {};\n for (const [k, v] of Object.entries(value)) {\n out[k] = toJsonValue(v);\n }\n return out;\n}\n\n// ============================================================================\n// Shared schemas for entity field / extra trait / page override entries\n// ============================================================================\n\n/**\n * Discriminated-union shape for an entity field. Each `oneOf` branch\n * pins `type` to a literal and lists its dependent required slots:\n * - `type === 'enum'` REQUIRES `values: string[]`\n * - `type === 'relation'` REQUIRES `relation: { entity, cardinality }`\n * - `type === 'array'` MAY carry `items` (optional for legacy\n * codegen emit; lolo + Rust validator handle typed-element cases)\n * - other scalars accept the base shape\n *\n * `additionalProperties: false` at every level rejects unknown keys at\n * the LLM tool-call layer. Mirrors `EntityField` discriminated union\n * from `@almadar/core` (8.6.2).\n */\nconst ENTITY_FIELD_BASE_PROPS = {\n name: { type: 'string' as JsonSchemaType, description: 'Field name (camelCase).' },\n required: { type: 'boolean' as JsonSchemaType },\n primaryKey: { type: 'boolean' as JsonSchemaType },\n intrinsic: { type: 'boolean' as JsonSchemaType },\n min: { type: 'number' as JsonSchemaType },\n max: { type: 'number' as JsonSchemaType },\n description: { type: 'string' as JsonSchemaType },\n synonyms: { type: 'string' as JsonSchemaType },\n mock: { type: 'string' as JsonSchemaType },\n mergedFrom: { type: 'string' as JsonSchemaType },\n projectedFrom: {\n type: 'object' as JsonSchemaType,\n additionalProperties: false,\n required: ['type'],\n properties: { type: { type: 'string' as JsonSchemaType }, field: { type: 'string' as JsonSchemaType } },\n },\n properties: { type: 'object' as JsonSchemaType, additionalProperties: { $ref: 'urn:almadar:entity-field#/$defs/field' } },\n values: { type: 'array' as JsonSchemaType, items: { type: 'string' as JsonSchemaType } },\n default: {\n type: ['string', 'number', 'boolean', 'null', 'array', 'object'] as ReadonlyArray<JsonSchemaType>,\n } as JsonSchema,\n};\n// Includes the semantic domains: without them an L1 factory HIT cannot express\n// an email field at all, so `fill_params` could never produce one.\nconst SCALAR_FIELD_TYPES: ReadonlyArray<string> = [\n 'string', 'number', 'int', ...NUM_WIDTH_TAGS, 'boolean', 'date', 'timestamp', 'datetime', 'instant',\n 'email', 'url', 'phone', 'uuid', 'image', 'money',\n 'file', 'bytes', 'trait', 'slot', 'pattern', 'node', 'event', 'EventAddress', 'CallKey', 'SExpr',\n];\nconst SCALAR_FIELD_BRANCH: JsonSchema = {\n type: 'object',\n additionalProperties: false,\n required: ['name', 'type'],\n properties: {\n ...ENTITY_FIELD_BASE_PROPS,\n type: { type: 'string', enum: SCALAR_FIELD_TYPES, description: 'Field type tag.' },\n },\n};\nconst ENUM_FIELD_BRANCH: JsonSchema = {\n type: 'object',\n additionalProperties: false,\n required: ['name', 'type', 'values'],\n properties: {\n ...ENTITY_FIELD_BASE_PROPS,\n type: { type: 'string', enum: ['enum'], description: 'Enum field.' },\n values: {\n type: 'array',\n description: 'Closed string vocabulary. e.g. [\"active\",\"inactive\",\"pending\"].',\n minItems: 1,\n items: { type: 'string' },\n },\n },\n};\nconst RELATION_FIELD_BRANCH: JsonSchema = {\n type: 'object',\n additionalProperties: false,\n required: ['name', 'type', 'relation'],\n properties: {\n ...ENTITY_FIELD_BASE_PROPS,\n type: { type: 'string', enum: ['relation'], description: 'Relation (FK) field.' },\n relation: {\n type: 'object',\n additionalProperties: false,\n required: ['entity'],\n properties: {\n entity: { type: 'string', description: 'Sibling entity name (PascalCase singular).' },\n entityId: { type: 'string' },\n cardinality: { type: 'string', enum: ['one', 'many'] },\n field: { type: 'string' },\n onDelete: { type: 'string', enum: ['cascade', 'nullify', 'restrict'] },\n },\n description: 'Relation target. `cardinality: \"one\"` for FK (customerId → one Customer); \"many\" for collection (tags → many Tag).',\n },\n },\n};\nconst ARRAY_FIELD_BRANCH: JsonSchema = {\n type: 'object',\n additionalProperties: false,\n required: ['name', 'type'],\n properties: {\n ...ENTITY_FIELD_BASE_PROPS,\n type: { type: 'string', enum: ['array'], description: 'Array field.' },\n items: { $ref: 'urn:almadar:entity-field#/$defs/field' },\n },\n};\n// A nested structure within the entity: an `object` declares its members\n// (struct) or its value type (map). A shapeless `object` is not offered —\n// `orb validate` rejects it (ORB_T_GENERIC_TYPE_DEPRECATED).\nconst OBJECT_FIELD_BRANCH: JsonSchema = {\n type: 'object',\n additionalProperties: false,\n required: ['name', 'type'],\n anyOf: [{ required: ['properties'] }, { required: ['items'] }],\n properties: {\n ...ENTITY_FIELD_BASE_PROPS,\n type: { type: 'string', enum: ['object'], description: 'Struct members or map value shape.' },\n items: { $ref: 'urn:almadar:entity-field#/$defs/field' },\n },\n};\nconst UNION_FIELD_BRANCH: JsonSchema = {\n type: 'object',\n additionalProperties: false,\n required: ['name', 'type', 'values'],\n properties: {\n ...ENTITY_FIELD_BASE_PROPS,\n type: { type: 'string', enum: ['union'] },\n values: { ...ENTITY_FIELD_BASE_PROPS.values, minItems: 1 },\n },\n};\nconst TUPLE_FIELD_BRANCH: JsonSchema = {\n type: 'object',\n additionalProperties: false,\n required: ['name', 'type', 'properties'],\n properties: {\n ...ENTITY_FIELD_BASE_PROPS,\n type: { type: 'string', enum: ['tuple'] },\n properties: { ...ENTITY_FIELD_BASE_PROPS.properties, minProperties: 1 },\n },\n};\nconst ENTITY_FIELD_BRANCHES: ReadonlyArray<JsonSchema> = [\n SCALAR_FIELD_BRANCH,\n ENUM_FIELD_BRANCH,\n RELATION_FIELD_BRANCH,\n ARRAY_FIELD_BRANCH,\n OBJECT_FIELD_BRANCH,\n UNION_FIELD_BRANCH,\n TUPLE_FIELD_BRANCH,\n];\nexport const ENTITY_FIELD_SCHEMA: JsonSchema = {\n $id: 'urn:almadar:entity-field',\n oneOf: ENTITY_FIELD_BRANCHES,\n $defs: {\n field: {\n oneOf: ENTITY_FIELD_BRANCHES.map(branch => ({ ...branch, required: branch.required?.filter(key => key !== 'name') })),\n },\n },\n};\n\nconst EXTRA_TRAIT_SCHEMA: JsonSchema = {\n type: 'object',\n additionalProperties: false,\n required: ['from', 'as', 'ref'],\n properties: {\n from: { type: 'string', description: 'Registry path (e.g. std/behaviors/std-approval-request).' },\n as: { type: 'string', description: 'Local alias used in `ref`.' },\n ref: { type: 'string', description: 'Trait reference (Alias.traits.X).' },\n name: { type: 'string', description: 'Optional rename of the inlined trait.' },\n linkedEntity: { type: 'string', description: 'Optional entity rebinding.' },\n emitsScope: { type: 'string', enum: ['internal', 'external'] },\n },\n};\n\nconst PAGE_OVERRIDE_SCHEMA: JsonSchema = {\n type: 'object',\n additionalProperties: false,\n required: ['name'],\n properties: {\n name: { type: 'string', description: 'Canonical page name from the orbital.' },\n path: { type: 'string', description: 'URL path override.' },\n linkedEntity: { type: 'string', description: 'Rebind the primary entity.' },\n },\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/factory/knob-defs.ts","../src/factory/questions/generate.ts","../src/factory/questions/reducer.ts","../src/factory/mutate.ts","../src/factory/params-schema.ts"],"names":[],"mappings":"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","file":"chunk-3DZOFI53.js","sourcesContent":["import type { FactoryConfigParam, FactorySignatureCatalog } from './types.js';\n\n/**\n * Rehydrate `overridableConfigKeys` from a catalog's `knobDefs` table,\n * in place, and drop the wire-only `overridableConfigKeyRefs`.\n *\n * Call this immediately after parsing a catalog and before handing it to any\n * consumer — every consumer reads `overridableConfigKeys` and must never see\n * a signature mid-rehydration.\n *\n * A catalog with no `knobDefs` is returned untouched, which is what makes the\n * format change backward compatible: old catalogs still carry their knobs\n * inline. An out-of-range or missing ref is skipped rather than throwing —\n * a truncated table should degrade to fewer knobs, not take down every\n * consumer of the catalog.\n */\nexport function rehydrateKnobDefs(catalog: FactorySignatureCatalog): FactorySignatureCatalog {\n const table = catalog.knobDefs;\n if (table === undefined || table.length === 0) return catalog;\n for (const sig of catalog.signatures) {\n for (const trait of sig.traits ?? []) {\n const refs = trait.overridableConfigKeyRefs;\n if (refs === undefined) continue;\n const knobs: FactoryConfigParam[] = [];\n for (const i of refs) {\n const knob = table[i];\n if (knob !== undefined) knobs.push(knob);\n }\n const mutable = trait as {\n overridableConfigKeys: ReadonlyArray<FactoryConfigParam>;\n overridableConfigKeyRefs?: ReadonlyArray<number>;\n };\n mutable.overridableConfigKeys = knobs;\n delete mutable.overridableConfigKeyRefs;\n }\n // Orbital-level `config` — same table, same ref/rehydrate shape as the\n // per-trait `overridableConfigKeyRefs` above.\n const configRefs = sig.configRefs;\n if (configRefs === undefined) continue;\n const configKnobs: FactoryConfigParam[] = [];\n for (const i of configRefs) {\n const knob = table[i];\n if (knob !== undefined) configKnobs.push(knob);\n }\n const mutableSig = sig as {\n config?: ReadonlyArray<FactoryConfigParam>;\n configRefs?: ReadonlyArray<number>;\n };\n mutableSig.config = configKnobs;\n delete mutableSig.configRefs;\n }\n return catalog;\n}\n","/**\n * `generateQuestions(plan, catalog, ruleOverlay?)`.\n *\n * Deterministic, no LLM call. Walks each `FactoryCallSite` in the\n * durable plan against its matching `FactorySignature` and emits one\n * open question per advertised knob the user hasn't already filled.\n *\n * Two families of questions, both source-derived:\n *\n * 1. CONFIG-KEY — one question per\n * `signature.traits[*].overridableConfigKeys[*]`. Each entry is a\n * `FactoryConfigParam` carrying `{ key, type, default?, label?,\n * description?, enumValues?, items?, properties?, tier? }` lifted\n * directly from the source `.lolo` `config { }` block. The widget\n * choice falls out of `deriveInputType` (reads `items.properties`\n * and `properties` so structured types render proper editors, not\n * JSON textareas); the prompt comes from `label` (or a humanized\n * fallback of `key`); the default value pre-fills the widget.\n * Knobs tagged `tier: 'internal'` are filtered out entirely.\n *\n * 2. CAPABILITY-DRIVEN — one question per unique\n * `signature.traits[*].capabilities[*]` tag NOT already covered\n * by `ruleOverlay.rules[].capability`. Surfaces a `set-rule`\n * mutation template scoped to the bound entity.\n *\n * @packageDocumentation\n */\n\nimport type {\n FactoryCallSite,\n FactoryConfigParam,\n FactoryParamValue,\n FactorySignature,\n FactorySignatureEntityField,\n FactoryTraitSignature,\n} from '../types.js';\nimport type { RuleOverlay } from '../overlays.js';\nimport type { EntityField } from '../../types/field.js';\nimport type {\n DomainQuestion,\n DomainQuestionInputType,\n} from './types.js';\n\nexport function generateQuestions(\n plan: ReadonlyArray<FactoryCallSite>,\n catalog: ReadonlyArray<FactorySignature>,\n ruleOverlay?: RuleOverlay,\n /**\n * Optional user-authored prompt from the current session. Carried\n * through so downstream consumers (route handlers, ranking passes)\n * can re-order questions by relevance without re-generating. Does\n * not affect the emitted set — only threading and ordering.\n */\n _userPrompt?: string,\n): DomainQuestion[] {\n const out: DomainQuestion[] = [];\n const ruleCapabilities = collectRuleCapabilities(ruleOverlay);\n\n for (const call of plan) {\n const signature = findSignature(catalog, call.organism, call.orbital);\n if (!signature) continue;\n out.push(...configKeyQuestions(call, signature));\n out.push(...entityFieldQuestions(call, signature));\n out.push(...capabilityQuestions(call, signature, ruleCapabilities));\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// Config-key questions — derived from the source `config { }` declaration\n// ---------------------------------------------------------------------------\n\nconst TIER_D_NAMED_PRIMITIVES = new Set([\n 'layoutMode',\n 'layoutPattern',\n 'viewPattern',\n 'detailPattern',\n 'detailSlot',\n 'contentTrait',\n]);\n\nconst TIER_D_TYPES = new Set(['trait', 'slot', 'pattern', 'event']);\n\nfunction configKeyQuestions(\n call: FactoryCallSite,\n signature: FactorySignature,\n): DomainQuestion[] {\n const out: DomainQuestion[] = [];\n for (const trait of signature.traits) {\n for (const param of trait.overridableConfigKeys) {\n if (param.tier === 'internal') continue;\n if (TIER_D_TYPES.has(param.type)) continue;\n if (TIER_D_NAMED_PRIMITIVES.has(param.key)) continue;\n out.push(buildConfigKeyQuestion(call, trait, param));\n }\n }\n return out;\n}\n\nfunction buildConfigKeyQuestion(\n call: FactoryCallSite,\n trait: FactoryTraitSignature,\n param: FactoryConfigParam,\n): DomainQuestion {\n // `@label` renders verbatim; the fallback is a type guard, not inference —\n // a domain-tier knob reaching it is a missing-`@label` source defect.\n const question = param.label ?? humanizeKey(param.key);\n // Call-site override (organism pre-pinned this knob) takes precedence\n // over the atom-author's default. The question still renders so the\n // user can confirm or change the pre-pinned value.\n const callSiteOverride = callSiteOverrideValue(call, trait.name, param.key);\n const effectiveDefault =\n callSiteOverride !== undefined ? callSiteOverride : param.default;\n\n // `helpText` carries the param's authored description (how to answer).\n // `reason` is the distinct \"why you're seeing this\" — only set when it\n // adds information beyond what helpText already says.\n const helpText = param.description;\n const syntheticReason =\n `Customizes \"${param.key}\" on the ${trait.name} trait. ` +\n (effectiveDefault !== undefined\n ? `Default: ${stringifyDefault(effectiveDefault)}.`\n : `No default — leave blank to inherit the factory's behavior.`);\n const reason = helpText !== undefined ? undefined : syntheticReason;\n\n const isAdvanced = !isPrimaryTier(param.tier);\n\n const out: DomainQuestion = {\n id: `${factoryCallPlanOrbitalName(call)}.${trait.name}.${param.key}`,\n orbitalName: factoryCallPlanOrbitalName(call),\n question,\n inputType: deriveInputType(param),\n mutationTemplate: {\n kind: 'set-trait-override-config',\n orbitalName: factoryCallPlanOrbitalName(call),\n traitName: trait.name,\n configKey: param.key,\n },\n };\n if (reason !== undefined) {\n out.reason = reason;\n }\n if (helpText !== undefined) {\n out.helpText = helpText;\n }\n if (effectiveDefault !== undefined) {\n out.defaultValue = effectiveDefault;\n }\n if (param.enumValues && param.enumValues.length > 0) {\n out.suggestedAnswers = param.enumValues;\n }\n if (param.items) {\n out.itemSchema = param.items;\n }\n if (param.properties) {\n out.objectSchema = param.properties;\n }\n if (param.tier) {\n out.tier = param.tier;\n }\n if (isAdvanced) {\n out.advanced = true;\n }\n const weight = tierWeight(param.tier);\n out.weight = weight;\n out.priority = weight;\n return out;\n}\n\n/**\n * Impact weight by decision kind — the spine of both the wizard's\n * prescient-first ordering and its Confidence score. policy/domain are the\n * decisions that change what the business does; infra is operational wiring;\n * presentation is polish. Untagged defaults to presentation (1). `internal`\n * never reaches here (filtered in `configKeyQuestions`).\n */\nfunction tierWeight(tier: FactoryConfigParam['tier']): number {\n switch (tier) {\n case 'domain':\n case 'policy':\n return 3;\n case 'infra':\n return 2;\n case 'internal':\n return 0;\n case 'presentation':\n default:\n return 1;\n }\n}\n\n/** `true` only for the two tiers that render inline (not collapsed). */\nfunction isPrimaryTier(tier: FactoryConfigParam['tier']): boolean {\n return tier === 'domain' || tier === 'policy';\n}\n\nfunction callSiteOverrideValue(\n call: FactoryCallSite,\n traitName: string,\n configKey: string,\n): FactoryParamValue | undefined {\n const override = call.params.traitOverrides?.[traitName];\n if (!override?.config) return undefined;\n if (!Object.prototype.hasOwnProperty.call(override.config, configKey)) {\n return undefined;\n }\n return override.config[configKey] as FactoryParamValue;\n}\n\n/**\n * Pick a widget for a config-key question from the param's typed\n * declaration + its structural carriers. The type tag is lifted\n * verbatim from `.lolo`; `items.properties` and `properties` carry the\n * per-element / per-property schema for structured types so the studio\n * can render a real form instead of a JSON textarea.\n *\n * - `[T]` with `items.properties` → `listOfObjects` (repeatable form)\n * - `[T]` with `enumValues` → `multiselect` (closed checkboxes)\n * - `[T]` otherwise → `tagList` (free-form chips)\n * - `object` with `properties` → `objectForm` (per-property form)\n * - `object` otherwise → `text` (rare; flagged by tests)\n * - `number` / `integer` → `number`\n * - `boolean` → `boolean`\n * - `enum` → `enum`\n * - `string` with `enumValues` → `enum`\n * - `string` → `text`\n */\nexport function deriveInputType(\n param: FactoryConfigParam,\n): DomainQuestionInputType {\n if (param.type.startsWith('[')) {\n if (\n param.items?.properties &&\n Object.keys(param.items.properties).length > 0\n ) {\n return 'listOfObjects';\n }\n if (param.enumValues && param.enumValues.length > 0) {\n return 'multiselect';\n }\n return 'tagList';\n }\n // Typed map (`Map<K,V>`) — a dynamic-key dictionary; edited as an object.\n if (param.type.startsWith('Map<')) {\n return 'objectForm';\n }\n if (param.type === 'object') {\n if (param.properties && Object.keys(param.properties).length > 0) {\n return 'objectForm';\n }\n return 'text';\n }\n switch (param.type) {\n case 'number':\n case 'integer':\n return 'number';\n case 'boolean':\n return 'boolean';\n case 'enum':\n return 'enum';\n case 'string':\n return param.enumValues && param.enumValues.length > 0 ? 'enum' : 'text';\n default:\n return 'text';\n }\n}\n\n/**\n * Humanize a camelCase / kebab-case key into a question prompt\n * fallback when the source `.lolo` doesn't author an explicit label.\n *\n * `itemActions` → `\"Item Actions\"`\n * `owner-field` → `\"Owner Field\"`\n * `URL` → `\"URL\"` (preserves all-caps runs)\n */\nexport function humanizeKey(key: string): string {\n const parts = key\n .replace(/[-_]+/g, ' ')\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\n .split(' ')\n .filter((s) => s.length > 0);\n return parts\n .map((p) => (/^[A-Z]+$/.test(p) ? p : p.charAt(0).toUpperCase() + p.slice(1)))\n .join(' ');\n}\n\nfunction stringifyDefault(v: FactoryParamValue): string {\n if (typeof v === 'string') return JSON.stringify(v);\n if (typeof v === 'number' || typeof v === 'boolean') return String(v);\n if (Array.isArray(v)) return `${v.length} item${v.length === 1 ? '' : 's'}`;\n return 'object';\n}\n\n// ---------------------------------------------------------------------------\n// Entity-field question — lets the user add or override data model fields\n// ---------------------------------------------------------------------------\n\n/**\n * Emit one multiselect question per call site that has a canonical entity.\n *\n * The widget shows the entity's canonical fields as labelled checkboxes;\n * the user confirms or deselects them. The answer (selected field names)\n * flows through the UI's name→EntityField lookup via `fieldCandidates`,\n * then into `answersToMutations` → `set-orbital-entity-fields` → `applyEntityFields`\n * in `translate.ts` (additive/override semantics).\n *\n * `suggestedAnswers` = candidate field name strings (drives checkbox list).\n * `defaultValue` = the canonical field-name set pre-selected.\n * `fieldCandidates` = name → EntityField for the UI's resolution step.\n * `fieldDescriptions` = name → description for checkbox sub-labels.\n *\n * Phrased without an article so no \"a\"/\"an\" guess is needed: no\n * source-tagged noun phrase for an entity exists yet — the only\n * candidate, `defaultLabels.entitySingular`, lives on a different\n * registry AND defaults to the raw entity name, so it would not help.\n * An authored `@entityLabel` on the entity is the real fix.\n *\n * Type note: `FactorySignatureEntityField.type` is `SchemaFieldType` while\n * `EntityField` is a discriminated union. `signatureFieldToEntityField` maps\n * each variant faithfully.\n */\nfunction entityFieldQuestions(\n call: FactoryCallSite,\n signature: FactorySignature,\n): DomainQuestion[] {\n if (signature.entities.length === 0) return [];\n const entity = signature.entities[0];\n const entityName = call.params.entityName ?? entity.name;\n\n const candidateFields = entity.fields.map(signatureFieldToEntityField);\n const fieldCandidates: Record<string, EntityField> = {};\n const fieldDescriptions: Record<string, string> = {};\n const candidateNames: string[] = [];\n\n for (let i = 0; i < entity.fields.length; i++) {\n const sig = entity.fields[i];\n const ef = candidateFields[i];\n const name = sig.name;\n candidateNames.push(name);\n fieldCandidates[name] = ef;\n if (sig.description) {\n fieldDescriptions[name] = sig.description;\n }\n }\n\n const weight = tierWeight('domain');\n const q: DomainQuestion = {\n id: `${factoryCallPlanOrbitalName(call)}.__entityFields`,\n orbitalName: factoryCallPlanOrbitalName(call),\n question: `Fields for ${entityName}`,\n reason: `Defines the data model for ${entityName}. Pick the fields that matter for your use case.`,\n inputType: 'multiselect',\n mutationTemplate: {\n kind: 'set-orbital-entity-fields',\n orbitalName: factoryCallPlanOrbitalName(call),\n },\n suggestedAnswers: candidateNames,\n defaultValue: candidateNames,\n fieldCandidates,\n tier: 'domain',\n weight,\n priority: weight,\n };\n if (Object.keys(fieldDescriptions).length > 0) {\n q.fieldDescriptions = fieldDescriptions;\n }\n return [q];\n}\n\n/**\n * Map a `FactorySignatureEntityField` to an `EntityField` without unsafe casts.\n * Scalar types translate directly to `ScalarEntityField`. `array` and `object`\n * translate to their variants (no extra required fields). `enum` produces an\n * `EnumEntityField` when `values` is present, otherwise falls back to `string`.\n * `relation` produces a `RelationEntityField` when `relation` is present, otherwise\n * falls back to `string`.\n */\nfunction signatureFieldToEntityField(f: FactorySignatureEntityField): EntityField {\n const base = {\n name: f.name,\n required: f.required,\n description: f.description,\n synonyms: f.synonyms,\n intrinsic: f.intrinsic,\n } as const;\n switch (f.type) {\n case 'string':\n case 'number':\n case 'boolean':\n case 'date':\n case 'timestamp':\n case 'datetime':\n // Semantic string domains carry no dependent payload, so they pass through\n // as-is and the question widget narrows the input accordingly.\n case 'email':\n case 'url':\n case 'phone':\n case 'uuid':\n case 'image':\n return { ...base, type: f.type };\n case 'array':\n return { ...base, type: 'array' };\n case 'object':\n return { ...base, type: 'object' };\n case 'enum':\n if (Array.isArray(f.values) && f.values.length > 0) {\n return { ...base, type: 'enum', values: f.values };\n }\n // No values present — safe fallback; payload would be invalid without them.\n return { ...base, type: 'string' };\n case 'relation':\n if (f.relation !== undefined) {\n return { ...base, type: 'relation', relation: f.relation };\n }\n // No relation config present — safe fallback.\n return { ...base, type: 'string' };\n case 'node':\n // Renderable content is computed by the trait's effects, never asked\n // for in a questionnaire — no question payload beyond the tag.\n return { ...base, type: 'node' };\n case 'event':\n // Event-name reference (struct-alias member, e.g. `ItemAction.event`)\n // — authored by the trait, never asked for in a questionnaire, same\n // posture as `node`.\n return { ...base, type: 'event' };\n case 'money':\n case 'instant':\n case 'file':\n case 'bytes':\n // No type-dependent payload — same posture as the semantic string\n // domains above.\n return { ...base, type: f.type };\n default: {\n const _exhaustive: never = f.type;\n return { ...base, type: 'string' };\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Capability-driven questions\n// ---------------------------------------------------------------------------\n\n/**\n * Emit one yes/no question per unique capability not already covered by\n * the ruleOverlay. Capabilities whose name matches a `policy`-tier config\n * knob on the same trait are skipped — that knob already gives the user\n * a direct toggle for the governance behavior, so a second question adds\n * noise. Only capabilities with no backing policy knob get a question.\n *\n * The emitted question uses `inputType: 'boolean'` (a plain yes/no toggle)\n * with a plain-English prompt and `helpText` explaining what enabling it\n * does. The `set-rule` mutation template remains unchanged.\n */\nfunction capabilityQuestions(\n call: FactoryCallSite,\n signature: FactorySignature,\n ruleCapabilities: ReadonlySet<string>,\n): DomainQuestion[] {\n const entityName =\n call.params.entityName ?? signature.entities[0]?.name ?? factoryCallPlanOrbitalName(call);\n const seen = new Set<string>();\n const out: DomainQuestion[] = [];\n for (const trait of signature.traits) {\n const policyKnobKeys = new Set(\n trait.overridableConfigKeys\n .filter((p) => p.tier === 'policy')\n .map((p) => p.key),\n );\n for (const cap of trait.capabilities) {\n if (seen.has(cap)) continue;\n seen.add(cap);\n if (ruleCapabilities.has(cap)) continue;\n // Skip if a policy-tier knob on this trait already surfaces the toggle.\n if (policyKnobKeys.has(cap)) continue;\n out.push({\n id: `${factoryCallPlanOrbitalName(call)}.capability.${cap}`,\n orbitalName: factoryCallPlanOrbitalName(call),\n question: capabilityPrompt(cap, entityName),\n helpText: capabilityHelp(cap, trait),\n capability: cap,\n inputType: 'boolean',\n mutationTemplate: {\n kind: 'set-rule',\n capability: cap,\n appliesTo: [entityName],\n },\n // Capabilities encode governance/policy decisions — high impact.\n weight: 3,\n priority: 3,\n });\n }\n }\n return out;\n}\n\n/** Plain-English yes/no prompt for a capability toggle. */\nfunction capabilityPrompt(capability: string, entity: string): string {\n const label = humanizeKey(capability);\n return `Enable ${label} for ${entity}?`;\n}\n\n/** How-to-answer help text for a capability question. */\nfunction capabilityHelp(\n capability: string,\n trait: FactoryTraitSignature,\n): string {\n return `Turns on the \"${capability}\" behavior from the ${trait.name} trait. Say yes to wire a governance rule into the schema.`;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction findSignature(\n catalog: ReadonlyArray<FactorySignature>,\n organism: string,\n orbital: string,\n): FactorySignature | undefined {\n return catalog.find((s) => s.organism === organism && s.orbital === orbital);\n}\n\nfunction collectRuleCapabilities(\n overlay: RuleOverlay | undefined,\n): ReadonlySet<string> {\n const out = new Set<string>();\n for (const r of overlay?.rules ?? []) {\n if (typeof r.capability === 'string') out.add(r.capability);\n }\n return out;\n}\n\n/** The plan's name for a call site's orbital — `orbitalName` when it differs from the catalog `orbital`. */\nexport function factoryCallPlanOrbitalName(call: FactoryCallSite): string {\n return call.orbitalName ?? call.orbital;\n}\n","/**\n * `answersToMutations(answers, questions)` — turns a\n * `DomainQuestionAnswers` record into a typed\n * `FactoryCallPlanMutation[]`. Each question's `mutationTemplate`\n * matches one variant of the union; the answer fills in the value.\n * `null` (or omitted) answers produce no mutation.\n *\n * @packageDocumentation\n */\n\nimport type { EntityField } from '../../types/field.js';\nimport type { EntityPersistence } from '../../types/entity.js';\nimport type { TraitReference } from '../../types/trait.js';\nimport type { FactoryParamValue } from '../types.js';\nimport type { RuleOverlayEntry } from '../overlays.js';\nimport type { FactoryCallPlanMutation } from '../mutate.js';\nimport type {\n DomainQuestion,\n DomainQuestionAnswer,\n DomainQuestionAnswers,\n FactoryCallPlanMutationTemplate,\n} from './types.js';\n\nconst PERSISTENCE_VALUES: ReadonlyArray<EntityPersistence> = [\n 'persistent',\n 'runtime',\n];\n\nexport function answersToMutations(\n answers: DomainQuestionAnswers,\n questions: ReadonlyArray<DomainQuestion>,\n): FactoryCallPlanMutation[] {\n const out: FactoryCallPlanMutation[] = [];\n for (const q of questions) {\n const answer = answers[q.id];\n if (answer === undefined || answer === null) continue;\n out.push(...answerToMutations(q.mutationTemplate, answer, q));\n }\n return out;\n}\n\nexport function answerToMutations(\n template: FactoryCallPlanMutationTemplate,\n answer: DomainQuestionAnswer,\n _question: DomainQuestion,\n): FactoryCallPlanMutation[] {\n switch (template.kind) {\n case 'set-orbital-entity-name': {\n if (typeof answer !== 'string' || answer.length === 0) return [];\n return [\n {\n kind: 'set-orbital-entity-name',\n orbitalName: template.orbitalName,\n name: answer,\n },\n ];\n }\n case 'set-orbital-entity-fields': {\n if (!isEntityFieldArray(answer)) return [];\n if (answer.length === 0) return [];\n return [\n {\n kind: 'set-orbital-entity-fields',\n orbitalName: template.orbitalName,\n fields: answer,\n },\n ];\n }\n case 'set-orbital-persistence': {\n if (!isPersistence(answer)) return [];\n return [\n {\n kind: 'set-orbital-persistence',\n orbitalName: template.orbitalName,\n persistence: answer,\n },\n ];\n }\n case 'set-orbital-collection': {\n if (typeof answer !== 'string' || answer.length === 0) return [];\n return [\n {\n kind: 'set-orbital-collection',\n orbitalName: template.orbitalName,\n collection: answer,\n },\n ];\n }\n case 'set-orbital-page-path': {\n if (typeof answer !== 'string' || answer.length === 0) return [];\n return [\n {\n kind: 'set-orbital-page-path',\n orbitalName: template.orbitalName,\n pageName: template.pageName,\n path: answer,\n },\n ];\n }\n case 'set-trait-override-config': {\n if (!isFactoryParamValue(answer)) return [];\n return [\n {\n kind: 'set-trait-override-config',\n orbitalName: template.orbitalName,\n traitName: template.traitName,\n key: template.configKey,\n value: answer,\n },\n ];\n }\n case 'add-extra-trait': {\n if (!isTraitReference(answer)) return [];\n return [\n {\n kind: 'add-extra-trait',\n orbitalName: template.orbitalName,\n trait: answer,\n },\n ];\n }\n case 'remove-extra-trait': {\n if (typeof answer !== 'string' || answer.length === 0) return [];\n return [\n {\n kind: 'remove-extra-trait',\n orbitalName: template.orbitalName,\n ref: answer,\n },\n ];\n }\n case 'set-rule': {\n if (typeof answer !== 'string') return [];\n if (answer !== 'yes') return [];\n const rule: RuleOverlayEntry = {\n id: `${template.capability}::${template.appliesTo.join(',')}`,\n capability: template.capability,\n description: `User accepted ${template.capability} for ${template.appliesTo.join(', ')}.`,\n appliesTo: template.appliesTo,\n };\n return [{ kind: 'set-rule', rule }];\n }\n case 'remove-rule': {\n return [{ kind: 'remove-rule', ruleId: template.ruleId }];\n }\n }\n}\n\nfunction isEntityFieldArray(\n a: DomainQuestionAnswer,\n): a is ReadonlyArray<EntityField> {\n if (!Array.isArray(a)) return false;\n for (const x of a) {\n if (typeof x !== 'object' || x === null) return false;\n if (!('name' in x) || !('type' in x)) return false;\n if (typeof x.name !== 'string' || typeof x.type !== 'string') return false;\n }\n return true;\n}\n\nfunction isPersistence(a: DomainQuestionAnswer): a is EntityPersistence {\n return (\n typeof a === 'string' &&\n (PERSISTENCE_VALUES as ReadonlyArray<string>).includes(a)\n );\n}\n\nfunction isFactoryParamValue(a: DomainQuestionAnswer): a is FactoryParamValue {\n if (a === null) return false;\n const t = typeof a;\n if (t === 'string' || t === 'number' || t === 'boolean') return true;\n if (Array.isArray(a)) return true;\n if (t === 'object') return true;\n return false;\n}\n\nfunction isTraitReference(a: DomainQuestionAnswer): a is TraitReference {\n if (typeof a !== 'object' || a === null || Array.isArray(a)) return false;\n if (!('ref' in a)) return false;\n return typeof a.ref === 'string';\n}\n","import type { EntityField } from '../types/field.js';\nimport type { TraitReference } from '../types/trait.js';\nimport type { EntityPersistence } from '../types/entity.js';\nimport type { RuleOverlay, RuleOverlayEntry } from './overlays.js';\nimport type { FactoryParamValue } from './types.js';\n\n/**\n * One slot the agent emits per orbital. Slim shape — agent-facing,\n * carries only what factory dispatch needs. The studio renders forms\n * over this; the projector turns it into a `FactoryCallSite`.\n */\nexport interface OrbitalCallInput {\n orbitalName: string;\n organism?: string;\n orbital?: string;\n entityName?: string;\n entityFields?: ReadonlyArray<EntityField>;\n persistence?: EntityPersistence;\n collection?: string;\n pagePaths?: Readonly<Record<string, string>>;\n traitOverlay?: Readonly<\n Record<\n string,\n {\n config?: Readonly<Record<string, FactoryParamValue>>;\n linkedEntity?: string;\n name?: string;\n }\n >\n >;\n extraTraits?: ReadonlyArray<TraitReference>;\n}\n\n/**\n * Discriminated union of typed edits. Each variant carries only the\n * payload pieces that change. The reducer is total over the union.\n */\nexport type FactoryCallPlanMutation =\n | {\n kind: 'set-orbital-entity-fields';\n orbitalName: string;\n fields: ReadonlyArray<EntityField>;\n }\n | { kind: 'set-orbital-entity-name'; orbitalName: string; name: string }\n | {\n kind: 'set-orbital-persistence';\n orbitalName: string;\n persistence: EntityPersistence;\n }\n | { kind: 'set-orbital-collection'; orbitalName: string; collection: string }\n | {\n kind: 'set-orbital-page-path';\n orbitalName: string;\n pageName: string;\n path: string;\n }\n | {\n kind: 'set-trait-override-config';\n orbitalName: string;\n traitName: string;\n key: string;\n value: FactoryParamValue;\n }\n | {\n kind: 'add-extra-trait';\n orbitalName: string;\n trait: TraitReference;\n }\n | { kind: 'remove-extra-trait'; orbitalName: string; ref: string }\n | { kind: 'set-rule'; rule: RuleOverlayEntry }\n | { kind: 'remove-rule'; ruleId: string };\n\n/**\n * State shape the reducer operates on. Mirrors the slice of the\n * agent's analysis result that incremental edits target.\n */\nexport interface FactoryCallPlanState {\n orbitals: ReadonlyArray<OrbitalCallInput>;\n ruleOverlay?: RuleOverlay;\n}\n\n/**\n * Immutable reducer. Returns a new state; never mutates input.\n */\nexport function applyFactoryCallPlanMutation(\n state: FactoryCallPlanState,\n m: FactoryCallPlanMutation,\n): FactoryCallPlanState {\n switch (m.kind) {\n case 'set-orbital-entity-fields':\n return patchOrbital(state, m.orbitalName, (o) => ({\n ...o,\n entityFields: m.fields,\n }));\n case 'set-orbital-entity-name':\n return patchOrbital(state, m.orbitalName, (o) => ({\n ...o,\n entityName: m.name,\n }));\n case 'set-orbital-persistence':\n return patchOrbital(state, m.orbitalName, (o) => ({\n ...o,\n persistence: m.persistence,\n }));\n case 'set-orbital-collection':\n return patchOrbital(state, m.orbitalName, (o) => ({\n ...o,\n collection: m.collection,\n }));\n case 'set-orbital-page-path':\n return patchOrbital(state, m.orbitalName, (o) => ({\n ...o,\n pagePaths: { ...(o.pagePaths ?? {}), [m.pageName]: m.path },\n }));\n case 'set-trait-override-config':\n return patchOrbital(state, m.orbitalName, (o) => {\n const overlay = o.traitOverlay ?? {};\n const existing = overlay[m.traitName] ?? {};\n const existingConfig = existing.config ?? {};\n return {\n ...o,\n traitOverlay: {\n ...overlay,\n [m.traitName]: {\n ...existing,\n config: { ...existingConfig, [m.key]: m.value },\n },\n },\n };\n });\n case 'add-extra-trait':\n return patchOrbital(state, m.orbitalName, (o) => {\n const existing = o.extraTraits ?? [];\n if (existing.some((t) => t.ref === m.trait.ref)) return o;\n return { ...o, extraTraits: [...existing, m.trait] };\n });\n case 'remove-extra-trait':\n return patchOrbital(state, m.orbitalName, (o) => ({\n ...o,\n extraTraits: (o.extraTraits ?? []).filter((t) => t.ref !== m.ref),\n }));\n case 'set-rule': {\n const rules = state.ruleOverlay?.rules ?? [];\n const idx = rules.findIndex((r) => r.id === m.rule.id);\n const next = idx >= 0\n ? rules.map((r, i) => (i === idx ? m.rule : r))\n : [...rules, m.rule];\n return {\n ...state,\n ruleOverlay: { ...(state.ruleOverlay ?? { rules: [] }), rules: next },\n };\n }\n case 'remove-rule': {\n const rules = state.ruleOverlay?.rules ?? [];\n const next = rules.filter((r) => r.id !== m.ruleId);\n return {\n ...state,\n ruleOverlay: { ...(state.ruleOverlay ?? { rules: [] }), rules: next },\n };\n }\n }\n}\n\nfunction patchOrbital(\n state: FactoryCallPlanState,\n orbitalName: string,\n patch: (o: OrbitalCallInput) => OrbitalCallInput,\n): FactoryCallPlanState {\n return {\n ...state,\n orbitals: state.orbitals.map((o) =>\n o.orbitalName === orbitalName ? patch(o) : o,\n ),\n };\n}\n","/**\n * FactorySignature → JsonSchema generator.\n *\n * Walks a resolved `FactorySignature` (post `inheritCallSiteOverrideTypes`)\n * and emits a JSON Schema for the corresponding `AnalysisOrbitalParams`\n * shape: `entityName / pagePath / fields / traitOverrides / extraTraits\n * / pages / theme`. The `traitOverrides` property is the densest part — one\n * entry per trait with a typed `config` sub-schema reflecting\n * `overridableConfigKeys` (type + enum + items + properties + label +\n * synonyms metadata).\n *\n * The output is consumed by V2's tool-calling layer\n * (`@almadar-io/agent`'s coordinator + per-orbital subagent) via\n * OpenAI's `tool.parameters` with `strict: true` — the LLM is masked\n * to the schema and physically cannot emit unknown trait names,\n * invented knob keys, or out-of-set enum values.\n *\n * `additionalProperties: false` is set at every level so unknown keys\n * are rejected. Inherited descriptive metadata (label, description,\n * synonyms) flows into `description` / `x-label` / `x-synonyms`\n * extension keywords so studio UIs + prompt rendering can use the\n * same single artifact.\n */\nimport { getAllPatternTypes } from '../patterns/helpers/prompt-helpers.js';\nimport { persistenceModeAllowsOverrides } from '../types/entity.js';\nimport { UI_SLOTS } from '../types/effect.js';\nimport type { EntityField } from '../types/field.js';\nimport { NUM_WIDTH_TAGS } from '../types/field.js';\nimport type {\n FactoryConfigParam,\n FactoryParamValue,\n FactorySignature,\n FactoryTraitSignature,\n JsonSchema,\n JsonSchemaType,\n JsonValue,\n} from './types.js';\n\n// ============================================================================\n// Top-level: signature → params schema\n// ============================================================================\n\nexport function signatureToParamsSchema(\n signature: FactorySignature,\n options?: { readonly themeNames?: readonly string[] },\n): JsonSchema {\n // `trait`-typed knobs must hold `@trait.<TraitName>` naming a trait on\n // THIS orbital — the exact contract rabit's `validateTraitTypedConfigRefs`\n // enforces at fill time with a retry. Baking the same values as an enum\n // makes the invalid reference inexpressible instead of caught-and-retried\n // (SCAN-TRAITREF-KNOB-1: the fill spent its attempts on\n // `sidebarTrait = \"AuthorDirectory\"` and the HIT demoted).\n const traitRefValues = signature.traits.map((t) => `@trait.${t.name}`).sort();\n const traitProps: { [key: string]: JsonSchema } = {};\n for (const trait of signature.traits) {\n // An imported trait is carried, not overridable at the call site.\n if (trait.importedFrom !== undefined) continue;\n // A trait can never be its OWN content/sidebar slot — the compiler rejects\n // it as `ORB_BINDING_TRAIT_SELF_REFERENCE`. Offering it is an always-invalid\n // value in a closed enum: measured 1,238 of 1,238 trait-typed knobs carried\n // their own trait, and a fill that picked it demoted a factory HIT\n // (std-lms/AppointmentPolicyFromStdOrbital). Excluded per-trait rather than\n // globally — a SIBLING trait remains a legitimate value.\n const selectableRefs = traitRefValues.filter((v) => v !== `@trait.${trait.name}`);\n const traitSchema = traitToOverrideSchema(trait, selectableRefs);\n if (traitSchema !== null) {\n traitProps[trait.name] = traitSchema;\n }\n }\n\n const allowPersistenceOverride = persistenceModeAllowsOverrides(\n signature.entities[0]?.persistence,\n signature.entities[0]?.dataBearing ?? false,\n );\n\n const properties: { [key: string]: JsonSchema } = {\n entityName: {\n type: 'string',\n description: 'PascalCase singular entity rename (e.g. \"Listing\", \"Member\"). Renames the DOMAIN concept and rewrites every `@Entity.*` reference. Use this when the user wants to rename the THING, not where it\\'s stored.',\n },\n pagePath: {\n type: 'string',\n description: \"URL path override for the orbital's first page.\",\n },\n fields: {\n type: 'array',\n description: 'Extra entity fields appended to the canonical entity. Caller wins on name collision.',\n items: ENTITY_FIELD_SCHEMA,\n },\n traitOverrides: Object.keys(traitProps).length > 0\n ? {\n type: 'object',\n additionalProperties: false,\n description:\n 'Per-trait knob overrides keyed on the canonical trait name. Each value can include `config` (knob values), `linkedEntity` (rebind), `events` (per-key rename map), `listens` (cross-orbital subscriptions), `emitsScope` (`internal` keeps emits local; `external` lets sibling orbitals listen), and `name` (rename the inlined trait). Only the traits + knobs shown here are valid — the schema rejects unknown keys.',\n properties: traitProps,\n }\n : { type: 'object', additionalProperties: false, properties: {} },\n extraTraits: {\n type: 'array',\n description: 'Sibling traits to compose beyond the factory-authored stack.',\n items: EXTRA_TRAIT_SCHEMA,\n },\n pages: {\n type: 'array',\n description: 'Per-page overrides keyed by canonical page name.',\n items: PAGE_OVERRIDE_SCHEMA,\n },\n theme: {\n type: 'string',\n // Theme names are injected by the caller rather than harvested from\n // `@almadar-ui/themes/*.css` — core is UPSTREAM of `@almadar/ui`, which\n // owns the theme CSS, and cannot read the filesystem to discover it.\n ...(options?.themeNames !== undefined && options.themeNames.length > 0\n ? { enum: [...options.themeNames] }\n : {}),\n description:\n 'Theme key — the full `data-theme` value applied to the layout root (e.g. linear-clean-light, terminal-dark, game-adventure-dark). Plan-level: pick ONE for the whole app — it is threaded to every orbital. Omit to leave the factory default.',\n },\n };\n\n if (signature.config && signature.config.length > 0) {\n const configProps: { [key: string]: JsonSchema } = {};\n for (const knob of signature.config) {\n configProps[knob.key] = knobToSchema(knob, undefined, traitRefValues);\n }\n properties.config = {\n type: 'object',\n additionalProperties: false,\n description: \"This orbital's own declared knobs (Orbital.config). Only the keys shown are valid.\",\n properties: configProps,\n };\n }\n\n if (allowPersistenceOverride) {\n properties.collection = {\n type: 'string',\n description: 'Override the persistence collection / table name. Defaults to `plural(entityName).toLowerCase()`. Use this when the user names the database/table/storage location (\"save them under X\", \"the table is called X\", \"in our database it\\'s X\") — NOT when they rename the domain concept (that\\'s `entityName`).',\n };\n properties.persistence = {\n type: 'string',\n enum: ['persistent', 'runtime'],\n description: 'Override the entity persistence mode. `persistent` = stored in the configured backend; `runtime` = in-memory session-scoped only.',\n };\n }\n\n const schema: JsonSchema = {\n type: 'object',\n additionalProperties: false,\n description: `Typed params for ${signature.organism} / ${signature.orbital}. Empty {} = factory defaults.`,\n properties,\n };\n assertNoUnsatisfiableEnum(schema, `${signature.organism}/${signature.orbital}`);\n return schema;\n}\n\n/**\n * The standing form of the self-reference bug: **a closed enum must not be\n * empty.** An empty `enum` permits nothing, so every value the model can\n * produce is rejected and the HIT demotes with no path back — strictly worse\n * than a wrong default, and invisible because each individual construct is\n * still legal JSON Schema.\n *\n * This is deliberately the GENERAL check rather than a second per-slot filter.\n * Each enum here is built by projecting one candidate list across many slots\n * (traits, entities, events, patterns, themes), and every such projection can\n * narrow to nothing for some signature — the trait case did, at 1,238 of 1,238\n * offers, and was found only because a scan happened to trip on it. Anything\n * that empties a candidate set now fails the bake loudly instead of shipping a\n * schema the compiler will always reject.\n */\nexport function assertNoUnsatisfiableEnum(node: JsonSchema, where: string, path = ''): void {\n if (Array.isArray(node.enum) && node.enum.length === 0) {\n throw new Error(\n `[signatures] ${where}: empty enum at \"${path || '<root>'}\" — the schema permits no value, ` +\n 'so every fill for this knob is rejected. Omit the knob instead of offering an unsatisfiable one.',\n );\n }\n for (const [key, child] of Object.entries(node.properties ?? {})) {\n assertNoUnsatisfiableEnum(child, where, path === '' ? key : `${path}.${key}`);\n }\n if (node.items !== undefined) assertNoUnsatisfiableEnum(node.items, where, `${path}[]`);\n}\n\n// ============================================================================\n// Trait override schema — one entry per trait in the signature\n// ============================================================================\n\nfunction traitToOverrideSchema(\n trait: FactoryTraitSignature,\n traitRefValues?: ReadonlyArray<string>,\n): JsonSchema | null {\n // Skip traits with zero overridable knobs AND no other override surface.\n // A `@rebindable` trait always has an override surface (linkedEntity), so\n // it keeps an entry even with zero config knobs.\n if (trait.overridableConfigKeys.length === 0 && trait.entityRebindable !== true) return null;\n\n const knobProps: { [key: string]: JsonSchema } = {};\n for (const knob of trait.overridableConfigKeys) {\n // A trait-typed knob on a trait with no SELECTABLE sibling has no valid\n // value at all — the only candidate was the enclosing trait, which the\n // compiler rejects as ORB_BINDING_TRAIT_SELF_REFERENCE. Omit it, the same\n // way `listens` is omitted for render-only traits below: an unsatisfiable\n // knob must not be offered.\n //\n // Without this the self-reference filter would silently DEGRADE such a\n // knob to a free string (`knobToSchema` only builds the enum when the set\n // is non-empty), reopening SCAN-TRAITREF-KNOB-1 for exactly the orbitals\n // the filter was meant to protect. `undefined` still means \"topology\n // unknown\" (legacy catalog) and keeps the free-string surface; only a\n // DEFINED-and-empty set is unsatisfiable.\n if (knob.type === 'trait' && traitRefValues !== undefined && traitRefValues.length === 0) {\n continue;\n }\n knobProps[knob.key] = knobToSchema(knob, trait, traitRefValues);\n }\n\n // `linkedEntity` is ONLY offered for traits whose binding the atom author\n // marked `@rebindable`. For fixed-binding traits it's omitted entirely so\n // the LLM physically cannot author a rebind the validator would reject.\n // rabit narrows the value to a closed enum of the organism's entities.\n const properties: { [key: string]: JsonSchema } = {\n config: {\n type: 'object',\n additionalProperties: false,\n properties: knobProps,\n },\n };\n if (trait.entityRebindable === true) {\n properties.linkedEntity = {\n type: 'string',\n description: \"Rebind this trait to a different entity in the organism (rewrites every @entity.* / ref / fetch / persist binding inside it).\",\n };\n }\n\n // `listens[].triggers` must name an event THIS trait's own state machine\n // transitions on (ORB_X_LISTEN_TRIGGER_UNMATCHED otherwise). When the\n // signature carries the trait's topology, mask the LLM to it: enum the\n // triggers when transitions exist, and omit `listens` entirely for\n // render-only traits (zero transitions — no listen entry can ever be\n // valid; target the sibling trait that owns the transition instead).\n // Unknown topology (legacy catalogs) keeps the free-string surface.\n const triggersSchema: JsonSchema =\n trait.transitionEvents !== undefined && trait.transitionEvents.length > 0\n ? {\n type: 'string',\n enum: [...trait.transitionEvents],\n description: 'Local state-machine event fired when the subscription matches. Must be one of the events this trait\\'s own transitions already react to.',\n }\n : {\n type: 'string',\n description: 'Local state-machine event fired when the subscription matches.',\n };\n const listensProperty: { [key: string]: JsonSchema } =\n trait.transitionEvents !== undefined && trait.transitionEvents.length === 0\n ? {}\n : {\n listens: {\n type: 'array',\n items: {\n type: 'object',\n additionalProperties: false,\n required: ['event', 'triggers'],\n properties: {\n event: { type: 'string', description: 'Event key to subscribe to (bare name, no orbital prefix).' },\n triggers: triggersSchema,\n scope: { type: 'string', enum: ['internal', 'external'], description: '`internal` = same-orbital events. `external` = events from sibling orbitals (use this for cross-orbital reactivity).' },\n },\n },\n description: 'Replace this trait\\'s `listens` entirely. Empty array clears upstream listeners. For cross-orbital reactivity, add an entry with `scope: \"external\"` matching the source orbital\\'s emit event.',\n },\n };\n\n return {\n type: 'object',\n additionalProperties: false,\n description: `Override knobs for ${trait.name}.`,\n properties: {\n ...properties,\n name: {\n type: 'string',\n description: \"Rename the inlined trait at the call site. Does NOT change topology — just the trait's local name.\",\n },\n events: {\n type: 'object',\n additionalProperties: { type: 'string' },\n description: 'Per-key event rename map (e.g. `{ \"OPEN\": \"ADD_ITEM\" }`). Rewrites the events array, transition triggers, emit/listen event keys, and `[\"emit\", X]` SExpression literals inside the trait.',\n },\n ...listensProperty,\n emitsScope: {\n type: 'string',\n enum: ['internal', 'external'],\n description: '`internal` = emits stay local to this orbital. `external` = sibling orbitals can listen. Set to `external` when another orbital needs to react to this trait\\'s events (counter updates, list refreshes, badges, etc.).',\n },\n },\n };\n}\n\n// ============================================================================\n// Knob schema — FactoryConfigParam → JsonSchema for one knob\n// ============================================================================\n\nfunction knobToSchema(\n knob: FactoryConfigParam,\n trait?: FactoryTraitSignature,\n traitRefValues?: ReadonlyArray<string>,\n): JsonSchema {\n const out: JsonSchema = {};\n\n // Map the knob's declared type tag to a JSON Schema type.\n const baseType = mapKnobType(knob.type);\n if (baseType !== null) out.type = baseType;\n\n // Enum constraint — knob.enumValues becomes JSON Schema's `enum`.\n if (knob.enumValues && knob.enumValues.length > 0) {\n out.enum = [...knob.enumValues];\n // If type wasn't already string-ish, pin it to string for enum.\n if (!out.type) out.type = 'string';\n }\n\n // `slot`-typed knobs are a CLOSED registry (UI_SLOTS) — unconstrained,\n // the fill invents values like 'inline' that hard-fail the validator\n // (ORB_T_INVALID_SLOT_DEFAULT) and demote the whole HIT. Same posture\n // as the listens-triggers enum: constrain at the schema so an invalid\n // value can't reach the factory.\n if (knob.type === 'slot' && out.enum === undefined) {\n out.enum = [...UI_SLOTS];\n }\n\n // `pattern`-typed knobs are the same closed-registry shape as slots —\n // unconstrained, the fill invents names like 'full' that hard-fail\n // ORB_T_INVALID_PATTERN_DEFAULT + ORB_RUI_INVALID_PATTERN and demote the\n // HIT (SCAN-PATTERN-KNOB-1, organism-scan run12). Enum over the pattern\n // registry's type names; same self-consistency guard as the other pins.\n if (knob.type === 'pattern' && out.enum === undefined) {\n const patternTypes: readonly string[] = getAllPatternTypes();\n const selfConsistent =\n typeof knob.default !== 'string' ||\n knob.default === '' ||\n patternTypes.includes(knob.default);\n if (patternTypes.length > 0 && selfConsistent) {\n out.enum = [...patternTypes].sort();\n }\n }\n\n // `trait`-typed knobs: enum over the orbital's canonical `@trait.<name>`\n // references — the same value set `validateTraitTypedConfigRefs` accepts.\n // Same guards as the other reference pins: skip when unavailable or when\n // the knob's own non-empty default is missing from the set.\n if (\n knob.type === 'trait' &&\n out.enum === undefined &&\n traitRefValues !== undefined &&\n traitRefValues.length > 0\n ) {\n const selfConsistent =\n typeof knob.default !== 'string' ||\n knob.default === '' ||\n traitRefValues.includes(knob.default);\n if (selfConsistent) {\n out.enum =\n typeof knob.default === 'string' && knob.default === ''\n ? ['', ...traitRefValues]\n : [...traitRefValues];\n }\n }\n\n // `event`-DECLARED knobs (the `.lolo` type, never inferred) reference an\n // event in the owning trait's vocabulary — unconstrained, the fill\n // invents literals like 'note.search' that fail\n // ORB_T_INVALID_EVENT_DEFAULT and demote the HIT (SCAN-EVENT-KNOB-1).\n // Enum = the trait's event union from the signature, plus '' (the\n // validator's default-off outlet). Canonical names stay correct under\n // call-site renames because the inline pass rename-folds event-typed\n // knob values (event_typed_knob_rename_fold.rs). Guards: skip when the\n // union is empty (vacuous, compiler parity) or when the knob's own\n // non-empty default is missing from it (an enum that forbids its own\n // default is wrong by construction).\n //\n // A-UNIFY: a DEFINER knob (A-UNIFY spells it `: event` same as a\n // reference knob) is exempt — its value CREATES the event name rather\n // than referencing one, so pinning it to the trait's existing vocabulary\n // would forbid the very name it's meant to introduce. Left UNPINNED is\n // deliberate and correct: any name is valid by construction, a definer\n // cannot go stale. Do not \"fix\" this back to a pin.\n const isDefinerKnob = trait?.definerKnobs?.includes(knob.key) ?? false;\n if (knob.type === 'event' && isDefinerKnob) {\n out['x-role'] = 'definer';\n }\n if (knob.type === 'event' && !isDefinerKnob && out.enum === undefined && trait !== undefined) {\n const vocabulary = new Set<string>([\n ...trait.emittedEvents,\n ...trait.listenedEvents,\n ...(trait.transitionEvents ?? []),\n ]);\n vocabulary.delete('');\n const selfConsistent =\n typeof knob.default !== 'string' ||\n knob.default === '' ||\n vocabulary.has(knob.default);\n if (vocabulary.size > 0 && selfConsistent) {\n out.enum = ['', ...[...vocabulary].sort()];\n }\n }\n\n // Recursive shape for arrays: `items` shape from EntityField.\n if (knob.items !== undefined) {\n out.items = entityFieldToSchema(knob.items);\n if (!out.type) out.type = 'array';\n }\n\n // Recursive shape for objects / structs.\n if (knob.properties !== undefined && Object.keys(knob.properties).length > 0) {\n const props: { [key: string]: JsonSchema } = {};\n for (const [k, ef] of Object.entries(knob.properties)) {\n props[k] = entityFieldToSchema(ef);\n }\n out.properties = props;\n if (!out.type) out.type = 'object';\n }\n\n // Default value (if any) — passes through as JsonValue.\n if (knob.default !== undefined) {\n out.default = toJsonValue(knob.default);\n }\n\n // Descriptive metadata — surfaced for prompt rendering + studio UIs.\n if (knob.description) out.description = knob.description;\n if (knob.label) out['x-label'] = knob.label;\n if (knob.synonyms) out['x-synonyms'] = knob.synonyms;\n if (knob.tier) out['x-tier'] = knob.tier;\n\n return out;\n}\n\n// ============================================================================\n// EntityField → JsonSchema (used by knob.items / knob.properties / fields)\n// ============================================================================\n\nfunction entityFieldToSchema(field: EntityField): JsonSchema {\n // A union's `properties` are its VARIANTS by name, not members: offer one\n // closed shape per variant so a value is exactly one of them.\n if (field.type === 'union') {\n const variants = field.values\n .map((name) => field.properties?.[name])\n .filter((v): v is EntityField => v !== undefined);\n if (variants.length === 0) return {};\n return { oneOf: variants.map((v) => ({ ...entityFieldToSchema(v), additionalProperties: false })) };\n }\n const out: JsonSchema = {};\n const baseType = mapEntityFieldType(field.type);\n if (baseType !== null) out.type = baseType;\n\n // Enum / scalar vocabulary hint — both `enum` and scalar variants\n // carry an optional `values: string[]` in the discriminated union.\n if (\n (field.type === 'enum' ||\n field.type === 'string' ||\n field.type === 'number' ||\n field.type === 'boolean' ||\n field.type === 'date' ||\n field.type === 'timestamp' ||\n field.type === 'datetime') &&\n Array.isArray(field.values) &&\n field.values.length > 0\n ) {\n out.enum = field.values.filter(isEnumLeaf);\n if (!out.type) out.type = 'string';\n }\n if (field.type === 'array' && field.items !== undefined) {\n out.items = entityFieldToSchema(field.items);\n if (!out.type) out.type = 'array';\n }\n // Struct shape — a named struct like `[ItemAction]` lowers to an object\n // EntityField whose `properties` carry the per-field sub-tree with\n // `required` flags. Projecting them (plus `required`) lets the ajv\n // contract boundary reject a wrong field name (e.g. `action` instead of\n // `event`) at fill time instead of the factory type-check failing the\n // build afterwards and demoting the orbital.\n if (field.properties !== undefined && Object.keys(field.properties).length > 0) {\n const props: { [key: string]: JsonSchema } = {};\n const required: string[] = [];\n for (const [k, ef] of Object.entries(field.properties)) {\n props[k] = entityFieldToSchema(ef);\n if (ef.required === true) required.push(k);\n }\n out.properties = props;\n if (required.length > 0) out.required = required;\n if (!out.type) out.type = 'object';\n }\n if (field.default !== undefined) {\n out.default = toJsonValue(field.default);\n }\n return out;\n}\n\nfunction isEnumLeaf(v: JsonValue): v is string | number | boolean {\n return typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean';\n}\n\n// ============================================================================\n// Type mappers\n// ============================================================================\n\nfunction mapKnobType(knobType: string): JsonSchemaType | null {\n // Strip array bracket wrapper for `[T]` types.\n if (knobType.startsWith('[') && knobType.endsWith(']')) return 'array';\n switch (knobType) {\n case 'string':\n return 'string';\n case 'number':\n case 'integer':\n case 'float':\n return knobType === 'integer' ? 'integer' : 'number';\n case 'boolean':\n case 'bool':\n return 'boolean';\n case 'object':\n // An orbital value is `{ behavior, orbital, …import body }` on the wire; a behavior value is `{ behavior }`.\n case 'orbital':\n case 'behavior':\n return 'object';\n case 'array':\n return 'array';\n case 'enum':\n return 'string';\n // String-valued reference tags: a trait ref is \"@trait.<Name>\", a\n // slot/pattern/icon/asset is a registry name, an event is an event\n // key, a date is an ISO string. These were mis-emitted as `object`\n // (11k knobs catalog-wide carried an object type with a string\n // default), which was harmless while tool schemas were advisory but\n // breaks hard validation.\n case 'trait':\n case 'slot':\n case 'pattern':\n case 'secret':\n case 'icon':\n case 'asset':\n case 'event':\n case 'EventAddress':\n case 'CallKey':\n case 'field':\n case 'date':\n return 'string';\n case 'render-ui':\n // First-class render-ui SExpr tree (Layer 3 variant-body knob).\n // The runtime substitutes the value into the parent atom's\n // `(render-ui main @config.X)` body verbatim. Schema-wise it's a\n // recursive object with `type: \"<pattern-name>\"` + nested\n // `children`; for LLM JSON Schema we surface it as `object` and\n // rely on the knob description + pattern-registry awareness for\n // shape guidance.\n return 'object';\n // Polymorphic values: a `node` accepts a string leaf OR a render-ui\n // tree; `json`/`unknown` carry arbitrary JSON. No `type` — the\n // schema stays structurally honest instead of over-constraining.\n case 'node':\n case 'json':\n case 'unknown':\n return null;\n default:\n // Custom struct types (e.g. `FormatOption`) — `knobToSchema` pins\n // `object` iff `knob.properties` captured a shape; otherwise the\n // knob stays untyped rather than claiming a shape we don't know.\n return null;\n }\n}\n\nexport function mapEntityFieldType(fieldType: string): JsonSchemaType | null {\n switch (fieldType) {\n case 'string':\n case 'date':\n case 'timestamp':\n case 'datetime':\n // JSON Schema has no email/url/phone/uuid/image primitive — the declared\n // domain is carried on the signature's own `type` field (see\n // `asSchemaFieldType`), not here. This maps to the WIRE shape only.\n case 'email':\n case 'url':\n case 'phone':\n case 'uuid':\n case 'image':\n case 'bytes':\n return 'string';\n case 'number':\n case 'instant':\n return 'number';\n case 'boolean':\n return 'boolean';\n case 'array':\n return 'array';\n case 'object':\n case 'relation':\n case 'orbital':\n case 'behavior':\n return 'object';\n case 'enum':\n return 'string';\n case 'trait':\n case 'slot':\n case 'pattern':\n case 'secret':\n return 'string';\n // Phase B (SCAN-EVENT-KNOB-2): event-name reference — a string at the\n // wire level, same as `mapKnobType`'s `case 'event'` (that asymmetry\n // — this function fell to `default: null`, leaving struct-field\n // `event` members with NO json-schema type — was the bug).\n case 'event':\n case 'EventAddress':\n case 'CallKey':\n case 'field':\n return 'string';\n // Polymorphic renderable content: a node accepts a string leaf OR a\n // render-ui tree — no JSON-Schema `type` constraint, mirroring\n // `mapKnobType`'s `case 'node'`. (The default would return null too;\n // explicit for parity and self-documentation.)\n case 'node':\n return null;\n default:\n return null;\n }\n}\n\n// ============================================================================\n// Coerce arbitrary value into JsonValue (no unknown leaks)\n// ============================================================================\n\n/**\n * Widen the two JSON-shaped value types the signature carries\n * (`FactoryConfigParam.default` is `FactoryParamValue`, `EntityField.default`\n * is `JsonValue`) into the mutable `JsonValue` a schema `default` holds.\n *\n * Typed as their union rather than `unknown`: both are already JSON by\n * construction, so no escape hatch is needed and the recursion stays checked.\n * Non-finite numbers become `null` because `NaN`/`Infinity` have no JSON\n * encoding and would serialise as `null` anyway — better to say so here than\n * to let `JSON.stringify` decide silently.\n */\nfunction toJsonValue(value: FactoryParamValue | JsonValue): JsonValue {\n if (value === null) return null;\n if (typeof value === 'string') return value;\n if (typeof value === 'number') return Number.isFinite(value) ? value : null;\n if (typeof value === 'boolean') return value;\n if (Array.isArray(value)) {\n return value.map(toJsonValue);\n }\n const out: { [key: string]: JsonValue } = {};\n for (const [k, v] of Object.entries(value)) {\n out[k] = toJsonValue(v);\n }\n return out;\n}\n\n// ============================================================================\n// Shared schemas for entity field / extra trait / page override entries\n// ============================================================================\n\n/**\n * Discriminated-union shape for an entity field. Each `oneOf` branch\n * pins `type` to a literal and lists its dependent required slots:\n * - `type === 'enum'` REQUIRES `values: string[]`\n * - `type === 'relation'` REQUIRES `relation: { entity, cardinality }`\n * - `type === 'array'` MAY carry `items` (optional for legacy\n * codegen emit; lolo + Rust validator handle typed-element cases)\n * - other scalars accept the base shape\n *\n * `additionalProperties: false` at every level rejects unknown keys at\n * the LLM tool-call layer. Mirrors `EntityField` discriminated union\n * from `@almadar/core` (8.6.2).\n */\nconst ENTITY_FIELD_BASE_PROPS = {\n name: { type: 'string' as JsonSchemaType, description: 'Field name (camelCase).' },\n required: { type: 'boolean' as JsonSchemaType },\n primaryKey: { type: 'boolean' as JsonSchemaType },\n intrinsic: { type: 'boolean' as JsonSchemaType },\n min: { type: 'number' as JsonSchemaType },\n max: { type: 'number' as JsonSchemaType },\n description: { type: 'string' as JsonSchemaType },\n synonyms: { type: 'string' as JsonSchemaType },\n mock: { type: 'string' as JsonSchemaType },\n mergedFrom: { type: 'string' as JsonSchemaType },\n projectedFrom: {\n type: 'object' as JsonSchemaType,\n additionalProperties: false,\n required: ['type'],\n properties: { type: { type: 'string' as JsonSchemaType }, field: { type: 'string' as JsonSchemaType } },\n },\n properties: { type: 'object' as JsonSchemaType, additionalProperties: { $ref: 'urn:almadar:entity-field#/$defs/field' } },\n values: { type: 'array' as JsonSchemaType, items: { type: 'string' as JsonSchemaType } },\n default: {\n type: ['string', 'number', 'boolean', 'null', 'array', 'object'] as ReadonlyArray<JsonSchemaType>,\n } as JsonSchema,\n};\n// Includes the semantic domains: without them an L1 factory HIT cannot express\n// an email field at all, so `fill_params` could never produce one.\nconst SCALAR_FIELD_TYPES: ReadonlyArray<string> = [\n 'string', 'number', 'int', ...NUM_WIDTH_TAGS, 'boolean', 'date', 'timestamp', 'datetime', 'instant',\n 'email', 'url', 'phone', 'uuid', 'image', 'money',\n 'file', 'bytes', 'trait', 'slot', 'pattern', 'node', 'event', 'EventAddress', 'CallKey', 'SExpr',\n];\nconst SCALAR_FIELD_BRANCH: JsonSchema = {\n type: 'object',\n additionalProperties: false,\n required: ['name', 'type'],\n properties: {\n ...ENTITY_FIELD_BASE_PROPS,\n type: { type: 'string', enum: SCALAR_FIELD_TYPES, description: 'Field type tag.' },\n },\n};\nconst ENUM_FIELD_BRANCH: JsonSchema = {\n type: 'object',\n additionalProperties: false,\n required: ['name', 'type', 'values'],\n properties: {\n ...ENTITY_FIELD_BASE_PROPS,\n type: { type: 'string', enum: ['enum'], description: 'Enum field.' },\n values: {\n type: 'array',\n description: 'Closed string vocabulary. e.g. [\"active\",\"inactive\",\"pending\"].',\n minItems: 1,\n items: { type: 'string' },\n },\n },\n};\nconst RELATION_FIELD_BRANCH: JsonSchema = {\n type: 'object',\n additionalProperties: false,\n required: ['name', 'type', 'relation'],\n properties: {\n ...ENTITY_FIELD_BASE_PROPS,\n type: { type: 'string', enum: ['relation'], description: 'Relation (FK) field.' },\n relation: {\n type: 'object',\n additionalProperties: false,\n required: ['entity'],\n properties: {\n entity: { type: 'string', description: 'Sibling entity name (PascalCase singular).' },\n entityId: { type: 'string' },\n cardinality: { type: 'string', enum: ['one', 'many'] },\n field: { type: 'string' },\n onDelete: { type: 'string', enum: ['cascade', 'nullify', 'restrict'] },\n },\n description: 'Relation target. `cardinality: \"one\"` for FK (customerId → one Customer); \"many\" for collection (tags → many Tag).',\n },\n },\n};\nconst ARRAY_FIELD_BRANCH: JsonSchema = {\n type: 'object',\n additionalProperties: false,\n required: ['name', 'type'],\n properties: {\n ...ENTITY_FIELD_BASE_PROPS,\n type: { type: 'string', enum: ['array'], description: 'Array field.' },\n items: { $ref: 'urn:almadar:entity-field#/$defs/field' },\n },\n};\n// A nested structure within the entity: an `object` declares its members\n// (struct) or its value type (map). A shapeless `object` is not offered —\n// `orb validate` rejects it (ORB_T_GENERIC_TYPE_DEPRECATED).\nconst OBJECT_FIELD_BRANCH: JsonSchema = {\n type: 'object',\n additionalProperties: false,\n required: ['name', 'type'],\n anyOf: [{ required: ['properties'] }, { required: ['items'] }],\n properties: {\n ...ENTITY_FIELD_BASE_PROPS,\n type: { type: 'string', enum: ['object'], description: 'Struct members or map value shape.' },\n items: { $ref: 'urn:almadar:entity-field#/$defs/field' },\n },\n};\nconst UNION_FIELD_BRANCH: JsonSchema = {\n type: 'object',\n additionalProperties: false,\n required: ['name', 'type', 'values'],\n properties: {\n ...ENTITY_FIELD_BASE_PROPS,\n type: { type: 'string', enum: ['union'] },\n values: { ...ENTITY_FIELD_BASE_PROPS.values, minItems: 1 },\n },\n};\nconst TUPLE_FIELD_BRANCH: JsonSchema = {\n type: 'object',\n additionalProperties: false,\n required: ['name', 'type', 'properties'],\n properties: {\n ...ENTITY_FIELD_BASE_PROPS,\n type: { type: 'string', enum: ['tuple'] },\n properties: { ...ENTITY_FIELD_BASE_PROPS.properties, minProperties: 1 },\n },\n};\nconst ENTITY_FIELD_BRANCHES: ReadonlyArray<JsonSchema> = [\n SCALAR_FIELD_BRANCH,\n ENUM_FIELD_BRANCH,\n RELATION_FIELD_BRANCH,\n ARRAY_FIELD_BRANCH,\n OBJECT_FIELD_BRANCH,\n UNION_FIELD_BRANCH,\n TUPLE_FIELD_BRANCH,\n];\nexport const ENTITY_FIELD_SCHEMA: JsonSchema = {\n $id: 'urn:almadar:entity-field',\n oneOf: ENTITY_FIELD_BRANCHES,\n $defs: {\n field: {\n oneOf: ENTITY_FIELD_BRANCHES.map(branch => ({ ...branch, required: branch.required?.filter(key => key !== 'name') })),\n },\n },\n};\n\nconst EXTRA_TRAIT_SCHEMA: JsonSchema = {\n type: 'object',\n additionalProperties: false,\n required: ['from', 'as', 'ref'],\n properties: {\n from: { type: 'string', description: 'Registry path (e.g. std/behaviors/std-approval-request).' },\n as: { type: 'string', description: 'Local alias used in `ref`.' },\n ref: { type: 'string', description: 'Trait reference (Alias.traits.X).' },\n name: { type: 'string', description: 'Optional rename of the inlined trait.' },\n linkedEntity: { type: 'string', description: 'Optional entity rebinding.' },\n emitsScope: { type: 'string', enum: ['internal', 'external'] },\n },\n};\n\nconst PAGE_OVERRIDE_SCHEMA: JsonSchema = {\n type: 'object',\n additionalProperties: false,\n required: ['name'],\n properties: {\n name: { type: 'string', description: 'Canonical page name from the orbital.' },\n path: { type: 'string', description: 'URL path override.' },\n linkedEntity: { type: 'string', description: 'Rebind the primary entity.' },\n },\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isEventResponse } from './chunk-
|
|
1
|
+
import { isEventResponse } from './chunk-VIHQKKTZ.js';
|
|
2
2
|
import { EventPayloadSchema } from './chunk-347APWFM.js';
|
|
3
3
|
import { EventIdSchema, TraitIdSchema, OrbitalIdSchema } from './chunk-VG7BRFUD.js';
|
|
4
4
|
import { JsonValueSchema } from './chunk-7GHJU5WI.js';
|
|
@@ -95,5 +95,5 @@ var LiveBroadcastItemSchema = z.object({
|
|
|
95
95
|
});
|
|
96
96
|
|
|
97
97
|
export { BusEventSourceSchema, ClientEffectTupleSchema, ClientHostAskTupleSchema, ClientNavigateBackTupleSchema, ClientNavigateTupleSchema, ClientRenderUITupleSchema, DeliveryRecordSchema, DispatchLogSchema, EmittedEventSchema, EventStreamItemSchema, HostAskCompletionSchema, LIFECYCLE_EVENTS, LiveBroadcastItemSchema, MountSeedSchema, OrbitalRegisterResponseSchema, ServerTopologySchema, UNMOUNT_EVENT, normalizeEventKey, tickEventKey };
|
|
98
|
-
//# sourceMappingURL=chunk-
|
|
99
|
-
//# sourceMappingURL=chunk-
|
|
98
|
+
//# sourceMappingURL=chunk-6H3UIZR2.js.map
|
|
99
|
+
//# sourceMappingURL=chunk-6H3UIZR2.js.map
|