@almadar/std 14.43.2 → 14.43.3
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.
|
@@ -136,4 +136,40 @@ declare function validateOrbitalFactoryParams(manifest: OrbitalParamsManifest, r
|
|
|
136
136
|
*/
|
|
137
137
|
declare function applyParamsToOrb(orb: OrbitalSchema, orbitalName: string, _manifest: OrbitalParamsManifest, params: OrbitalFactoryParams): OrbitalDefinition;
|
|
138
138
|
|
|
139
|
-
|
|
139
|
+
/**
|
|
140
|
+
* `applyParamsToWholeOrb` — pure runtime overlay for an ENTIRE stored orb.
|
|
141
|
+
*
|
|
142
|
+
* Companion to `applyParamsToOrb` (single-orbital). Where `applyParamsToOrb`
|
|
143
|
+
* materialises one orbital from a multi-orbital schema, this function applies
|
|
144
|
+
* the same overlay to every orbital in the schema by joining each orbital to
|
|
145
|
+
* its matching manifest entry from `manifests[]`. Returns a new
|
|
146
|
+
* `OrbitalSchema` with the rebuilt orbitals.
|
|
147
|
+
*
|
|
148
|
+
* Used by team-behavior dispatch on the LLM-loop seam (`call_behavior` tool
|
|
149
|
+
* in @almadar/agent): the LLM emits `call_behavior('team/<name>@<v>', params)`,
|
|
150
|
+
* std-import returns undefined, the agent's `extra.dispatchWhole` port runs
|
|
151
|
+
* this function over the Firestore-stored record's `{ orb, manifests }`.
|
|
152
|
+
*
|
|
153
|
+
* Reference: `docs/Almadar_Studio_SDK.md` §7.4.4.
|
|
154
|
+
*
|
|
155
|
+
* Pure data → data. No I/O.
|
|
156
|
+
*
|
|
157
|
+
* @packageDocumentation
|
|
158
|
+
*/
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Apply `params` to every orbital in `orb` that has a matching manifest in
|
|
162
|
+
* `manifests[]`. Orbitals with no manifest are passed through unchanged —
|
|
163
|
+
* the storage convention is one manifest per orbital, so a missing manifest
|
|
164
|
+
* indicates a stored orbital we don't know how to parameterise (rare; the
|
|
165
|
+
* promote path writes manifests for every orbital it knows).
|
|
166
|
+
*
|
|
167
|
+
* @param orb The full team-behavior schema as stored.
|
|
168
|
+
* @param manifests Per-orbital param manifests; joined to orbitals by name.
|
|
169
|
+
* @param params One shared params bag applied to every parameterised
|
|
170
|
+
* orbital. Mirrors the std whole-behavior factories'
|
|
171
|
+
* convention of a single `params` argument.
|
|
172
|
+
*/
|
|
173
|
+
declare function applyParamsToWholeOrb(orb: OrbitalSchema, manifests: readonly OrbitalParamsManifest[], params: OrbitalFactoryParams): OrbitalSchema;
|
|
174
|
+
|
|
175
|
+
export { type OrbitalFactoryParams, OrbitalParamsManifest, type OrbitalTraitOverride, type ParamValidationError, type ParamValidationResult, applyParamsToOrb, applyParamsToWholeOrb, extractManifest, validateOrbitalFactoryParams };
|
|
@@ -233,6 +233,24 @@ function applyParamsToOrb(orb, orbitalName, _manifest, params) {
|
|
|
233
233
|
return built;
|
|
234
234
|
}
|
|
235
235
|
|
|
236
|
-
|
|
236
|
+
// factory-runtime/apply-params-to-whole-orb.ts
|
|
237
|
+
function applyParamsToWholeOrb(orb, manifests, params) {
|
|
238
|
+
const manifestByOrbital = /* @__PURE__ */ new Map();
|
|
239
|
+
for (const m of manifests) {
|
|
240
|
+
manifestByOrbital.set(m.orbitalName, m);
|
|
241
|
+
}
|
|
242
|
+
const rebuilt = [];
|
|
243
|
+
for (const orbital of orb.orbitals) {
|
|
244
|
+
const manifest = manifestByOrbital.get(orbital.name);
|
|
245
|
+
if (!manifest) {
|
|
246
|
+
rebuilt.push(orbital);
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
rebuilt.push(applyParamsToOrb(orb, orbital.name, manifest, params));
|
|
250
|
+
}
|
|
251
|
+
return { ...orb, orbitals: rebuilt };
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
export { applyParamsToOrb, applyParamsToWholeOrb, extractManifest, validateOrbitalFactoryParams };
|
|
237
255
|
//# sourceMappingURL=index.js.map
|
|
238
256
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../factory-runtime/extract-manifest.ts","../../factory-runtime/apply-params-to-orb.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * `extractManifest(orb)` — derive the typed `OrbitalParamsManifest[]` from a\n * resolved `.orb`, one entry per orbital. The result has the exact same\n * shape the codegen `regenerate-std-ts.mjs` emits as `*OrbitalManifest`\n * literals.\n *\n * Pure data → data. No I/O. No behavior-specific branching.\n *\n * Used by:\n * - `scripts/regenerate-std-ts.mjs` — emits the manifest as a TS literal.\n * - The promotion server (Phase B) — stores `manifests[]` alongside the orb.\n *\n * @packageDocumentation\n */\n\nimport type { OrbitalSchema, TraitReference } from '@almadar/core';\nimport type {\n OrbitalParamsManifest,\n ParamFieldDescriptor,\n} from '../behaviors/functions/dispatch.js';\n\n/**\n * Canonical param-field descriptors. Static across all factories — every\n * orbital accepts the same six knobs (the codegen emits this exact list\n * verbatim into every generated manifest).\n */\nconst STATIC_PARAM_FIELDS: readonly ParamFieldDescriptor[] = [\n {\n name: 'fields',\n type: 'EntityField[]',\n description: 'Extra fields appended to the canonical entity.',\n },\n {\n name: 'pagePath',\n type: 'string',\n description: 'URL override for the orbital first page.',\n },\n {\n name: 'persistence',\n type: \"'persistent' | 'runtime' | 'singleton' | 'instance' | 'local'\",\n description: 'Override the canonical entity persistence mode.',\n },\n {\n name: 'entityName',\n type: 'string',\n description:\n \"Rename the canonical entity. PascalCase singular, ≤32 chars. Threads through every trait's linkedEntity binding; compiler rewrites @Entity.x refs.\",\n },\n {\n name: 'collection',\n type: 'string',\n description:\n 'Override derived collection key. Defaults to plural(entityName).toLowerCase().',\n },\n {\n name: 'traitOverrides',\n type: 'Partial<Record<TraitName, { config?, linkedEntity?, events?, name?, emitsScope?, listens? }>>',\n description:\n \".lolo's native trait-composition surface 1:1: per-imported-trait config, linkedEntity, events, name, emitsScope, listens. effects is excluded (atom-owned; use listens via a sibling trait).\",\n },\n] as const;\n\ninterface SplitTraits {\n readonly refTraitNames: readonly string[];\n readonly inlineTraitNames: readonly string[];\n}\n\nfunction splitTraits(traits: OrbitalSchema['orbitals'][number]['traits']): SplitTraits {\n const refTraitNames: string[] = [];\n const inlineTraitNames: string[] = [];\n for (const t of traits) {\n if (!t || typeof t !== 'object') continue;\n const tName = typeof (t as TraitReference).name === 'string'\n ? (t as TraitReference).name\n : null;\n if (!tName) continue;\n if (typeof (t as TraitReference).ref === 'string') {\n refTraitNames.push(tName);\n } else {\n inlineTraitNames.push(tName);\n }\n }\n return { refTraitNames, inlineTraitNames };\n}\n\n/**\n * Produce one `OrbitalParamsManifest` per orbital in the orb. The orb's\n * top-level `name` is the behavior name (e.g. `std-embedded-dashboard`);\n * each orbital's `name` is the orbital name (e.g. `DashboardOrbital`).\n */\nexport function extractManifest(orb: OrbitalSchema): readonly OrbitalParamsManifest[] {\n const behaviorName = orb.name;\n return orb.orbitals.map((orbital) => {\n const { refTraitNames, inlineTraitNames } = splitTraits(orbital.traits);\n return {\n organism: behaviorName,\n orbitalName: orbital.name,\n paramFields: STATIC_PARAM_FIELDS,\n traitNames: refTraitNames,\n inlineTraitNames,\n };\n });\n}\n","/**\n * `applyParamsToOrb` — pure runtime overlay function. Equivalent to the body\n * the codegen `regenerate-std-ts.mjs` emits inline for every std factory\n * (`scripts/regenerate-std-ts.mjs:612-737`), lifted out so that:\n * 1. team-published behaviors (Firestore-stored) can dispatch through the\n * same overlay as std behaviors;\n * 2. std factories *can* (future cleanup) collapse to a one-line wrapper\n * calling this function.\n *\n * Reference: `docs/Almadar_Studio_SDK.md` §7.4.2.\n *\n * Pure data → data. No I/O.\n *\n * @packageDocumentation\n */\n\nimport type {\n Entity,\n EntityField,\n OrbitalDefinition,\n OrbitalEntity,\n OrbitalSchema,\n PageRefObject,\n TraitReference,\n} from '@almadar/core';\nimport type {\n MakePageRefOpts,\n MakeTraitRefOpts,\n} from '@almadar/core/builders';\nimport {\n makeOrbitalWithUses,\n makePageRef,\n makeTraitRef,\n} from '@almadar/core/builders';\nimport type { OrbitalParamsManifest } from '../behaviors/functions/dispatch.js';\nimport type {\n OrbitalFactoryParams,\n OrbitalTraitOverride,\n ParamValidationResult,\n} from './types.js';\n\n/**\n * Structural validation of caller-supplied params against the manifest.\n * Rejects unknown top-level keys and unknown `traitOverrides` keys (the\n * latter against the manifest's `traitNames` allow-list).\n *\n * `raw: object` is the minimum-typed input: callers must already have\n * narrowed from JSON / LLM output to a plain object. The discriminated\n * result lifts callers into the typed `OrbitalFactoryParams` on success.\n */\nexport function validateOrbitalFactoryParams(\n manifest: OrbitalParamsManifest,\n raw: object,\n): ParamValidationResult {\n if (raw === null || Array.isArray(raw)) {\n return {\n ok: false,\n error: { kind: 'not-object', received: Array.isArray(raw) ? 'array' : 'null' },\n };\n }\n\n const ALLOWED_KEYS = new Set<string>([\n 'fields',\n 'pagePath',\n 'persistence',\n 'entityName',\n 'collection',\n 'traitOverrides',\n ]);\n for (const key of Object.keys(raw)) {\n if (!ALLOWED_KEYS.has(key)) {\n return { ok: false, error: { kind: 'unknown-key', key } };\n }\n }\n\n // raw is a plain object whose keys are restricted to OrbitalFactoryParams\n // keys; assert the shape now (no widening to follow). Field-level type\n // checks live downstream — the orbital validator catches malformed\n // EntityField / TraitConfig at the lolo / orbital-rust layer.\n const candidate = raw as OrbitalFactoryParams;\n if (candidate.traitOverrides !== undefined) {\n const to = candidate.traitOverrides;\n if (to === null || typeof to !== 'object' || Array.isArray(to)) {\n return {\n ok: false,\n error: {\n kind: 'trait-overrides-not-object',\n received: Array.isArray(to) ? 'array' : typeof to,\n },\n };\n }\n const allowed = new Set<string>(manifest.traitNames);\n for (const traitName of Object.keys(to)) {\n if (!allowed.has(traitName)) {\n return {\n ok: false,\n error: {\n kind: 'unknown-trait-override',\n trait: traitName,\n allowed: manifest.traitNames,\n },\n };\n }\n }\n }\n\n return { ok: true, params: candidate };\n}\n\ninterface OverlayContext {\n readonly canonicalEntityName: string;\n readonly canonicalEntity: OrbitalEntity;\n}\n\n/**\n * `orbital.entity` is `EntityRef = Entity | string | EntityCall`. For the\n * overlay we require a fully-resolved inline `OrbitalEntity` (the script\n * runs against resolved `.orb`s where every entity has been materialized).\n * Strings and `EntityCall` shapes mean the caller passed an unresolved orb.\n */\nfunction assertResolvedEntity(\n entity: OrbitalSchema['orbitals'][number]['entity'],\n orbitalName: string,\n orbName: string,\n): OrbitalEntity {\n if (typeof entity === 'string') {\n throw new Error(\n `applyParamsToOrb: orbital \"${orbitalName}\" in orb \"${orbName}\" has an unresolved entity reference (string form). Pass a resolved .orb.`,\n );\n }\n if ('extends' in entity) {\n throw new Error(\n `applyParamsToOrb: orbital \"${orbitalName}\" in orb \"${orbName}\" has an unresolved EntityCall (\"extends\" form). Pass a resolved .orb.`,\n );\n }\n return entity;\n}\n\nfunction findOrbitalOrThrow(\n orb: OrbitalSchema,\n orbitalName: string,\n): OrbitalSchema['orbitals'][number] {\n const orbital = orb.orbitals.find((o) => o.name === orbitalName);\n if (!orbital) {\n throw new Error(\n `applyParamsToOrb: orbital \"${orbitalName}\" not found in orb \"${orb.name}\". Available: ${orb.orbitals\n .map((o) => o.name)\n .join(', ')}`,\n );\n }\n return orbital;\n}\n\nfunction buildEntity(\n ctx: OverlayContext,\n effectiveName: string,\n effectiveCollection: string | undefined,\n params: OrbitalFactoryParams,\n): Entity {\n const canonicalFields: readonly EntityField[] = Array.isArray(ctx.canonicalEntity.fields)\n ? ctx.canonicalEntity.fields\n : [];\n\n // Caller-wins merge: drop canonical entries whose name appears in\n // params.fields, then concat the extras. Prevents ORB_E_DUPLICATE_FIELD\n // when the analyzer hallucinates a canonical-named field as an \"extra\".\n const extras: readonly EntityField[] = params.fields ?? [];\n let mergedFields: readonly EntityField[];\n if (extras.length === 0) {\n mergedFields = canonicalFields;\n } else {\n const extraNames = new Set(extras.map((f) => f.name));\n mergedFields = [\n ...canonicalFields.filter((f) => !extraNames.has(f.name)),\n ...extras,\n ];\n }\n\n const entity: Entity = {\n name: effectiveName,\n persistence: params.persistence ?? ctx.canonicalEntity.persistence,\n fields: [...mergedFields],\n };\n if (effectiveCollection !== undefined) {\n entity.collection = effectiveCollection;\n }\n return entity;\n}\n\ntype TraitOrInline = OrbitalSchema['orbitals'][number]['traits'][number];\ntype PageOrRef = NonNullable<OrbitalSchema['orbitals'][number]['pages']>[number];\n\nfunction isTraitReferenceObject(t: TraitOrInline): t is TraitReference {\n // Narrow guard. `t` comes from `orbital.traits` which is a union of\n // `TraitReference | (inline trait shape)`. The codegen emits the same\n // structural test before rewriting `linkedEntity`.\n if (t === null || typeof t !== 'object') return false;\n if (!('ref' in t)) return false;\n return typeof t.ref === 'string';\n}\n\nfunction isPageRefObject(p: PageOrRef): p is PageRefObject {\n if (p === null || typeof p !== 'object') return false;\n if (!('ref' in p)) return false;\n return typeof p.ref === 'string';\n}\n\nfunction rebuildTraits(\n ctx: OverlayContext,\n effectiveEntityName: string,\n traits: OrbitalSchema['orbitals'][number]['traits'],\n): OrbitalDefinition['traits'] {\n return traits.map((t) => {\n if (!isTraitReferenceObject(t)) {\n return t;\n }\n const rewrittenLinkedEntity =\n t.linkedEntity === ctx.canonicalEntityName ? effectiveEntityName : t.linkedEntity;\n // Cast widens `TraitReference.effects: Record<string, unknown[]>` to the\n // narrower `MakeTraitRefOpts.effects: Record<string, SExpr[]>` — same\n // runtime data, looser typing on the schema side. Not `as unknown as`.\n const opts: MakeTraitRefOpts = {\n ...t,\n linkedEntity: rewrittenLinkedEntity,\n } as MakeTraitRefOpts;\n return makeTraitRef(opts);\n });\n}\n\nfunction rebuildPages(\n ctx: OverlayContext,\n effectiveEntityName: string,\n pages: OrbitalSchema['orbitals'][number]['pages'],\n): NonNullable<OrbitalDefinition['pages']> {\n if (!pages) return [];\n return pages.map((p) => {\n if (!isPageRefObject(p)) {\n return p;\n }\n const rewrittenLinkedEntity =\n p.linkedEntity === ctx.canonicalEntityName ? effectiveEntityName : p.linkedEntity;\n const opts: MakePageRefOpts = {\n ...p,\n linkedEntity: rewrittenLinkedEntity,\n } as MakePageRefOpts;\n return makePageRef(opts);\n });\n}\n\n/**\n * The overlay. Resolves the effective entity name + collection, calls\n * `makeOrbitalWithUses` with the rewritten data, then applies the params'\n * trait/page overrides post-hoc — exactly mirroring the codegen emit at\n * `scripts/regenerate-std-ts.mjs:612-737`.\n *\n * `_manifest` is accepted for parity with the future dispatcher signature\n * but is unused in this overlay — the manifest is consumed by\n * `validateOrbitalFactoryParams` upstream. Kept on the signature so std\n * factories can collapse to one-line wrappers without an arg-shape change.\n */\nexport function applyParamsToOrb(\n orb: OrbitalSchema,\n orbitalName: string,\n _manifest: OrbitalParamsManifest,\n params: OrbitalFactoryParams,\n): OrbitalDefinition {\n const orbital = findOrbitalOrThrow(orb, orbitalName);\n const canonicalEntity = assertResolvedEntity(orbital.entity, orbitalName, orb.name);\n const canonicalEntityName = canonicalEntity.name;\n const effectiveEntityName = params.entityName ?? canonicalEntityName;\n const effectiveCollection =\n typeof canonicalEntity.collection === 'string'\n ? (params.collection ??\n (params.entityName\n ? `${params.entityName.toLowerCase()}s`\n : canonicalEntity.collection))\n : params.collection;\n\n const ctx: OverlayContext = { canonicalEntityName, canonicalEntity };\n\n const built = makeOrbitalWithUses({\n name: orbital.name,\n uses: orbital.uses ?? [],\n entity: buildEntity(ctx, effectiveEntityName, effectiveCollection, params),\n traits: rebuildTraits(ctx, effectiveEntityName, orbital.traits),\n pages: rebuildPages(ctx, effectiveEntityName, orbital.pages),\n });\n\n if (built.traits && params.traitOverrides !== undefined) {\n built.traits = built.traits.map((t) => {\n if (!isTraitReferenceObject(t) || typeof t.name !== 'string') return t;\n const override: OrbitalTraitOverride | undefined = params.traitOverrides?.[t.name];\n if (!override) return t;\n const merged: TraitReference = { ...t };\n if (override.config !== undefined) {\n merged.config = { ...(t.config ?? {}), ...override.config };\n }\n if (override.linkedEntity !== undefined) merged.linkedEntity = override.linkedEntity;\n if (override.events !== undefined) {\n merged.events = { ...(t.events ?? {}), ...override.events };\n }\n if (override.name !== undefined) merged.name = override.name;\n if (override.emitsScope !== undefined) merged.emitsScope = override.emitsScope;\n if (override.listens !== undefined) merged.listens = override.listens;\n return merged;\n });\n }\n\n if (built.pages && params.pagePath !== undefined) {\n built.pages = built.pages.map((p, idx) => {\n if (!isPageRefObject(p) || idx !== 0) return p;\n return { ...p, path: params.pagePath } as PageRefObject;\n });\n }\n\n return built;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../factory-runtime/extract-manifest.ts","../../factory-runtime/apply-params-to-orb.ts","../../factory-runtime/apply-params-to-whole-orb.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * `extractManifest(orb)` — derive the typed `OrbitalParamsManifest[]` from a\n * resolved `.orb`, one entry per orbital. The result has the exact same\n * shape the codegen `regenerate-std-ts.mjs` emits as `*OrbitalManifest`\n * literals.\n *\n * Pure data → data. No I/O. No behavior-specific branching.\n *\n * Used by:\n * - `scripts/regenerate-std-ts.mjs` — emits the manifest as a TS literal.\n * - The promotion server (Phase B) — stores `manifests[]` alongside the orb.\n *\n * @packageDocumentation\n */\n\nimport type { OrbitalSchema, TraitReference } from '@almadar/core';\nimport type {\n OrbitalParamsManifest,\n ParamFieldDescriptor,\n} from '../behaviors/functions/dispatch.js';\n\n/**\n * Canonical param-field descriptors. Static across all factories — every\n * orbital accepts the same six knobs (the codegen emits this exact list\n * verbatim into every generated manifest).\n */\nconst STATIC_PARAM_FIELDS: readonly ParamFieldDescriptor[] = [\n {\n name: 'fields',\n type: 'EntityField[]',\n description: 'Extra fields appended to the canonical entity.',\n },\n {\n name: 'pagePath',\n type: 'string',\n description: 'URL override for the orbital first page.',\n },\n {\n name: 'persistence',\n type: \"'persistent' | 'runtime' | 'singleton' | 'instance' | 'local'\",\n description: 'Override the canonical entity persistence mode.',\n },\n {\n name: 'entityName',\n type: 'string',\n description:\n \"Rename the canonical entity. PascalCase singular, ≤32 chars. Threads through every trait's linkedEntity binding; compiler rewrites @Entity.x refs.\",\n },\n {\n name: 'collection',\n type: 'string',\n description:\n 'Override derived collection key. Defaults to plural(entityName).toLowerCase().',\n },\n {\n name: 'traitOverrides',\n type: 'Partial<Record<TraitName, { config?, linkedEntity?, events?, name?, emitsScope?, listens? }>>',\n description:\n \".lolo's native trait-composition surface 1:1: per-imported-trait config, linkedEntity, events, name, emitsScope, listens. effects is excluded (atom-owned; use listens via a sibling trait).\",\n },\n] as const;\n\ninterface SplitTraits {\n readonly refTraitNames: readonly string[];\n readonly inlineTraitNames: readonly string[];\n}\n\nfunction splitTraits(traits: OrbitalSchema['orbitals'][number]['traits']): SplitTraits {\n const refTraitNames: string[] = [];\n const inlineTraitNames: string[] = [];\n for (const t of traits) {\n if (!t || typeof t !== 'object') continue;\n const tName = typeof (t as TraitReference).name === 'string'\n ? (t as TraitReference).name\n : null;\n if (!tName) continue;\n if (typeof (t as TraitReference).ref === 'string') {\n refTraitNames.push(tName);\n } else {\n inlineTraitNames.push(tName);\n }\n }\n return { refTraitNames, inlineTraitNames };\n}\n\n/**\n * Produce one `OrbitalParamsManifest` per orbital in the orb. The orb's\n * top-level `name` is the behavior name (e.g. `std-embedded-dashboard`);\n * each orbital's `name` is the orbital name (e.g. `DashboardOrbital`).\n */\nexport function extractManifest(orb: OrbitalSchema): readonly OrbitalParamsManifest[] {\n const behaviorName = orb.name;\n return orb.orbitals.map((orbital) => {\n const { refTraitNames, inlineTraitNames } = splitTraits(orbital.traits);\n return {\n organism: behaviorName,\n orbitalName: orbital.name,\n paramFields: STATIC_PARAM_FIELDS,\n traitNames: refTraitNames,\n inlineTraitNames,\n };\n });\n}\n","/**\n * `applyParamsToOrb` — pure runtime overlay function. Equivalent to the body\n * the codegen `regenerate-std-ts.mjs` emits inline for every std factory\n * (`scripts/regenerate-std-ts.mjs:612-737`), lifted out so that:\n * 1. team-published behaviors (Firestore-stored) can dispatch through the\n * same overlay as std behaviors;\n * 2. std factories *can* (future cleanup) collapse to a one-line wrapper\n * calling this function.\n *\n * Reference: `docs/Almadar_Studio_SDK.md` §7.4.2.\n *\n * Pure data → data. No I/O.\n *\n * @packageDocumentation\n */\n\nimport type {\n Entity,\n EntityField,\n OrbitalDefinition,\n OrbitalEntity,\n OrbitalSchema,\n PageRefObject,\n TraitReference,\n} from '@almadar/core';\nimport type {\n MakePageRefOpts,\n MakeTraitRefOpts,\n} from '@almadar/core/builders';\nimport {\n makeOrbitalWithUses,\n makePageRef,\n makeTraitRef,\n} from '@almadar/core/builders';\nimport type { OrbitalParamsManifest } from '../behaviors/functions/dispatch.js';\nimport type {\n OrbitalFactoryParams,\n OrbitalTraitOverride,\n ParamValidationResult,\n} from './types.js';\n\n/**\n * Structural validation of caller-supplied params against the manifest.\n * Rejects unknown top-level keys and unknown `traitOverrides` keys (the\n * latter against the manifest's `traitNames` allow-list).\n *\n * `raw: object` is the minimum-typed input: callers must already have\n * narrowed from JSON / LLM output to a plain object. The discriminated\n * result lifts callers into the typed `OrbitalFactoryParams` on success.\n */\nexport function validateOrbitalFactoryParams(\n manifest: OrbitalParamsManifest,\n raw: object,\n): ParamValidationResult {\n if (raw === null || Array.isArray(raw)) {\n return {\n ok: false,\n error: { kind: 'not-object', received: Array.isArray(raw) ? 'array' : 'null' },\n };\n }\n\n const ALLOWED_KEYS = new Set<string>([\n 'fields',\n 'pagePath',\n 'persistence',\n 'entityName',\n 'collection',\n 'traitOverrides',\n ]);\n for (const key of Object.keys(raw)) {\n if (!ALLOWED_KEYS.has(key)) {\n return { ok: false, error: { kind: 'unknown-key', key } };\n }\n }\n\n // raw is a plain object whose keys are restricted to OrbitalFactoryParams\n // keys; assert the shape now (no widening to follow). Field-level type\n // checks live downstream — the orbital validator catches malformed\n // EntityField / TraitConfig at the lolo / orbital-rust layer.\n const candidate = raw as OrbitalFactoryParams;\n if (candidate.traitOverrides !== undefined) {\n const to = candidate.traitOverrides;\n if (to === null || typeof to !== 'object' || Array.isArray(to)) {\n return {\n ok: false,\n error: {\n kind: 'trait-overrides-not-object',\n received: Array.isArray(to) ? 'array' : typeof to,\n },\n };\n }\n const allowed = new Set<string>(manifest.traitNames);\n for (const traitName of Object.keys(to)) {\n if (!allowed.has(traitName)) {\n return {\n ok: false,\n error: {\n kind: 'unknown-trait-override',\n trait: traitName,\n allowed: manifest.traitNames,\n },\n };\n }\n }\n }\n\n return { ok: true, params: candidate };\n}\n\ninterface OverlayContext {\n readonly canonicalEntityName: string;\n readonly canonicalEntity: OrbitalEntity;\n}\n\n/**\n * `orbital.entity` is `EntityRef = Entity | string | EntityCall`. For the\n * overlay we require a fully-resolved inline `OrbitalEntity` (the script\n * runs against resolved `.orb`s where every entity has been materialized).\n * Strings and `EntityCall` shapes mean the caller passed an unresolved orb.\n */\nfunction assertResolvedEntity(\n entity: OrbitalSchema['orbitals'][number]['entity'],\n orbitalName: string,\n orbName: string,\n): OrbitalEntity {\n if (typeof entity === 'string') {\n throw new Error(\n `applyParamsToOrb: orbital \"${orbitalName}\" in orb \"${orbName}\" has an unresolved entity reference (string form). Pass a resolved .orb.`,\n );\n }\n if ('extends' in entity) {\n throw new Error(\n `applyParamsToOrb: orbital \"${orbitalName}\" in orb \"${orbName}\" has an unresolved EntityCall (\"extends\" form). Pass a resolved .orb.`,\n );\n }\n return entity;\n}\n\nfunction findOrbitalOrThrow(\n orb: OrbitalSchema,\n orbitalName: string,\n): OrbitalSchema['orbitals'][number] {\n const orbital = orb.orbitals.find((o) => o.name === orbitalName);\n if (!orbital) {\n throw new Error(\n `applyParamsToOrb: orbital \"${orbitalName}\" not found in orb \"${orb.name}\". Available: ${orb.orbitals\n .map((o) => o.name)\n .join(', ')}`,\n );\n }\n return orbital;\n}\n\nfunction buildEntity(\n ctx: OverlayContext,\n effectiveName: string,\n effectiveCollection: string | undefined,\n params: OrbitalFactoryParams,\n): Entity {\n const canonicalFields: readonly EntityField[] = Array.isArray(ctx.canonicalEntity.fields)\n ? ctx.canonicalEntity.fields\n : [];\n\n // Caller-wins merge: drop canonical entries whose name appears in\n // params.fields, then concat the extras. Prevents ORB_E_DUPLICATE_FIELD\n // when the analyzer hallucinates a canonical-named field as an \"extra\".\n const extras: readonly EntityField[] = params.fields ?? [];\n let mergedFields: readonly EntityField[];\n if (extras.length === 0) {\n mergedFields = canonicalFields;\n } else {\n const extraNames = new Set(extras.map((f) => f.name));\n mergedFields = [\n ...canonicalFields.filter((f) => !extraNames.has(f.name)),\n ...extras,\n ];\n }\n\n const entity: Entity = {\n name: effectiveName,\n persistence: params.persistence ?? ctx.canonicalEntity.persistence,\n fields: [...mergedFields],\n };\n if (effectiveCollection !== undefined) {\n entity.collection = effectiveCollection;\n }\n return entity;\n}\n\ntype TraitOrInline = OrbitalSchema['orbitals'][number]['traits'][number];\ntype PageOrRef = NonNullable<OrbitalSchema['orbitals'][number]['pages']>[number];\n\nfunction isTraitReferenceObject(t: TraitOrInline): t is TraitReference {\n // Narrow guard. `t` comes from `orbital.traits` which is a union of\n // `TraitReference | (inline trait shape)`. The codegen emits the same\n // structural test before rewriting `linkedEntity`.\n if (t === null || typeof t !== 'object') return false;\n if (!('ref' in t)) return false;\n return typeof t.ref === 'string';\n}\n\nfunction isPageRefObject(p: PageOrRef): p is PageRefObject {\n if (p === null || typeof p !== 'object') return false;\n if (!('ref' in p)) return false;\n return typeof p.ref === 'string';\n}\n\nfunction rebuildTraits(\n ctx: OverlayContext,\n effectiveEntityName: string,\n traits: OrbitalSchema['orbitals'][number]['traits'],\n): OrbitalDefinition['traits'] {\n return traits.map((t) => {\n if (!isTraitReferenceObject(t)) {\n return t;\n }\n const rewrittenLinkedEntity =\n t.linkedEntity === ctx.canonicalEntityName ? effectiveEntityName : t.linkedEntity;\n // Cast widens `TraitReference.effects: Record<string, unknown[]>` to the\n // narrower `MakeTraitRefOpts.effects: Record<string, SExpr[]>` — same\n // runtime data, looser typing on the schema side. Not `as unknown as`.\n const opts: MakeTraitRefOpts = {\n ...t,\n linkedEntity: rewrittenLinkedEntity,\n } as MakeTraitRefOpts;\n return makeTraitRef(opts);\n });\n}\n\nfunction rebuildPages(\n ctx: OverlayContext,\n effectiveEntityName: string,\n pages: OrbitalSchema['orbitals'][number]['pages'],\n): NonNullable<OrbitalDefinition['pages']> {\n if (!pages) return [];\n return pages.map((p) => {\n if (!isPageRefObject(p)) {\n return p;\n }\n const rewrittenLinkedEntity =\n p.linkedEntity === ctx.canonicalEntityName ? effectiveEntityName : p.linkedEntity;\n const opts: MakePageRefOpts = {\n ...p,\n linkedEntity: rewrittenLinkedEntity,\n } as MakePageRefOpts;\n return makePageRef(opts);\n });\n}\n\n/**\n * The overlay. Resolves the effective entity name + collection, calls\n * `makeOrbitalWithUses` with the rewritten data, then applies the params'\n * trait/page overrides post-hoc — exactly mirroring the codegen emit at\n * `scripts/regenerate-std-ts.mjs:612-737`.\n *\n * `_manifest` is accepted for parity with the future dispatcher signature\n * but is unused in this overlay — the manifest is consumed by\n * `validateOrbitalFactoryParams` upstream. Kept on the signature so std\n * factories can collapse to one-line wrappers without an arg-shape change.\n */\nexport function applyParamsToOrb(\n orb: OrbitalSchema,\n orbitalName: string,\n _manifest: OrbitalParamsManifest,\n params: OrbitalFactoryParams,\n): OrbitalDefinition {\n const orbital = findOrbitalOrThrow(orb, orbitalName);\n const canonicalEntity = assertResolvedEntity(orbital.entity, orbitalName, orb.name);\n const canonicalEntityName = canonicalEntity.name;\n const effectiveEntityName = params.entityName ?? canonicalEntityName;\n const effectiveCollection =\n typeof canonicalEntity.collection === 'string'\n ? (params.collection ??\n (params.entityName\n ? `${params.entityName.toLowerCase()}s`\n : canonicalEntity.collection))\n : params.collection;\n\n const ctx: OverlayContext = { canonicalEntityName, canonicalEntity };\n\n const built = makeOrbitalWithUses({\n name: orbital.name,\n uses: orbital.uses ?? [],\n entity: buildEntity(ctx, effectiveEntityName, effectiveCollection, params),\n traits: rebuildTraits(ctx, effectiveEntityName, orbital.traits),\n pages: rebuildPages(ctx, effectiveEntityName, orbital.pages),\n });\n\n if (built.traits && params.traitOverrides !== undefined) {\n built.traits = built.traits.map((t) => {\n if (!isTraitReferenceObject(t) || typeof t.name !== 'string') return t;\n const override: OrbitalTraitOverride | undefined = params.traitOverrides?.[t.name];\n if (!override) return t;\n const merged: TraitReference = { ...t };\n if (override.config !== undefined) {\n merged.config = { ...(t.config ?? {}), ...override.config };\n }\n if (override.linkedEntity !== undefined) merged.linkedEntity = override.linkedEntity;\n if (override.events !== undefined) {\n merged.events = { ...(t.events ?? {}), ...override.events };\n }\n if (override.name !== undefined) merged.name = override.name;\n if (override.emitsScope !== undefined) merged.emitsScope = override.emitsScope;\n if (override.listens !== undefined) merged.listens = override.listens;\n return merged;\n });\n }\n\n if (built.pages && params.pagePath !== undefined) {\n built.pages = built.pages.map((p, idx) => {\n if (!isPageRefObject(p) || idx !== 0) return p;\n return { ...p, path: params.pagePath } as PageRefObject;\n });\n }\n\n return built;\n}\n","/**\n * `applyParamsToWholeOrb` — pure runtime overlay for an ENTIRE stored orb.\n *\n * Companion to `applyParamsToOrb` (single-orbital). Where `applyParamsToOrb`\n * materialises one orbital from a multi-orbital schema, this function applies\n * the same overlay to every orbital in the schema by joining each orbital to\n * its matching manifest entry from `manifests[]`. Returns a new\n * `OrbitalSchema` with the rebuilt orbitals.\n *\n * Used by team-behavior dispatch on the LLM-loop seam (`call_behavior` tool\n * in @almadar/agent): the LLM emits `call_behavior('team/<name>@<v>', params)`,\n * std-import returns undefined, the agent's `extra.dispatchWhole` port runs\n * this function over the Firestore-stored record's `{ orb, manifests }`.\n *\n * Reference: `docs/Almadar_Studio_SDK.md` §7.4.4.\n *\n * Pure data → data. No I/O.\n *\n * @packageDocumentation\n */\n\nimport type { OrbitalDefinition, OrbitalSchema } from '@almadar/core';\nimport type { OrbitalParamsManifest } from '../behaviors/functions/dispatch.js';\nimport type { OrbitalFactoryParams } from './types.js';\nimport { applyParamsToOrb } from './apply-params-to-orb.js';\n\n/**\n * Apply `params` to every orbital in `orb` that has a matching manifest in\n * `manifests[]`. Orbitals with no manifest are passed through unchanged —\n * the storage convention is one manifest per orbital, so a missing manifest\n * indicates a stored orbital we don't know how to parameterise (rare; the\n * promote path writes manifests for every orbital it knows).\n *\n * @param orb The full team-behavior schema as stored.\n * @param manifests Per-orbital param manifests; joined to orbitals by name.\n * @param params One shared params bag applied to every parameterised\n * orbital. Mirrors the std whole-behavior factories'\n * convention of a single `params` argument.\n */\nexport function applyParamsToWholeOrb(\n orb: OrbitalSchema,\n manifests: readonly OrbitalParamsManifest[],\n params: OrbitalFactoryParams,\n): OrbitalSchema {\n const manifestByOrbital = new Map<string, OrbitalParamsManifest>();\n for (const m of manifests) {\n manifestByOrbital.set(m.orbitalName, m);\n }\n const rebuilt: OrbitalDefinition[] = [];\n for (const orbital of orb.orbitals) {\n const manifest = manifestByOrbital.get(orbital.name);\n if (!manifest) {\n rebuilt.push(orbital);\n continue;\n }\n rebuilt.push(applyParamsToOrb(orb, orbital.name, manifest, params));\n }\n return { ...orb, orbitals: rebuilt };\n}\n"]}
|