@almadar/core 8.1.0 → 8.3.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/factory/index.d.ts +48 -3
- package/dist/factory/index.js +7 -6
- package/dist/factory/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +7 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/factory/index.d.ts
CHANGED
|
@@ -27,6 +27,49 @@ interface FactoryEntitySignature {
|
|
|
27
27
|
/** Persistence mode declared on the canonical entity in the `.orb`. */
|
|
28
28
|
persistence: EntityPersistence;
|
|
29
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* One overridable config knob a trait advertises. Lifted directly from
|
|
32
|
+
* the source `.lolo` `config { }` block (which carries typed
|
|
33
|
+
* declarations + defaults). Consumers (the questionnaire generator,
|
|
34
|
+
* the studio) pick a widget from `type` and pre-fill from `default`.
|
|
35
|
+
*
|
|
36
|
+
* `label` is reserved for a future `.lolo` grammar extension that
|
|
37
|
+
* lets atom authors author a human-friendly question prompt; today
|
|
38
|
+
* it's always undefined and the questionnaire derives a fallback
|
|
39
|
+
* from the key name.
|
|
40
|
+
*/
|
|
41
|
+
interface FactoryConfigParam {
|
|
42
|
+
/** Key name as advertised by the trait. Matches the override path
|
|
43
|
+
* `traitOverrides.<traitName>.config.<key>`. */
|
|
44
|
+
key: string;
|
|
45
|
+
/** Type tag lifted from the `.lolo` config declaration. Drives the
|
|
46
|
+
* question widget selection. Free-form to admit array/object
|
|
47
|
+
* brackets (`[object]`, `[string]`) and atom-defined custom tags. */
|
|
48
|
+
type: string;
|
|
49
|
+
/** Canonical default value the factory uses when no override is
|
|
50
|
+
* supplied. Pre-fills the form widget so users see what they're
|
|
51
|
+
* about to change. */
|
|
52
|
+
default?: FactoryParamValue;
|
|
53
|
+
/** Optional human-friendly question prompt. Lifted from the source
|
|
54
|
+
* `.lolo` `@label "..."` annotation. */
|
|
55
|
+
label?: string;
|
|
56
|
+
/** Optional help-text. Lifted from `.lolo` `@description "..."`. */
|
|
57
|
+
description?: string;
|
|
58
|
+
/** Optional closed-enum value set. Lifted from `.lolo` enum syntax. */
|
|
59
|
+
enumValues?: ReadonlyArray<string>;
|
|
60
|
+
/** Comma-separated user-vocabulary synonyms. Authored in `.lolo` as
|
|
61
|
+
* `@synonyms "..."` next to the knob declaration. Used by the agent's
|
|
62
|
+
* catalog-summary prompt (so the LLM connects user phrases to knob
|
|
63
|
+
* names) and by the publish-time knob-embeddings bake (so cosine
|
|
64
|
+
* narrowing recalls knobs voiced via synonym).
|
|
65
|
+
*
|
|
66
|
+
* Example for the `height` knob on `std-graphs`:
|
|
67
|
+
* `@synonyms "taller, shorter, vertical size, pixel height"`
|
|
68
|
+
*
|
|
69
|
+
* Stays a single free-form string; consumers decide their own
|
|
70
|
+
* splitting/formatting policy. */
|
|
71
|
+
synonyms?: string;
|
|
72
|
+
}
|
|
30
73
|
/**
|
|
31
74
|
* One trait the factory composes into the orbital. The projector reads
|
|
32
75
|
* these to determine which factory's trait stack covers a given
|
|
@@ -39,8 +82,10 @@ interface FactoryTraitSignature {
|
|
|
39
82
|
emittedEvents: ReadonlyArray<string>;
|
|
40
83
|
/** Event keys this trait listens for. */
|
|
41
84
|
listenedEvents: ReadonlyArray<string>;
|
|
42
|
-
/** Config
|
|
43
|
-
|
|
85
|
+
/** Config knobs overridable via `traitOverrides.<name>.config.<key>`.
|
|
86
|
+
* Each entry carries the key name plus the typed declaration lifted
|
|
87
|
+
* from the source `.lolo` `config { }` block. */
|
|
88
|
+
overridableConfigKeys: ReadonlyArray<FactoryConfigParam>;
|
|
44
89
|
/** Capability tags lifted directly from the source `.lolo` trait's
|
|
45
90
|
* header annotations. Free-form strings — the translator overlay
|
|
46
91
|
* matches rules to traits by exact set membership. */
|
|
@@ -336,4 +381,4 @@ interface FactoryCallPlanState {
|
|
|
336
381
|
*/
|
|
337
382
|
declare function applyFactoryCallPlanMutation(state: FactoryCallPlanState, m: FactoryCallPlanMutation): FactoryCallPlanState;
|
|
338
383
|
|
|
339
|
-
export { type CallSiteDiff, type FactoryCallPlanMutation, type FactoryCallPlanState, type FactoryCallSite, type FactoryCallSiteParams, type FactoryEntitySignature, type FactoryPageSignature, type FactoryParamValue, type FactorySignature, type FactorySignatureCatalog, type FactorySignatureEntityField, type FactoryTraitSignature, type OrbitalCallInput, type OwnershipOverlayEntry, type PresentationNavItem, type PresentationOverlay, type RuleOverlay, type RuleOverlayEntry, type SchemaFieldType, type TraitOverlay, type TraitOverlayEntry, type TraitOverlayListener, type TranslationBinding, type TranslationResult, type TranslationWarning, applyFactoryCallPlanMutation, diffFactoryCalls, translateOverlaysToParams };
|
|
384
|
+
export { type CallSiteDiff, type FactoryCallPlanMutation, type FactoryCallPlanState, type FactoryCallSite, type FactoryCallSiteParams, type FactoryConfigParam, type FactoryEntitySignature, type FactoryPageSignature, type FactoryParamValue, type FactorySignature, type FactorySignatureCatalog, type FactorySignatureEntityField, type FactoryTraitSignature, type OrbitalCallInput, type OwnershipOverlayEntry, type PresentationNavItem, type PresentationOverlay, type RuleOverlay, type RuleOverlayEntry, type SchemaFieldType, type TraitOverlay, type TraitOverlayEntry, type TraitOverlayListener, type TranslationBinding, type TranslationResult, type TranslationWarning, applyFactoryCallPlanMutation, diffFactoryCalls, translateOverlaysToParams };
|
package/dist/factory/index.js
CHANGED
|
@@ -75,7 +75,7 @@ function applyPagePaths(binding, signature, params, warnings) {
|
|
|
75
75
|
function applyPresentation(overlay, signature, params, warnings) {
|
|
76
76
|
if (!overlay?.navAdditions || overlay.navAdditions.length === 0) return;
|
|
77
77
|
const target = signature.traits.find(
|
|
78
|
-
(t) => t.overridableConfigKeys.
|
|
78
|
+
(t) => t.overridableConfigKeys.some((p) => p.key === "navItems")
|
|
79
79
|
);
|
|
80
80
|
if (!target) {
|
|
81
81
|
warnings.push({
|
|
@@ -113,16 +113,17 @@ function applyTraitOverlay(overlay, signature, params, warnings) {
|
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
115
|
function mergeTraitOverride(traitName, entry, trait, params, warnings) {
|
|
116
|
-
const advertised = new Set(trait.overridableConfigKeys);
|
|
116
|
+
const advertised = new Set(trait.overridableConfigKeys.map((p) => p.key));
|
|
117
117
|
const existing = params.traitOverrides?.[traitName] ?? {};
|
|
118
118
|
const existingConfig = existing.config ?? {};
|
|
119
119
|
const mergedConfig = { ...existingConfig };
|
|
120
120
|
if (entry.config) {
|
|
121
121
|
for (const [k, v] of Object.entries(entry.config)) {
|
|
122
122
|
if (!advertised.has(k)) {
|
|
123
|
+
const advertisedKeys = trait.overridableConfigKeys.map((p) => p.key).join(", ");
|
|
123
124
|
warnings.push({
|
|
124
125
|
field: `traitOverlay.${traitName}.config.${k}`,
|
|
125
|
-
reason: `trait does not advertise config key "${k}" (overridableConfigKeys: [${
|
|
126
|
+
reason: `trait does not advertise config key "${k}" (overridableConfigKeys: [${advertisedKeys}])`
|
|
126
127
|
});
|
|
127
128
|
continue;
|
|
128
129
|
}
|
|
@@ -199,7 +200,7 @@ function organismToAlias(organism) {
|
|
|
199
200
|
}
|
|
200
201
|
function threadRuleConfig(rule, trait, params, warnings) {
|
|
201
202
|
if (!rule.config) return;
|
|
202
|
-
const advertised = new Set(trait.overridableConfigKeys);
|
|
203
|
+
const advertised = new Set(trait.overridableConfigKeys.map((p) => p.key));
|
|
203
204
|
const existing = params.traitOverrides?.[trait.name] ?? {};
|
|
204
205
|
const existingConfig = existing.config ?? {};
|
|
205
206
|
const merged = { ...existingConfig };
|
|
@@ -222,7 +223,7 @@ function threadRuleConfig(rule, trait, params, warnings) {
|
|
|
222
223
|
}
|
|
223
224
|
function applyOwnership(entry, params, signature, catalog, warnings) {
|
|
224
225
|
const local = signature.traits.find(
|
|
225
|
-
(t) => t.overridableConfigKeys.
|
|
226
|
+
(t) => t.overridableConfigKeys.some((p) => p.key === "ownerField")
|
|
226
227
|
);
|
|
227
228
|
if (local) {
|
|
228
229
|
writeOwnerField(local.name, entry.ownerField, params);
|
|
@@ -231,7 +232,7 @@ function applyOwnership(entry, params, signature, catalog, warnings) {
|
|
|
231
232
|
if (catalog) {
|
|
232
233
|
for (const sig of catalog) {
|
|
233
234
|
const trait = sig.traits.find(
|
|
234
|
-
(t) => t.overridableConfigKeys.
|
|
235
|
+
(t) => t.overridableConfigKeys.some((p) => p.key === "ownerField")
|
|
235
236
|
);
|
|
236
237
|
if (trait) {
|
|
237
238
|
writeOwnerField(trait.name, entry.ownerField, params);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/factory/translate.ts","../../src/factory/diff.ts","../../src/factory/mutate.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["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 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\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.includes('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);\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 warnings.push({\n field: `traitOverlay.${traitName}.config.${k}`,\n reason: `trait does not advertise config key \"${k}\" (overridableConfigKeys: [${trait.overridableConfigKeys.join(', ')}])`,\n });\n continue;\n }\n mergedConfig[k] = v;\n }\n }\n\n params.traitOverrides = {\n ...params.traitOverrides,\n [traitName]: {\n ...existing,\n ...(Object.keys(mergedConfig).length > 0 ? { config: mergedConfig } : {}),\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 for (const rule of overlay.rules) {\n if (!ruleAppliesToBinding(rule, binding)) 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 (entry.entity !== binding.entityName) continue;\n applyOwnership(entry, params, signature, catalog, warnings);\n }\n }\n}\n\nfunction ruleAppliesToBinding(\n rule: RuleOverlayEntry,\n binding: TranslationBinding,\n): boolean {\n if (rule.appliesTo.length === 0) return true;\n return rule.appliesTo.includes(binding.entityName);\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);\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.includes('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.includes('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/translate.ts","../../src/factory/diff.ts","../../src/factory/mutate.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["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 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\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 params.traitOverrides = {\n ...params.traitOverrides,\n [traitName]: {\n ...existing,\n ...(Object.keys(mergedConfig).length > 0 ? { config: mergedConfig } : {}),\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 for (const rule of overlay.rules) {\n if (!ruleAppliesToBinding(rule, binding)) 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 (entry.entity !== binding.entityName) continue;\n applyOwnership(entry, params, signature, catalog, warnings);\n }\n }\n}\n\nfunction ruleAppliesToBinding(\n rule: RuleOverlayEntry,\n binding: TranslationBinding,\n): boolean {\n if (rule.appliesTo.length === 0) return true;\n return rule.appliesTo.includes(binding.entityName);\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"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export { A as AgentEffect, a as AnimationDef, b as AnimationDefInput, c as Anima
|
|
|
5
5
|
export { C as CORE_BINDINGS, a as CoreBinding, E as EvalContext, b as EventPayload, c as EventPayloadValue, d as Expression, e as ExpressionInput, f as ExpressionSchema, L as LogMeta, P as ParsedBinding, S as SExpr, g as SExprAtom, h as SExprAtomSchema, i as SExprInput, j as SExprSchema, k as collectBindings, l as getArgs, m as getOperator, n as isBinding, o as isSExpr, p as isSExprAtom, q as isSExprCall, r as isValidBinding, s as parseBinding, t as sexpr, w as walkSExpr } from './expression-BVRFm0sV.js';
|
|
6
6
|
import { ResolvedIR, ResolvedEntity, ResolvedPage, ResolvedTrait, ChangesetValue, SchemaChange, CategorizedRemovals, PageContentReduction, SemanticSchemaChange } from './types/index.js';
|
|
7
7
|
export { AgentCodeSearchResult, AgentCompactResult, AgentCompactStrategy, AgentContext, AgentGenerateOptions, AgentMemoryCategory, AgentMemoryRecord, AppSummary, AssetLoadStatus, BINDING_CONTEXT_RULES, BINDING_DOCS, BINDING_ROOTS, BindingContext, BindingRoot, BindingSchema, BridgeHealth, BusEvent, BusEventListener, BusEventSource, ChangeAuthor, ChangeSetDocument, ChangeSummary, CheckStatus, ContextExtensions, CreateFlow, DEFAULT_INTERACTION_MODELS, DeleteFlow, EditFlow, EffectTrace, EventEmit, EventKey, EventListen, EventLogEntry, GitHubLink, HistoryMeta, InteractionModel, InteractionModelInput, InteractionModelSchema, LazyService, ListInteraction, OrbitalVerificationAPI, PatternTypeSchema, PersistActionName, ResolvedEntityBinding, ResolvedField, ResolvedNavigation, ResolvedPattern, ResolvedSection, ResolvedSectionEvent, ResolvedTraitBinding, ResolvedTraitDataEntity, ResolvedTraitEvent, ResolvedTraitGuard, ResolvedTraitListener, ResolvedTraitState, ResolvedTraitTick, ResolvedTraitTransition, ResolvedTraitUIBinding, SaveOptions, SaveResult, SemanticChangeKind, ServerResponseTrace, ServiceAction, ServiceActionName, ServiceContract, ServiceEvents, SnapshotDocument, StatsView, StoreContract, StoreFilter, StoreFilterOp, TraitFieldRef, TraitFieldRefSchema, TraitStateSnapshot, TransitionFrom, TransitionTrace, Unsubscribe, ValidationDocument, ValidationIssue, ValidationMeta, ValidationResults, VerificationCheck, VerificationSnapshot, VerificationSummary, ViewFlow, createEmptyResolvedPage, createEmptyResolvedTrait, createLazyService, createResolvedField, createTypedEventBus, getAllPatternTypes, getBindingExamples, getInteractionModelForDomain, inferTsType, isResolvedIR, isTraitFieldRef, toBindingRoot, validateBindingInContext } from './types/index.js';
|
|
8
|
-
export { CallSiteDiff, FactoryCallPlanMutation, FactoryCallPlanState, FactoryCallSite, FactoryCallSiteParams, FactoryEntitySignature, FactoryPageSignature, FactoryParamValue, FactorySignature, FactorySignatureCatalog, FactorySignatureEntityField, FactoryTraitSignature, OrbitalCallInput, OwnershipOverlayEntry, PresentationNavItem, PresentationOverlay, RuleOverlay, RuleOverlayEntry, SchemaFieldType, TraitOverlay, TraitOverlayEntry, TraitOverlayListener, TranslationBinding, TranslationResult, TranslationWarning, applyFactoryCallPlanMutation, diffFactoryCalls, translateOverlaysToParams } from './factory/index.js';
|
|
8
|
+
export { CallSiteDiff, FactoryCallPlanMutation, FactoryCallPlanState, FactoryCallSite, FactoryCallSiteParams, FactoryConfigParam, FactoryEntitySignature, FactoryPageSignature, FactoryParamValue, FactorySignature, FactorySignatureCatalog, FactorySignatureEntityField, FactoryTraitSignature, OrbitalCallInput, OwnershipOverlayEntry, PresentationNavItem, PresentationOverlay, RuleOverlay, RuleOverlayEntry, SchemaFieldType, TraitOverlay, TraitOverlayEntry, TraitOverlayListener, TranslationBinding, TranslationResult, TranslationWarning, applyFactoryCallPlanMutation, diffFactoryCalls, translateOverlaysToParams } from './factory/index.js';
|
|
9
9
|
export { C as ComposeBehaviorsInput, a as ComposeBehaviorsResult, E as EventWiringEntry, L as LayoutStrategy, b as applyEventWiring, c as composeBehaviors, d as detectLayoutStrategy } from './compose-behaviors-DsgVjsAB.js';
|
|
10
10
|
export { PATTERN_TYPES, PatternConfig, PatternType, isValidPatternType } from '@almadar/patterns';
|
|
11
11
|
export { BFSNode, BFSPathNode, EdgeWalkTransition, GraphTransition, GuardPayload, ReplayStep, ReplayTransition, StateEdge, WalkStep, buildEdgeCoveringWalk, buildGuardPayloads, buildReplayPaths, buildStateGraph, collectReachableStates, extractPayloadFieldRef, walkStatePairs } from './state-machine/index.js';
|
package/dist/index.js
CHANGED
|
@@ -2329,7 +2329,7 @@ function applyPagePaths(binding, signature, params, warnings) {
|
|
|
2329
2329
|
function applyPresentation(overlay, signature, params, warnings) {
|
|
2330
2330
|
if (!overlay?.navAdditions || overlay.navAdditions.length === 0) return;
|
|
2331
2331
|
const target = signature.traits.find(
|
|
2332
|
-
(t) => t.overridableConfigKeys.
|
|
2332
|
+
(t) => t.overridableConfigKeys.some((p) => p.key === "navItems")
|
|
2333
2333
|
);
|
|
2334
2334
|
if (!target) {
|
|
2335
2335
|
warnings.push({
|
|
@@ -2367,16 +2367,17 @@ function applyTraitOverlay(overlay, signature, params, warnings) {
|
|
|
2367
2367
|
}
|
|
2368
2368
|
}
|
|
2369
2369
|
function mergeTraitOverride(traitName, entry, trait, params, warnings) {
|
|
2370
|
-
const advertised = new Set(trait.overridableConfigKeys);
|
|
2370
|
+
const advertised = new Set(trait.overridableConfigKeys.map((p) => p.key));
|
|
2371
2371
|
const existing = params.traitOverrides?.[traitName] ?? {};
|
|
2372
2372
|
const existingConfig = existing.config ?? {};
|
|
2373
2373
|
const mergedConfig = { ...existingConfig };
|
|
2374
2374
|
if (entry.config) {
|
|
2375
2375
|
for (const [k, v] of Object.entries(entry.config)) {
|
|
2376
2376
|
if (!advertised.has(k)) {
|
|
2377
|
+
const advertisedKeys = trait.overridableConfigKeys.map((p) => p.key).join(", ");
|
|
2377
2378
|
warnings.push({
|
|
2378
2379
|
field: `traitOverlay.${traitName}.config.${k}`,
|
|
2379
|
-
reason: `trait does not advertise config key "${k}" (overridableConfigKeys: [${
|
|
2380
|
+
reason: `trait does not advertise config key "${k}" (overridableConfigKeys: [${advertisedKeys}])`
|
|
2380
2381
|
});
|
|
2381
2382
|
continue;
|
|
2382
2383
|
}
|
|
@@ -2453,7 +2454,7 @@ function organismToAlias(organism) {
|
|
|
2453
2454
|
}
|
|
2454
2455
|
function threadRuleConfig(rule, trait, params, warnings) {
|
|
2455
2456
|
if (!rule.config) return;
|
|
2456
|
-
const advertised = new Set(trait.overridableConfigKeys);
|
|
2457
|
+
const advertised = new Set(trait.overridableConfigKeys.map((p) => p.key));
|
|
2457
2458
|
const existing = params.traitOverrides?.[trait.name] ?? {};
|
|
2458
2459
|
const existingConfig = existing.config ?? {};
|
|
2459
2460
|
const merged = { ...existingConfig };
|
|
@@ -2476,7 +2477,7 @@ function threadRuleConfig(rule, trait, params, warnings) {
|
|
|
2476
2477
|
}
|
|
2477
2478
|
function applyOwnership(entry, params, signature, catalog, warnings) {
|
|
2478
2479
|
const local = signature.traits.find(
|
|
2479
|
-
(t) => t.overridableConfigKeys.
|
|
2480
|
+
(t) => t.overridableConfigKeys.some((p) => p.key === "ownerField")
|
|
2480
2481
|
);
|
|
2481
2482
|
if (local) {
|
|
2482
2483
|
writeOwnerField(local.name, entry.ownerField, params);
|
|
@@ -2485,7 +2486,7 @@ function applyOwnership(entry, params, signature, catalog, warnings) {
|
|
|
2485
2486
|
if (catalog) {
|
|
2486
2487
|
for (const sig of catalog) {
|
|
2487
2488
|
const trait = sig.traits.find(
|
|
2488
|
-
(t) => t.overridableConfigKeys.
|
|
2489
|
+
(t) => t.overridableConfigKeys.some((p) => p.key === "ownerField")
|
|
2489
2490
|
);
|
|
2490
2491
|
if (trait) {
|
|
2491
2492
|
writeOwnerField(trait.name, entry.ownerField, params);
|