@almadar/core 10.74.0 → 10.75.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.d.ts +3 -3
- package/dist/builders.js +10 -3
- package/dist/builders.js.map +1 -1
- package/dist/{effect-C0MRXCwF.d.ts → effect-CK1NMWES.d.ts} +4 -4
- package/dist/{entityAccess-CpfvoNOd.d.ts → entityAccess-B-de_0a8.d.ts} +14 -2
- package/dist/factory/index.d.ts +4 -4
- package/dist/factory/index.js +6 -2
- package/dist/factory/index.js.map +1 -1
- package/dist/factory-runtime/index.d.ts +3 -3
- package/dist/factory-runtime/index.js +10 -3
- package/dist/factory-runtime/index.js.map +1 -1
- package/dist/{index-D4jODKSD.d.ts → index-CBxIR1yy.d.ts} +4 -4
- package/dist/index.d.ts +10 -10
- package/dist/index.js +17 -6
- package/dist/index.js.map +1 -1
- package/dist/mock/index.d.ts +4 -4
- package/dist/mock/index.js +16 -2
- package/dist/mock/index.js.map +1 -1
- package/dist/patterns/index.d.ts +2 -2
- package/dist/{schema-DJY7OUOM.d.ts → schema-DlTrByoG.d.ts} +88 -88
- package/dist/{trait-D1zKrxnf.d.ts → trait-Cm9H3lHN.d.ts} +23 -22
- package/dist/types/index.d.ts +5 -5
- package/dist/types/index.js +11 -4
- package/dist/types/index.js.map +1 -1
- package/dist/{types-BdiOJCat.d.ts → types-cCAU_Z-5.d.ts} +17 -3
- package/package.json +1 -1
|
@@ -1010,16 +1010,16 @@ declare const IdentityLedgerSchema: z.ZodObject<{
|
|
|
1010
1010
|
* { name: 'status', type: 'enum', values: ['draft', 'published'] }
|
|
1011
1011
|
* { name: 'authorId', type: 'relation', relation: { entity: 'User', cardinality: 'one' } }
|
|
1012
1012
|
*/
|
|
1013
|
-
type FieldType = 'string' | 'number' | 'boolean' | 'date' | 'timestamp' | 'datetime' | 'email' | 'url' | 'phone' | 'uuid' | 'image' | 'money' | 'file' | 'array' | 'object' | 'enum' | 'relation' | 'trait' | 'slot' | 'pattern' | 'node';
|
|
1013
|
+
type FieldType = 'string' | 'number' | 'boolean' | 'date' | 'timestamp' | 'datetime' | 'email' | 'url' | 'phone' | 'uuid' | 'image' | 'money' | 'file' | 'array' | 'object' | 'enum' | 'relation' | 'trait' | 'slot' | 'pattern' | 'node' | 'event';
|
|
1014
1014
|
/** Every `FieldType`, as a runtime array. Downstream imports this instead of
|
|
1015
1015
|
* re-listing the union — five copies had already drifted apart. */
|
|
1016
|
-
declare const FIELD_TYPES: readonly ["string", "number", "boolean", "date", "timestamp", "datetime", "email", "url", "phone", "uuid", "image", "money", "file", "array", "object", "enum", "relation", "trait", "slot", "pattern", "node"];
|
|
1016
|
+
declare const FIELD_TYPES: readonly ["string", "number", "boolean", "date", "timestamp", "datetime", "email", "url", "phone", "uuid", "image", "money", "file", "array", "object", "enum", "relation", "trait", "slot", "pattern", "node", "event"];
|
|
1017
1017
|
/** The semantic string domains — constrained strings, validatable by value. */
|
|
1018
1018
|
declare const SEMANTIC_STRING_TYPES: readonly ["email", "url", "phone", "uuid", "image"];
|
|
1019
1019
|
type SemanticStringType = (typeof SEMANTIC_STRING_TYPES)[number];
|
|
1020
1020
|
/** Is this a semantic string domain (as opposed to a bare `string`)? */
|
|
1021
1021
|
declare function isSemanticStringType(type: FieldType): type is SemanticStringType;
|
|
1022
|
-
declare const FieldTypeSchema: z.ZodEnum<["string", "number", "boolean", "date", "timestamp", "datetime", "email", "url", "phone", "uuid", "image", "money", "file", "array", "object", "enum", "relation", "trait", "slot", "pattern", "node"]>;
|
|
1022
|
+
declare const FieldTypeSchema: z.ZodEnum<["string", "number", "boolean", "date", "timestamp", "datetime", "email", "url", "phone", "uuid", "image", "money", "file", "array", "object", "enum", "relation", "trait", "slot", "pattern", "node", "event"]>;
|
|
1023
1023
|
/**
|
|
1024
1024
|
* Cardinality for relation fields.
|
|
1025
1025
|
* Matches Rust compiler's Cardinality enum.
|
|
@@ -1135,7 +1135,7 @@ declare function isSemanticStringValue(type: SemanticStringType, value: string):
|
|
|
1135
1135
|
* Field-type tags that don't carry a type-dependent payload. The base
|
|
1136
1136
|
* `EntityField` shape applies as-is.
|
|
1137
1137
|
*/
|
|
1138
|
-
type ScalarFieldType = 'string' | 'number' | 'boolean' | 'date' | 'timestamp' | 'datetime' | 'email' | 'url' | 'phone' | 'uuid' | 'image' | 'money' | 'file' | 'trait' | 'slot' | 'pattern' | 'node';
|
|
1138
|
+
type ScalarFieldType = 'string' | 'number' | 'boolean' | 'date' | 'timestamp' | 'datetime' | 'email' | 'url' | 'phone' | 'uuid' | 'image' | 'money' | 'file' | 'trait' | 'slot' | 'pattern' | 'node' | 'event';
|
|
1139
1139
|
/** Fields shared across every variant. */
|
|
1140
1140
|
type EntityFieldBase = {
|
|
1141
1141
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { O as OrbitalSchema } from './schema-
|
|
1
|
+
import { O as OrbitalSchema } from './schema-DlTrByoG.js';
|
|
2
2
|
import { S as SExpr } from './expression-Fk8bQWef.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -50,5 +50,17 @@ interface EntityAccessPolicies {
|
|
|
50
50
|
declare function entityAccessTable(schema: OrbitalSchema): Map<string, EntityAccessPolicies>;
|
|
51
51
|
/** One entity's access policies, or `undefined` when it declares none. */
|
|
52
52
|
declare function entityAccessPolicies(schema: OrbitalSchema, entityName: string): EntityAccessPolicies | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* Access policies keyed the way the mock store keys its tables: the declared
|
|
55
|
+
* `persistent:` collection, else the lowercased entity name. The mock
|
|
56
|
+
* adapter's owner-restamp consults this map to decide whether a persona the
|
|
57
|
+
* dev host switches to could have CREATED a row before re-pointing its owner
|
|
58
|
+
* column — a reader persona must not inherit authorship of a draft just
|
|
59
|
+
* because the demo store follows the viewer (the `@create` directive is the
|
|
60
|
+
* single authority on who authors; no role heuristics here). First declared
|
|
61
|
+
* policy per collection wins, the same collection-inheritance rule as
|
|
62
|
+
* `entityAccessTable`.
|
|
63
|
+
*/
|
|
64
|
+
declare function entityAccessPoliciesByStoreKey(schema: OrbitalSchema): Map<string, EntityAccessPolicies>;
|
|
53
65
|
|
|
54
|
-
export { type EntityAccessPolicies as E,
|
|
66
|
+
export { type EntityAccessPolicies as E, entityAccessPoliciesByStoreKey as a, entityAccessTable as b, entityAccessPolicies as e };
|
package/dist/factory/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { h as FactoryParamValue, c as FactoryConfigTier, b as FactoryConfigParam, F as FactoryCallSite, j as FactorySignature, R as RuleOverlay, p as RuleOverlayEntry, o as PresentationOverlay, T as TraitOverlay } from '../types-
|
|
2
|
-
export { a as FactoryCallSiteParams, d as FactoryEntitySignature, e as FactoryEventSignature, f as FactoryExposure, g as FactoryPageSignature, i as FactoryProvenance, k as FactorySignatureCatalog, l as FactorySignatureEntityField, m as FactoryTraitSignature, J as JsonSchema, n as JsonSchemaType, O as OwnershipOverlayEntry, P as PresentationNavItem, S as SchemaFieldType, q as TraitOverlayEntry, r as TraitOverlayListener } from '../types-
|
|
3
|
-
import { a as EntityPersistence, E as EntityField } from '../effect-
|
|
4
|
-
import { a as TraitReference } from '../trait-
|
|
1
|
+
import { h as FactoryParamValue, c as FactoryConfigTier, b as FactoryConfigParam, F as FactoryCallSite, j as FactorySignature, R as RuleOverlay, p as RuleOverlayEntry, o as PresentationOverlay, T as TraitOverlay } from '../types-cCAU_Z-5.js';
|
|
2
|
+
export { a as FactoryCallSiteParams, d as FactoryEntitySignature, e as FactoryEventSignature, f as FactoryExposure, g as FactoryPageSignature, i as FactoryProvenance, k as FactorySignatureCatalog, l as FactorySignatureEntityField, m as FactoryTraitSignature, J as JsonSchema, n as JsonSchemaType, O as OwnershipOverlayEntry, P as PresentationNavItem, S as SchemaFieldType, q as TraitOverlayEntry, r as TraitOverlayListener } from '../types-cCAU_Z-5.js';
|
|
3
|
+
import { a as EntityPersistence, E as EntityField } from '../effect-CK1NMWES.js';
|
|
4
|
+
import { a as TraitReference } from '../trait-Cm9H3lHN.js';
|
|
5
5
|
export { J as JsonValue } from '../expression-Fk8bQWef.js';
|
|
6
6
|
import 'zod';
|
|
7
7
|
|
package/dist/factory/index.js
CHANGED
|
@@ -19,14 +19,13 @@ var TIER_D_NAMED_PRIMITIVES = /* @__PURE__ */ new Set([
|
|
|
19
19
|
"detailSlot",
|
|
20
20
|
"contentTrait"
|
|
21
21
|
]);
|
|
22
|
-
var TIER_D_TYPES = /* @__PURE__ */ new Set(["trait", "slot", "pattern"]);
|
|
22
|
+
var TIER_D_TYPES = /* @__PURE__ */ new Set(["trait", "slot", "pattern", "event"]);
|
|
23
23
|
function configKeyQuestions(call, signature) {
|
|
24
24
|
const out = [];
|
|
25
25
|
for (const trait of signature.traits) {
|
|
26
26
|
for (const param of trait.overridableConfigKeys) {
|
|
27
27
|
if (param.tier === "internal") continue;
|
|
28
28
|
if (TIER_D_TYPES.has(param.type)) continue;
|
|
29
|
-
if (param.key.endsWith("Event")) continue;
|
|
30
29
|
if (TIER_D_NAMED_PRIMITIVES.has(param.key)) continue;
|
|
31
30
|
out.push(buildConfigKeyQuestion(call, trait, param));
|
|
32
31
|
}
|
|
@@ -230,6 +229,11 @@ function signatureFieldToEntityField(f) {
|
|
|
230
229
|
return { ...base, type: "string" };
|
|
231
230
|
case "node":
|
|
232
231
|
return { ...base, type: "node" };
|
|
232
|
+
case "event":
|
|
233
|
+
return { ...base, type: "event" };
|
|
234
|
+
case "money":
|
|
235
|
+
case "file":
|
|
236
|
+
return { ...base, type: f.type };
|
|
233
237
|
default: {
|
|
234
238
|
f.type;
|
|
235
239
|
return { ...base, type: "string" };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/factory/questions/generate.ts","../../src/factory/questions/reducer.ts","../../src/factory/translate.ts","../../src/factory/diff.ts","../../src/factory/mutate.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\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']);\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 (param.key.endsWith('Event')) 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: `${call.orbital}.${trait.name}.${param.key}`,\n orbitalName: call.orbital,\n question,\n inputType: deriveInputType(param),\n mutationTemplate: {\n kind: 'set-trait-override-config',\n orbitalName: call.orbital,\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 */\nfunction 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: `${call.orbital}.__entityFields`,\n orbitalName: call.orbital,\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: call.orbital,\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 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 ?? call.orbital;\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: `${call.orbital}.capability.${cap}`,\n orbitalName: call.orbital,\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 * `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 { EntityPersistence } from '../types/entity.js';\nimport type { TraitReference } from '../types/trait.js';\nimport type {\n FactoryCallSite,\n FactoryCallSiteParams,\n FactoryParamValue,\n FactorySignature,\n FactoryTraitSignature,\n} from './types.js';\nimport type {\n OwnershipOverlayEntry,\n PresentationNavItem,\n PresentationOverlay,\n RuleOverlay,\n RuleOverlayEntry,\n TraitOverlay,\n TraitOverlayEntry,\n} from './overlays.js';\n\n/**\n * The per-orbital binding the agent assembles when it picks a\n * signature. Carries the user-authored overrides directly; no shared\n * domain ontology, no DomainDocument.\n */\nexport interface TranslationBinding {\n /** Entity name override. When equal to `signature.entities[0].name`,\n * no rename is emitted. */\n entityName: string;\n /** Extra fields beyond the signature's canonical entity surface. */\n entityFields?: ReadonlyArray<EntityField>;\n /** Persistence override. */\n persistence?: EntityPersistence;\n /** Collection name override. */\n collection?: string;\n /** Per-page path overrides keyed by `signature.pages[i].name`. */\n pagePaths?: Readonly<Record<string, string>>;\n}\n\nexport interface TranslationWarning {\n /** Dotted path of the binding field that couldn't be lowered. */\n field: string;\n /** Human-readable reason. */\n reason: string;\n}\n\nexport interface TranslationResult {\n callSite: FactoryCallSite;\n warnings: ReadonlyArray<TranslationWarning>;\n}\n\nexport function translateOverlaysToParams(\n binding: TranslationBinding,\n signature: FactorySignature,\n presentation?: PresentationOverlay,\n ruleOverlay?: RuleOverlay,\n traitOverlay?: TraitOverlay,\n catalog?: ReadonlyArray<FactorySignature>,\n): TranslationResult {\n const warnings: TranslationWarning[] = [];\n const params: FactoryCallSiteParams = {};\n\n applyEntityName(binding, signature, params);\n applyEntityFields(binding, signature, params);\n applyPersistence(binding, signature, params, warnings);\n applyCollection(binding, params);\n applyPagePaths(binding, signature, params, warnings);\n applyTheme(presentation, params);\n applyPresentation(presentation, signature, params, warnings);\n applyTraitOverlay(traitOverlay, signature, params, warnings);\n applyRuleOverlay(ruleOverlay, signature, binding, catalog, params, warnings);\n\n return {\n callSite: {\n organism: signature.organism,\n orbital: signature.orbital,\n factoryPath: signature.factoryPath,\n params,\n },\n warnings,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Per-field lowering\n// ---------------------------------------------------------------------------\n\nfunction applyEntityName(\n binding: TranslationBinding,\n signature: FactorySignature,\n params: FactoryCallSiteParams,\n): void {\n if (signature.entities.length === 0) return;\n if (binding.entityName === signature.entities[0].name) return;\n params.entityName = binding.entityName;\n}\n\nfunction applyEntityFields(\n binding: TranslationBinding,\n signature: FactorySignature,\n params: FactoryCallSiteParams,\n): void {\n if (!binding.entityFields || binding.entityFields.length === 0) return;\n if (signature.entities.length === 0) {\n params.entityFields = [...binding.entityFields];\n return;\n }\n const canonical = new Set(signature.entities[0].fields.map((f) => f.name));\n const extras: EntityField[] = [];\n for (const f of binding.entityFields) {\n if (f.name && canonical.has(f.name)) continue;\n extras.push(f);\n }\n if (extras.length > 0) params.entityFields = extras;\n}\n\nfunction applyPersistence(\n binding: TranslationBinding,\n signature: FactorySignature,\n params: FactoryCallSiteParams,\n warnings: TranslationWarning[],\n): void {\n if (!binding.persistence) return;\n if (signature.entities.length === 0) {\n warnings.push({\n field: `entity.${binding.entityName}.persistence`,\n reason: 'factory signature has no entity to apply persistence to',\n });\n return;\n }\n if (binding.persistence === signature.entities[0].persistence) return;\n params.persistence = binding.persistence;\n}\n\nfunction applyCollection(\n binding: TranslationBinding,\n params: FactoryCallSiteParams,\n): void {\n if (!binding.collection) return;\n params.collection = binding.collection;\n}\n\nfunction applyPagePaths(\n binding: TranslationBinding,\n signature: FactorySignature,\n params: FactoryCallSiteParams,\n warnings: TranslationWarning[],\n): void {\n if (!binding.pagePaths) return;\n const sigPages = new Map(signature.pages.map((p) => [p.name, p]));\n const overrides: Record<string, string> = {};\n for (const [pageName, url] of Object.entries(binding.pagePaths)) {\n const sig = sigPages.get(pageName);\n if (!sig) {\n warnings.push({\n field: `page.${pageName}.url`,\n reason: `factory signature has no page named \"${pageName}\"`,\n });\n continue;\n }\n if (sig.defaultPath !== url) overrides[pageName] = url;\n }\n if (Object.keys(overrides).length > 0) params.pagePaths = overrides;\n}\n\n/**\n * Lower the plan-level theme name (from `PresentationOverlay.themeRef`)\n * onto `params.theme`. Theme is uniform across orbitals — the coordinator\n * decides it once — so there is no signature validation here (unlike\n * `applyPagePaths`, which checks each page against the signature). The\n * valid-theme enum lives in the factory signature's `paramsSchema`,\n * generated by pattern-sync from the baked `themes-registry.json`.\n */\nfunction applyTheme(\n presentation: PresentationOverlay | undefined,\n params: FactoryCallSiteParams,\n): void {\n if (presentation?.themeRef) {\n params.theme = presentation.themeRef;\n }\n}\n\nfunction applyPresentation(\n overlay: PresentationOverlay | undefined,\n signature: FactorySignature,\n params: FactoryCallSiteParams,\n warnings: TranslationWarning[],\n): void {\n if (!overlay?.navAdditions || overlay.navAdditions.length === 0) return;\n const target = signature.traits.find((t) =>\n t.overridableConfigKeys.some((p) => p.key === 'navItems'),\n );\n if (!target) {\n warnings.push({\n field: 'presentation.navAdditions',\n reason:\n 'factory signature has no trait advertising a `navItems` config key',\n });\n return;\n }\n const existing = params.traitOverrides?.[target.name] ?? {};\n const existingConfig = existing.config ?? {};\n const items: ReadonlyArray<FactoryParamValue> = overlay.navAdditions.map(\n navItemToParamValue,\n );\n params.traitOverrides = {\n ...params.traitOverrides,\n [target.name]: {\n ...existing,\n config: { ...existingConfig, navItems: items },\n },\n };\n}\n\nfunction applyTraitOverlay(\n overlay: TraitOverlay | undefined,\n signature: FactorySignature,\n params: FactoryCallSiteParams,\n warnings: TranslationWarning[],\n): void {\n if (!overlay) return;\n const traitsByName = new Map(signature.traits.map((t) => [t.name, t]));\n for (const [traitName, entry] of Object.entries(overlay)) {\n const trait = traitsByName.get(traitName);\n if (!trait) {\n warnings.push({\n field: `traitOverlay.${traitName}`,\n reason: `factory signature has no trait named \"${traitName}\"`,\n });\n continue;\n }\n mergeTraitOverride(traitName, entry, trait, params, warnings);\n }\n}\n\nfunction mergeTraitOverride(\n traitName: string,\n entry: TraitOverlayEntry,\n trait: FactoryTraitSignature,\n params: FactoryCallSiteParams,\n warnings: TranslationWarning[],\n): void {\n const advertised = new Set(trait.overridableConfigKeys.map((p) => p.key));\n const existing = params.traitOverrides?.[traitName] ?? {};\n const existingConfig = existing.config ?? {};\n const mergedConfig: Record<string, FactoryParamValue> = { ...existingConfig };\n\n if (entry.config) {\n for (const [k, v] of Object.entries(entry.config)) {\n if (!advertised.has(k)) {\n const advertisedKeys = trait.overridableConfigKeys.map((p) => p.key).join(', ');\n warnings.push({\n field: `traitOverlay.${traitName}.config.${k}`,\n reason: `trait does not advertise config key \"${k}\" (overridableConfigKeys: [${advertisedKeys}])`,\n });\n continue;\n }\n mergedConfig[k] = v;\n }\n }\n\n // Thread every documented override field through verbatim — `config`\n // gets the merged + validated map; the rest pass through as the overlay\n // authored them. Pre-unification only `config` was preserved, so any\n // overlay-authored `linkedEntity` / `events` / `name` / `emitsScope` /\n // `listens` was silently dropped before reaching the factory.\n params.traitOverrides = {\n ...params.traitOverrides,\n [traitName]: {\n ...existing,\n ...(Object.keys(mergedConfig).length > 0 ? { config: mergedConfig } : {}),\n ...(entry.linkedEntity !== undefined ? { linkedEntity: entry.linkedEntity } : {}),\n ...(entry.events !== undefined ? { events: entry.events } : {}),\n ...(entry.name !== undefined ? { name: entry.name } : {}),\n ...(entry.emitsScope !== undefined ? { emitsScope: entry.emitsScope } : {}),\n ...(entry.listens !== undefined ? { listens: entry.listens } : {}),\n },\n };\n}\n\nfunction applyRuleOverlay(\n overlay: RuleOverlay | undefined,\n signature: FactorySignature,\n binding: TranslationBinding,\n catalog: ReadonlyArray<FactorySignature> | undefined,\n params: FactoryCallSiteParams,\n warnings: TranslationWarning[],\n): void {\n if (!overlay) return;\n\n // `rule.appliesTo` is frozen at the name in scope when the rule was\n // CAPTURED — typically the canonical entity name. If the caller later\n // rebinds via `params.entityName`, `binding.entityName` carries the\n // rebound name and a direct equality check fails. Match against BOTH\n // the rebound name (current binding) AND the canonical name (the\n // signature's authored entity) so cross-turn rule references survive\n // entity renames.\n const matchableNames = collectMatchableEntityNames(signature, binding);\n\n for (const rule of overlay.rules) {\n if (!ruleAppliesToAnyName(rule, matchableNames)) continue;\n if (!catalog) {\n warnings.push({\n field: `ruleOverlay.rules.${rule.id}`,\n reason: 'rule overlay supplied without a catalog — capability lookup requires one',\n });\n continue;\n }\n const match = findTraitByCapability(catalog, rule.capability);\n if (!match) {\n warnings.push({\n field: `ruleOverlay.rules.${rule.id}`,\n reason: `no trait in the catalog advertises capability \"${rule.capability}\"`,\n });\n continue;\n }\n appendRuleExtraTrait(rule, match, binding, params);\n if (rule.config) {\n threadRuleConfig(rule, match.trait, params, warnings);\n }\n }\n\n if (overlay.ownership) {\n for (const entry of overlay.ownership) {\n if (!matchableNames.includes(entry.entity)) continue;\n applyOwnership(entry, params, signature, catalog, warnings);\n }\n }\n}\n\n/**\n * Names the rule overlay may legitimately target for THIS binding.\n * Includes the rebound entity name (current `binding.entityName`) AND\n * every canonical name on `signature.entities[*]`. Deduped, empty-safe.\n */\nfunction collectMatchableEntityNames(\n signature: FactorySignature,\n binding: TranslationBinding,\n): ReadonlyArray<string> {\n const out = new Set<string>();\n if (binding.entityName.length > 0) out.add(binding.entityName);\n for (const ent of signature.entities) {\n if (typeof ent.name === 'string' && ent.name.length > 0) out.add(ent.name);\n }\n return [...out];\n}\n\nfunction ruleAppliesToAnyName(\n rule: RuleOverlayEntry,\n matchableNames: ReadonlyArray<string>,\n): boolean {\n if (rule.appliesTo.length === 0) return true;\n for (const n of rule.appliesTo) {\n if (matchableNames.includes(n)) return true;\n }\n return false;\n}\n\ninterface CapabilityMatch {\n signature: FactorySignature;\n trait: FactoryTraitSignature;\n}\n\nfunction findTraitByCapability(\n catalog: ReadonlyArray<FactorySignature>,\n capability: string,\n): CapabilityMatch | undefined {\n for (const sig of catalog) {\n for (const trait of sig.traits) {\n if (trait.capabilities.includes(capability)) {\n return { signature: sig, trait };\n }\n }\n }\n return undefined;\n}\n\nfunction appendRuleExtraTrait(\n _rule: RuleOverlayEntry,\n match: CapabilityMatch,\n binding: TranslationBinding,\n params: FactoryCallSiteParams,\n): void {\n const fromPath = `std/behaviors/${match.signature.organism}`;\n const alias = organismToAlias(match.signature.organism);\n const ref: TraitReference = {\n from: fromPath,\n ref: `${alias}.traits.${match.trait.name}`,\n linkedEntity: binding.entityName,\n };\n const existing = params.extraTraits ?? [];\n params.extraTraits = [...existing, ref];\n}\n\nfunction organismToAlias(organism: string): string {\n const trimmed = organism.startsWith('std-') ? organism.slice(4) : organism;\n return trimmed\n .split('-')\n .filter((s) => s.length > 0)\n .map((s) => s.charAt(0).toUpperCase() + s.slice(1))\n .join('');\n}\n\nfunction threadRuleConfig(\n rule: RuleOverlayEntry,\n trait: FactoryTraitSignature,\n params: FactoryCallSiteParams,\n warnings: TranslationWarning[],\n): void {\n if (!rule.config) return;\n const advertised = new Set(trait.overridableConfigKeys.map((p) => p.key));\n const existing = params.traitOverrides?.[trait.name] ?? {};\n const existingConfig = existing.config ?? {};\n const merged: Record<string, FactoryParamValue> = { ...existingConfig };\n for (const [k, v] of Object.entries(rule.config)) {\n if (!advertised.has(k)) {\n warnings.push({\n field: `ruleOverlay.rules.${rule.id}.config.${k}`,\n reason: `trait \"${trait.name}\" does not advertise config key \"${k}\"`,\n });\n continue;\n }\n merged[k] = v;\n }\n if (Object.keys(merged).length > 0) {\n params.traitOverrides = {\n ...params.traitOverrides,\n [trait.name]: { ...existing, config: merged },\n };\n }\n}\n\nfunction applyOwnership(\n entry: OwnershipOverlayEntry,\n params: FactoryCallSiteParams,\n signature: FactorySignature,\n catalog: ReadonlyArray<FactorySignature> | undefined,\n warnings: TranslationWarning[],\n): void {\n const local = signature.traits.find((t) =>\n t.overridableConfigKeys.some((p) => p.key === 'ownerField'),\n );\n if (local) {\n writeOwnerField(local.name, entry.ownerField, params);\n return;\n }\n if (catalog) {\n for (const sig of catalog) {\n const trait = sig.traits.find((t) =>\n t.overridableConfigKeys.some((p) => p.key === 'ownerField'),\n );\n if (trait) {\n writeOwnerField(trait.name, entry.ownerField, params);\n return;\n }\n }\n }\n warnings.push({\n field: `ruleOverlay.ownership.${entry.entity}`,\n reason: 'no trait in the bound signature or catalog advertises an `ownerField` config knob',\n });\n}\n\nfunction writeOwnerField(\n traitName: string,\n ownerField: string,\n params: FactoryCallSiteParams,\n): void {\n const existing = params.traitOverrides?.[traitName] ?? {};\n const existingConfig = existing.config ?? {};\n params.traitOverrides = {\n ...params.traitOverrides,\n [traitName]: {\n ...existing,\n config: { ...existingConfig, ownerField },\n },\n };\n}\n\nfunction navItemToParamValue(item: PresentationNavItem): FactoryParamValue {\n const out: Record<string, FactoryParamValue> = {\n label: item.label,\n path: item.path,\n };\n if (item.icon) out.icon = item.icon;\n return out;\n}\n","/**\n * Structural diff between two `FactoryCallSite[]` lists. Pure typed,\n * no side effects. Used by downstream consumers (agent planner, UI\n * cascade view) to turn a \"previous calls\" + \"next calls\" pair into a\n * minimal change set.\n *\n * Identity for diffing is `(organism, orbital)`. Renames are not\n * handled here — they show up as a delete + add. The agent layer is\n * expected to merge those back into a `'rename'` op if it can prove\n * the underlying domain entity was renamed.\n */\n\nimport type {\n FactoryCallSite,\n FactoryCallSiteParams,\n FactoryParamValue,\n} from './types.js';\n\nexport type CallSiteDiff =\n | { kind: 'add'; orbitalName: string; next: FactoryCallSite }\n | { kind: 'delete'; orbitalName: string; prior: FactoryCallSite }\n | {\n kind: 'edit';\n orbitalName: string;\n prior: FactoryCallSite;\n next: FactoryCallSite;\n }\n | { kind: 'keep'; orbitalName: string; call: FactoryCallSite };\n\nexport function diffFactoryCalls(\n prior: ReadonlyArray<FactoryCallSite>,\n next: ReadonlyArray<FactoryCallSite>,\n): ReadonlyArray<CallSiteDiff> {\n const out: CallSiteDiff[] = [];\n const priorByKey = new Map(prior.map((c) => [callKey(c), c]));\n const nextByKey = new Map(next.map((c) => [callKey(c), c]));\n\n for (const [key, p] of priorByKey) {\n const n = nextByKey.get(key);\n if (!n) {\n out.push({ kind: 'delete', orbitalName: p.orbital, prior: p });\n continue;\n }\n if (paramsEqual(p.params, n.params)) {\n out.push({ kind: 'keep', orbitalName: p.orbital, call: n });\n } else {\n out.push({ kind: 'edit', orbitalName: p.orbital, prior: p, next: n });\n }\n }\n for (const [key, n] of nextByKey) {\n if (!priorByKey.has(key)) {\n out.push({ kind: 'add', orbitalName: n.orbital, next: n });\n }\n }\n return out;\n}\n\nfunction callKey(c: FactoryCallSite): string {\n return `${c.organism}::${c.orbital}`;\n}\n\nfunction paramsEqual(a: FactoryCallSiteParams, b: FactoryCallSiteParams): boolean {\n return canonicalParams(a) === canonicalParams(b);\n}\n\nfunction canonicalParams(p: FactoryCallSiteParams): string {\n const keys: Array<keyof FactoryCallSiteParams> = [\n 'collection',\n 'entityFields',\n 'entityName',\n 'extraTraits',\n 'pagePaths',\n 'persistence',\n 'traitOverrides',\n ];\n const parts: string[] = [];\n for (const k of keys) {\n const v = p[k];\n if (v === undefined) continue;\n parts.push(`${k}:${canonicalNode(v)}`);\n }\n return `{${parts.join(',')}}`;\n}\n\nfunction canonicalNode(\n v:\n | string\n | FactoryCallSiteParams[keyof FactoryCallSiteParams],\n): string {\n if (v === undefined) return 'u';\n if (typeof v === 'string') return JSON.stringify(v);\n if (Array.isArray(v)) {\n return `[${v.map((x) => canonicalParamValue(x as FactoryParamValue)).join(',')}]`;\n }\n const keys = Object.keys(v).sort();\n const parts: string[] = [];\n for (const k of keys) {\n const child = (v as Readonly<Record<string, FactoryParamValue | { config?: Readonly<Record<string, FactoryParamValue>> }>>)[k];\n parts.push(`${JSON.stringify(k)}:${canonicalParamValue(child)}`);\n }\n return `{${parts.join(',')}}`;\n}\n\nfunction canonicalParamValue(\n v: FactoryParamValue | { config?: Readonly<Record<string, FactoryParamValue>> },\n): string {\n if (v === null || v === undefined) return 'u';\n if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') {\n return JSON.stringify(v);\n }\n if (Array.isArray(v)) {\n return `[${v.map(canonicalParamValue).join(',')}]`;\n }\n const keys = Object.keys(v).sort();\n const parts: string[] = [];\n for (const k of keys) {\n const child = (v as Readonly<Record<string, FactoryParamValue | undefined>>)[k];\n if (child === undefined) continue;\n parts.push(`${JSON.stringify(k)}:${canonicalParamValue(child)}`);\n }\n return `{${parts.join(',')}}`;\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"]}
|
|
1
|
+
{"version":3,"sources":["../../src/factory/questions/generate.ts","../../src/factory/questions/reducer.ts","../../src/factory/translate.ts","../../src/factory/diff.ts","../../src/factory/mutate.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\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: `${call.orbital}.${trait.name}.${param.key}`,\n orbitalName: call.orbital,\n question,\n inputType: deriveInputType(param),\n mutationTemplate: {\n kind: 'set-trait-override-config',\n orbitalName: call.orbital,\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 */\nfunction 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: `${call.orbital}.__entityFields`,\n orbitalName: call.orbital,\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: call.orbital,\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 'file':\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 ?? call.orbital;\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: `${call.orbital}.capability.${cap}`,\n orbitalName: call.orbital,\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 * `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 { EntityPersistence } from '../types/entity.js';\nimport type { TraitReference } from '../types/trait.js';\nimport type {\n FactoryCallSite,\n FactoryCallSiteParams,\n FactoryParamValue,\n FactorySignature,\n FactoryTraitSignature,\n} from './types.js';\nimport type {\n OwnershipOverlayEntry,\n PresentationNavItem,\n PresentationOverlay,\n RuleOverlay,\n RuleOverlayEntry,\n TraitOverlay,\n TraitOverlayEntry,\n} from './overlays.js';\n\n/**\n * The per-orbital binding the agent assembles when it picks a\n * signature. Carries the user-authored overrides directly; no shared\n * domain ontology, no DomainDocument.\n */\nexport interface TranslationBinding {\n /** Entity name override. When equal to `signature.entities[0].name`,\n * no rename is emitted. */\n entityName: string;\n /** Extra fields beyond the signature's canonical entity surface. */\n entityFields?: ReadonlyArray<EntityField>;\n /** Persistence override. */\n persistence?: EntityPersistence;\n /** Collection name override. */\n collection?: string;\n /** Per-page path overrides keyed by `signature.pages[i].name`. */\n pagePaths?: Readonly<Record<string, string>>;\n}\n\nexport interface TranslationWarning {\n /** Dotted path of the binding field that couldn't be lowered. */\n field: string;\n /** Human-readable reason. */\n reason: string;\n}\n\nexport interface TranslationResult {\n callSite: FactoryCallSite;\n warnings: ReadonlyArray<TranslationWarning>;\n}\n\nexport function translateOverlaysToParams(\n binding: TranslationBinding,\n signature: FactorySignature,\n presentation?: PresentationOverlay,\n ruleOverlay?: RuleOverlay,\n traitOverlay?: TraitOverlay,\n catalog?: ReadonlyArray<FactorySignature>,\n): TranslationResult {\n const warnings: TranslationWarning[] = [];\n const params: FactoryCallSiteParams = {};\n\n applyEntityName(binding, signature, params);\n applyEntityFields(binding, signature, params);\n applyPersistence(binding, signature, params, warnings);\n applyCollection(binding, params);\n applyPagePaths(binding, signature, params, warnings);\n applyTheme(presentation, params);\n applyPresentation(presentation, signature, params, warnings);\n applyTraitOverlay(traitOverlay, signature, params, warnings);\n applyRuleOverlay(ruleOverlay, signature, binding, catalog, params, warnings);\n\n return {\n callSite: {\n organism: signature.organism,\n orbital: signature.orbital,\n factoryPath: signature.factoryPath,\n params,\n },\n warnings,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Per-field lowering\n// ---------------------------------------------------------------------------\n\nfunction applyEntityName(\n binding: TranslationBinding,\n signature: FactorySignature,\n params: FactoryCallSiteParams,\n): void {\n if (signature.entities.length === 0) return;\n if (binding.entityName === signature.entities[0].name) return;\n params.entityName = binding.entityName;\n}\n\nfunction applyEntityFields(\n binding: TranslationBinding,\n signature: FactorySignature,\n params: FactoryCallSiteParams,\n): void {\n if (!binding.entityFields || binding.entityFields.length === 0) return;\n if (signature.entities.length === 0) {\n params.entityFields = [...binding.entityFields];\n return;\n }\n const canonical = new Set(signature.entities[0].fields.map((f) => f.name));\n const extras: EntityField[] = [];\n for (const f of binding.entityFields) {\n if (f.name && canonical.has(f.name)) continue;\n extras.push(f);\n }\n if (extras.length > 0) params.entityFields = extras;\n}\n\nfunction applyPersistence(\n binding: TranslationBinding,\n signature: FactorySignature,\n params: FactoryCallSiteParams,\n warnings: TranslationWarning[],\n): void {\n if (!binding.persistence) return;\n if (signature.entities.length === 0) {\n warnings.push({\n field: `entity.${binding.entityName}.persistence`,\n reason: 'factory signature has no entity to apply persistence to',\n });\n return;\n }\n if (binding.persistence === signature.entities[0].persistence) return;\n params.persistence = binding.persistence;\n}\n\nfunction applyCollection(\n binding: TranslationBinding,\n params: FactoryCallSiteParams,\n): void {\n if (!binding.collection) return;\n params.collection = binding.collection;\n}\n\nfunction applyPagePaths(\n binding: TranslationBinding,\n signature: FactorySignature,\n params: FactoryCallSiteParams,\n warnings: TranslationWarning[],\n): void {\n if (!binding.pagePaths) return;\n const sigPages = new Map(signature.pages.map((p) => [p.name, p]));\n const overrides: Record<string, string> = {};\n for (const [pageName, url] of Object.entries(binding.pagePaths)) {\n const sig = sigPages.get(pageName);\n if (!sig) {\n warnings.push({\n field: `page.${pageName}.url`,\n reason: `factory signature has no page named \"${pageName}\"`,\n });\n continue;\n }\n if (sig.defaultPath !== url) overrides[pageName] = url;\n }\n if (Object.keys(overrides).length > 0) params.pagePaths = overrides;\n}\n\n/**\n * Lower the plan-level theme name (from `PresentationOverlay.themeRef`)\n * onto `params.theme`. Theme is uniform across orbitals — the coordinator\n * decides it once — so there is no signature validation here (unlike\n * `applyPagePaths`, which checks each page against the signature). The\n * valid-theme enum lives in the factory signature's `paramsSchema`,\n * generated by pattern-sync from the baked `themes-registry.json`.\n */\nfunction applyTheme(\n presentation: PresentationOverlay | undefined,\n params: FactoryCallSiteParams,\n): void {\n if (presentation?.themeRef) {\n params.theme = presentation.themeRef;\n }\n}\n\nfunction applyPresentation(\n overlay: PresentationOverlay | undefined,\n signature: FactorySignature,\n params: FactoryCallSiteParams,\n warnings: TranslationWarning[],\n): void {\n if (!overlay?.navAdditions || overlay.navAdditions.length === 0) return;\n const target = signature.traits.find((t) =>\n t.overridableConfigKeys.some((p) => p.key === 'navItems'),\n );\n if (!target) {\n warnings.push({\n field: 'presentation.navAdditions',\n reason:\n 'factory signature has no trait advertising a `navItems` config key',\n });\n return;\n }\n const existing = params.traitOverrides?.[target.name] ?? {};\n const existingConfig = existing.config ?? {};\n const items: ReadonlyArray<FactoryParamValue> = overlay.navAdditions.map(\n navItemToParamValue,\n );\n params.traitOverrides = {\n ...params.traitOverrides,\n [target.name]: {\n ...existing,\n config: { ...existingConfig, navItems: items },\n },\n };\n}\n\nfunction applyTraitOverlay(\n overlay: TraitOverlay | undefined,\n signature: FactorySignature,\n params: FactoryCallSiteParams,\n warnings: TranslationWarning[],\n): void {\n if (!overlay) return;\n const traitsByName = new Map(signature.traits.map((t) => [t.name, t]));\n for (const [traitName, entry] of Object.entries(overlay)) {\n const trait = traitsByName.get(traitName);\n if (!trait) {\n warnings.push({\n field: `traitOverlay.${traitName}`,\n reason: `factory signature has no trait named \"${traitName}\"`,\n });\n continue;\n }\n mergeTraitOverride(traitName, entry, trait, params, warnings);\n }\n}\n\nfunction mergeTraitOverride(\n traitName: string,\n entry: TraitOverlayEntry,\n trait: FactoryTraitSignature,\n params: FactoryCallSiteParams,\n warnings: TranslationWarning[],\n): void {\n const advertised = new Set(trait.overridableConfigKeys.map((p) => p.key));\n const existing = params.traitOverrides?.[traitName] ?? {};\n const existingConfig = existing.config ?? {};\n const mergedConfig: Record<string, FactoryParamValue> = { ...existingConfig };\n\n if (entry.config) {\n for (const [k, v] of Object.entries(entry.config)) {\n if (!advertised.has(k)) {\n const advertisedKeys = trait.overridableConfigKeys.map((p) => p.key).join(', ');\n warnings.push({\n field: `traitOverlay.${traitName}.config.${k}`,\n reason: `trait does not advertise config key \"${k}\" (overridableConfigKeys: [${advertisedKeys}])`,\n });\n continue;\n }\n mergedConfig[k] = v;\n }\n }\n\n // Thread every documented override field through verbatim — `config`\n // gets the merged + validated map; the rest pass through as the overlay\n // authored them. Pre-unification only `config` was preserved, so any\n // overlay-authored `linkedEntity` / `events` / `name` / `emitsScope` /\n // `listens` was silently dropped before reaching the factory.\n params.traitOverrides = {\n ...params.traitOverrides,\n [traitName]: {\n ...existing,\n ...(Object.keys(mergedConfig).length > 0 ? { config: mergedConfig } : {}),\n ...(entry.linkedEntity !== undefined ? { linkedEntity: entry.linkedEntity } : {}),\n ...(entry.events !== undefined ? { events: entry.events } : {}),\n ...(entry.name !== undefined ? { name: entry.name } : {}),\n ...(entry.emitsScope !== undefined ? { emitsScope: entry.emitsScope } : {}),\n ...(entry.listens !== undefined ? { listens: entry.listens } : {}),\n },\n };\n}\n\nfunction applyRuleOverlay(\n overlay: RuleOverlay | undefined,\n signature: FactorySignature,\n binding: TranslationBinding,\n catalog: ReadonlyArray<FactorySignature> | undefined,\n params: FactoryCallSiteParams,\n warnings: TranslationWarning[],\n): void {\n if (!overlay) return;\n\n // `rule.appliesTo` is frozen at the name in scope when the rule was\n // CAPTURED — typically the canonical entity name. If the caller later\n // rebinds via `params.entityName`, `binding.entityName` carries the\n // rebound name and a direct equality check fails. Match against BOTH\n // the rebound name (current binding) AND the canonical name (the\n // signature's authored entity) so cross-turn rule references survive\n // entity renames.\n const matchableNames = collectMatchableEntityNames(signature, binding);\n\n for (const rule of overlay.rules) {\n if (!ruleAppliesToAnyName(rule, matchableNames)) continue;\n if (!catalog) {\n warnings.push({\n field: `ruleOverlay.rules.${rule.id}`,\n reason: 'rule overlay supplied without a catalog — capability lookup requires one',\n });\n continue;\n }\n const match = findTraitByCapability(catalog, rule.capability);\n if (!match) {\n warnings.push({\n field: `ruleOverlay.rules.${rule.id}`,\n reason: `no trait in the catalog advertises capability \"${rule.capability}\"`,\n });\n continue;\n }\n appendRuleExtraTrait(rule, match, binding, params);\n if (rule.config) {\n threadRuleConfig(rule, match.trait, params, warnings);\n }\n }\n\n if (overlay.ownership) {\n for (const entry of overlay.ownership) {\n if (!matchableNames.includes(entry.entity)) continue;\n applyOwnership(entry, params, signature, catalog, warnings);\n }\n }\n}\n\n/**\n * Names the rule overlay may legitimately target for THIS binding.\n * Includes the rebound entity name (current `binding.entityName`) AND\n * every canonical name on `signature.entities[*]`. Deduped, empty-safe.\n */\nfunction collectMatchableEntityNames(\n signature: FactorySignature,\n binding: TranslationBinding,\n): ReadonlyArray<string> {\n const out = new Set<string>();\n if (binding.entityName.length > 0) out.add(binding.entityName);\n for (const ent of signature.entities) {\n if (typeof ent.name === 'string' && ent.name.length > 0) out.add(ent.name);\n }\n return [...out];\n}\n\nfunction ruleAppliesToAnyName(\n rule: RuleOverlayEntry,\n matchableNames: ReadonlyArray<string>,\n): boolean {\n if (rule.appliesTo.length === 0) return true;\n for (const n of rule.appliesTo) {\n if (matchableNames.includes(n)) return true;\n }\n return false;\n}\n\ninterface CapabilityMatch {\n signature: FactorySignature;\n trait: FactoryTraitSignature;\n}\n\nfunction findTraitByCapability(\n catalog: ReadonlyArray<FactorySignature>,\n capability: string,\n): CapabilityMatch | undefined {\n for (const sig of catalog) {\n for (const trait of sig.traits) {\n if (trait.capabilities.includes(capability)) {\n return { signature: sig, trait };\n }\n }\n }\n return undefined;\n}\n\nfunction appendRuleExtraTrait(\n _rule: RuleOverlayEntry,\n match: CapabilityMatch,\n binding: TranslationBinding,\n params: FactoryCallSiteParams,\n): void {\n const fromPath = `std/behaviors/${match.signature.organism}`;\n const alias = organismToAlias(match.signature.organism);\n const ref: TraitReference = {\n from: fromPath,\n ref: `${alias}.traits.${match.trait.name}`,\n linkedEntity: binding.entityName,\n };\n const existing = params.extraTraits ?? [];\n params.extraTraits = [...existing, ref];\n}\n\nfunction organismToAlias(organism: string): string {\n const trimmed = organism.startsWith('std-') ? organism.slice(4) : organism;\n return trimmed\n .split('-')\n .filter((s) => s.length > 0)\n .map((s) => s.charAt(0).toUpperCase() + s.slice(1))\n .join('');\n}\n\nfunction threadRuleConfig(\n rule: RuleOverlayEntry,\n trait: FactoryTraitSignature,\n params: FactoryCallSiteParams,\n warnings: TranslationWarning[],\n): void {\n if (!rule.config) return;\n const advertised = new Set(trait.overridableConfigKeys.map((p) => p.key));\n const existing = params.traitOverrides?.[trait.name] ?? {};\n const existingConfig = existing.config ?? {};\n const merged: Record<string, FactoryParamValue> = { ...existingConfig };\n for (const [k, v] of Object.entries(rule.config)) {\n if (!advertised.has(k)) {\n warnings.push({\n field: `ruleOverlay.rules.${rule.id}.config.${k}`,\n reason: `trait \"${trait.name}\" does not advertise config key \"${k}\"`,\n });\n continue;\n }\n merged[k] = v;\n }\n if (Object.keys(merged).length > 0) {\n params.traitOverrides = {\n ...params.traitOverrides,\n [trait.name]: { ...existing, config: merged },\n };\n }\n}\n\nfunction applyOwnership(\n entry: OwnershipOverlayEntry,\n params: FactoryCallSiteParams,\n signature: FactorySignature,\n catalog: ReadonlyArray<FactorySignature> | undefined,\n warnings: TranslationWarning[],\n): void {\n const local = signature.traits.find((t) =>\n t.overridableConfigKeys.some((p) => p.key === 'ownerField'),\n );\n if (local) {\n writeOwnerField(local.name, entry.ownerField, params);\n return;\n }\n if (catalog) {\n for (const sig of catalog) {\n const trait = sig.traits.find((t) =>\n t.overridableConfigKeys.some((p) => p.key === 'ownerField'),\n );\n if (trait) {\n writeOwnerField(trait.name, entry.ownerField, params);\n return;\n }\n }\n }\n warnings.push({\n field: `ruleOverlay.ownership.${entry.entity}`,\n reason: 'no trait in the bound signature or catalog advertises an `ownerField` config knob',\n });\n}\n\nfunction writeOwnerField(\n traitName: string,\n ownerField: string,\n params: FactoryCallSiteParams,\n): void {\n const existing = params.traitOverrides?.[traitName] ?? {};\n const existingConfig = existing.config ?? {};\n params.traitOverrides = {\n ...params.traitOverrides,\n [traitName]: {\n ...existing,\n config: { ...existingConfig, ownerField },\n },\n };\n}\n\nfunction navItemToParamValue(item: PresentationNavItem): FactoryParamValue {\n const out: Record<string, FactoryParamValue> = {\n label: item.label,\n path: item.path,\n };\n if (item.icon) out.icon = item.icon;\n return out;\n}\n","/**\n * Structural diff between two `FactoryCallSite[]` lists. Pure typed,\n * no side effects. Used by downstream consumers (agent planner, UI\n * cascade view) to turn a \"previous calls\" + \"next calls\" pair into a\n * minimal change set.\n *\n * Identity for diffing is `(organism, orbital)`. Renames are not\n * handled here — they show up as a delete + add. The agent layer is\n * expected to merge those back into a `'rename'` op if it can prove\n * the underlying domain entity was renamed.\n */\n\nimport type {\n FactoryCallSite,\n FactoryCallSiteParams,\n FactoryParamValue,\n} from './types.js';\n\nexport type CallSiteDiff =\n | { kind: 'add'; orbitalName: string; next: FactoryCallSite }\n | { kind: 'delete'; orbitalName: string; prior: FactoryCallSite }\n | {\n kind: 'edit';\n orbitalName: string;\n prior: FactoryCallSite;\n next: FactoryCallSite;\n }\n | { kind: 'keep'; orbitalName: string; call: FactoryCallSite };\n\nexport function diffFactoryCalls(\n prior: ReadonlyArray<FactoryCallSite>,\n next: ReadonlyArray<FactoryCallSite>,\n): ReadonlyArray<CallSiteDiff> {\n const out: CallSiteDiff[] = [];\n const priorByKey = new Map(prior.map((c) => [callKey(c), c]));\n const nextByKey = new Map(next.map((c) => [callKey(c), c]));\n\n for (const [key, p] of priorByKey) {\n const n = nextByKey.get(key);\n if (!n) {\n out.push({ kind: 'delete', orbitalName: p.orbital, prior: p });\n continue;\n }\n if (paramsEqual(p.params, n.params)) {\n out.push({ kind: 'keep', orbitalName: p.orbital, call: n });\n } else {\n out.push({ kind: 'edit', orbitalName: p.orbital, prior: p, next: n });\n }\n }\n for (const [key, n] of nextByKey) {\n if (!priorByKey.has(key)) {\n out.push({ kind: 'add', orbitalName: n.orbital, next: n });\n }\n }\n return out;\n}\n\nfunction callKey(c: FactoryCallSite): string {\n return `${c.organism}::${c.orbital}`;\n}\n\nfunction paramsEqual(a: FactoryCallSiteParams, b: FactoryCallSiteParams): boolean {\n return canonicalParams(a) === canonicalParams(b);\n}\n\nfunction canonicalParams(p: FactoryCallSiteParams): string {\n const keys: Array<keyof FactoryCallSiteParams> = [\n 'collection',\n 'entityFields',\n 'entityName',\n 'extraTraits',\n 'pagePaths',\n 'persistence',\n 'traitOverrides',\n ];\n const parts: string[] = [];\n for (const k of keys) {\n const v = p[k];\n if (v === undefined) continue;\n parts.push(`${k}:${canonicalNode(v)}`);\n }\n return `{${parts.join(',')}}`;\n}\n\nfunction canonicalNode(\n v:\n | string\n | FactoryCallSiteParams[keyof FactoryCallSiteParams],\n): string {\n if (v === undefined) return 'u';\n if (typeof v === 'string') return JSON.stringify(v);\n if (Array.isArray(v)) {\n return `[${v.map((x) => canonicalParamValue(x as FactoryParamValue)).join(',')}]`;\n }\n const keys = Object.keys(v).sort();\n const parts: string[] = [];\n for (const k of keys) {\n const child = (v as Readonly<Record<string, FactoryParamValue | { config?: Readonly<Record<string, FactoryParamValue>> }>>)[k];\n parts.push(`${JSON.stringify(k)}:${canonicalParamValue(child)}`);\n }\n return `{${parts.join(',')}}`;\n}\n\nfunction canonicalParamValue(\n v: FactoryParamValue | { config?: Readonly<Record<string, FactoryParamValue>> },\n): string {\n if (v === null || v === undefined) return 'u';\n if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') {\n return JSON.stringify(v);\n }\n if (Array.isArray(v)) {\n return `[${v.map(canonicalParamValue).join(',')}]`;\n }\n const keys = Object.keys(v).sort();\n const parts: string[] = [];\n for (const k of keys) {\n const child = (v as Readonly<Record<string, FactoryParamValue | undefined>>)[k];\n if (child === undefined) continue;\n parts.push(`${JSON.stringify(k)}:${canonicalParamValue(child)}`);\n }\n return `{${parts.join(',')}}`;\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"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { O as OrbitalSchema, a as OrbitalDefinition } from '../schema-
|
|
2
|
-
import { h as CallSiteConfig, i as CallSiteConfigEntry, g as Trait } from '../trait-
|
|
3
|
-
import { E as EntityField, a as EntityPersistence } from '../effect-
|
|
1
|
+
import { O as OrbitalSchema, a as OrbitalDefinition } from '../schema-DlTrByoG.js';
|
|
2
|
+
import { h as CallSiteConfig, i as CallSiteConfigEntry, g as Trait } from '../trait-Cm9H3lHN.js';
|
|
3
|
+
import { E as EntityField, a as EntityPersistence } from '../effect-CK1NMWES.js';
|
|
4
4
|
import { MakeTraitRefOpts } from '../builders.js';
|
|
5
5
|
import '../expression-Fk8bQWef.js';
|
|
6
6
|
import 'zod';
|
|
@@ -111,7 +111,8 @@ var FIELD_TYPES = [
|
|
|
111
111
|
"trait",
|
|
112
112
|
"slot",
|
|
113
113
|
"pattern",
|
|
114
|
-
"node"
|
|
114
|
+
"node",
|
|
115
|
+
"event"
|
|
115
116
|
];
|
|
116
117
|
z.enum(FIELD_TYPES);
|
|
117
118
|
var RelationCardinalitySchema = z.enum([
|
|
@@ -204,6 +205,7 @@ var EntityFieldSchema = z.lazy(() => {
|
|
|
204
205
|
scalarVariant("slot"),
|
|
205
206
|
scalarVariant("pattern"),
|
|
206
207
|
scalarVariant("node"),
|
|
208
|
+
scalarVariant("event"),
|
|
207
209
|
scalarVariant("money"),
|
|
208
210
|
scalarVariant("file"),
|
|
209
211
|
// Enum variant — REQUIRES non-empty values.
|
|
@@ -572,7 +574,11 @@ var TraitEntityFieldSchema = z.object({
|
|
|
572
574
|
"image",
|
|
573
575
|
"trait",
|
|
574
576
|
"slot",
|
|
575
|
-
"pattern"
|
|
577
|
+
"pattern",
|
|
578
|
+
// `node` was missing here while being a real `TraitFieldType` member
|
|
579
|
+
// — the same latent-drift trap `event` would otherwise repeat.
|
|
580
|
+
"node",
|
|
581
|
+
"event"
|
|
576
582
|
]),
|
|
577
583
|
required: z.boolean().optional(),
|
|
578
584
|
default: TraitConfigValueSchema.optional(),
|
|
@@ -682,7 +688,8 @@ var TraitEventListenerSchema = z.object({
|
|
|
682
688
|
});
|
|
683
689
|
var RequiredFieldSchema = z.object({
|
|
684
690
|
name: z.string().min(1),
|
|
685
|
-
|
|
691
|
+
// `node` was missing here too (same drift as TraitEntityFieldSchema above).
|
|
692
|
+
type: z.enum(["string", "number", "boolean", "date", "array", "object", "timestamp", "datetime", "enum", "email", "url", "phone", "uuid", "image", "trait", "slot", "pattern", "node", "event"]),
|
|
686
693
|
description: z.string().optional()
|
|
687
694
|
});
|
|
688
695
|
var TraitReferenceSchema = z.object({
|