@almadar/core 7.22.0 → 7.24.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/index.d.ts CHANGED
@@ -3,7 +3,7 @@ export { A as AGENT_DOMAIN_CATEGORIES, a as ALLOWED_CUSTOM_COMPONENTS, b as Agen
3
3
  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';
4
4
  import { ResolvedIR, ResolvedEntity, ResolvedPage, ResolvedTrait, ChangesetValue, SchemaChange, CategorizedRemovals, PageContentReduction, SemanticSchemaChange } from './types/index.js';
5
5
  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';
6
- export { ASTNode, CallSiteDiff, ComparisonCondition, ComparisonOperator, DomainBehavior, DomainChunk, DomainDocument, DomainEffect, DomainEntity, DomainField, DomainFieldDefault, DomainFieldItems, DomainFieldType, DomainGuard, DomainMutation, DomainPage, DomainPageAction, DomainPageSection, DomainRelationship, DomainTick, DomainToSchemaResult, DomainTransition, EFFECT_REGISTRY, EffectMapping, EffectType, FIELD_TYPE_REGISTRY, FactoryCallSite, FactoryCallSiteParams, FactoryEntitySignature, FactoryPageSignature, FactoryParamValue, FactorySignature, FactorySignatureCatalog, FactorySignatureEntityField, FactoryTraitSignature, FieldCheckCondition, FieldReference, FieldTypeMapping, GUARD_REGISTRY, GuardCondition, GuardMapping, KEYWORDS, Lexer, LogicalCondition, LogicalOperator, MULTI_WORD_KEYWORDS, MappingStore, MergeResult, ParseError, ParseResult, PresentationNavItem, PresentationOverlay, RelationshipType, SchemaFieldType, SchemaToDomainResult, SectionMapping, SourceLocation, SourceRange, Token, TokenType, TranslationBinding, TranslationResult, TranslationWarning, UserCheckCondition, applyMutation, applySectionUpdate, computeSchemaHash, convertDomainToSchema, convertEntitiesToDomain, convertPagesToDomain, convertSchemaToDomain, convertTraitsToDomain, createMappingStore, deleteSection, detectChanges, diffFactoryCalls, domainKeywordToSchemaType, findMapping, findMappingByPath, findMappingsByType, formatBehaviorToDomain, formatBehaviorToSchema, formatDomainGuardToSchema, formatEntityToDomain, formatEntityToSchema, formatGuardConditionToDomain, formatGuardToDomain, formatGuardToSchema, formatMergeSummary, formatPageToDomain, formatPageToSchema, formatSchemaEntityToDomain, formatSchemaGuardToDomain, formatSchemaPageToDomain, formatSchemaTraitToDomain, generateDomainLanguageReference, generateSectionId, getEffectMapping, getFieldTypeMapping, getGuardMapping, getRegisteredEffects, getRegisteredFieldTypes, getRegisteredGuards, getRegistryStats, getSchemaPath, hasSchemaChanged, isEffectRegistered, isFieldTypeRegistered, isGuardRegistered, mergeDomainChunks, parseBehavior, parseDomainEffect, parseDomainEffects, parseDomainGuard, parseEntity, parseGuard, parsePage, parseSectionId, removeMapping, resolveConflict, schemaEntityToDomainEntity, schemaPageToDomainPage, schemaTraitToDomainBehavior, schemaTypeToDomainKeyword, tokenize, translateDomainToParams, updateMappingRange, updateSchemaHash, upsertMapping, validateDomainChunk } from './domain-language/index.js';
6
+ export { ASTNode, CallSiteDiff, ComparisonCondition, ComparisonOperator, DomainBehavior, DomainChunk, DomainDocument, DomainEffect, DomainEntity, DomainField, DomainFieldDefault, DomainFieldItems, DomainFieldType, DomainGuard, DomainMutation, DomainPage, DomainPageAction, DomainPageSection, DomainRelationship, DomainRuleOverlayEntry, DomainTick, DomainToSchemaResult, DomainTransition, EFFECT_REGISTRY, EffectMapping, EffectType, FIELD_TYPE_REGISTRY, FactoryCallSite, FactoryCallSiteParams, FactoryEntitySignature, FactoryPageSignature, FactoryParamValue, FactorySignature, FactorySignatureCatalog, FactorySignatureEntityField, FactoryTraitSignature, FieldCheckCondition, FieldReference, FieldTypeMapping, GUARD_REGISTRY, GuardCondition, GuardMapping, KEYWORDS, Lexer, LogicalCondition, LogicalOperator, MULTI_WORD_KEYWORDS, MappingStore, MergeResult, OwnershipOverlayEntry, ParseError, ParseResult, PresentationNavItem, PresentationOverlay, RelationshipType, RuleOverlay, SchemaFieldType, SchemaToDomainResult, SectionMapping, SourceLocation, SourceRange, Token, TokenType, TraitOverlay, TraitOverlayEntry, TraitOverlayListener, TranslationBinding, TranslationResult, TranslationWarning, UserCheckCondition, applyMutation, applySectionUpdate, computeSchemaHash, convertDomainToSchema, convertEntitiesToDomain, convertPagesToDomain, convertSchemaToDomain, convertTraitsToDomain, createMappingStore, deleteSection, detectChanges, diffFactoryCalls, domainKeywordToSchemaType, findMapping, findMappingByPath, findMappingsByType, formatBehaviorToDomain, formatBehaviorToSchema, formatDomainGuardToSchema, formatEntityToDomain, formatEntityToSchema, formatGuardConditionToDomain, formatGuardToDomain, formatGuardToSchema, formatMergeSummary, formatPageToDomain, formatPageToSchema, formatSchemaEntityToDomain, formatSchemaGuardToDomain, formatSchemaPageToDomain, formatSchemaTraitToDomain, generateDomainLanguageReference, generateSectionId, getEffectMapping, getFieldTypeMapping, getGuardMapping, getRegisteredEffects, getRegisteredFieldTypes, getRegisteredGuards, getRegistryStats, getSchemaPath, hasSchemaChanged, isEffectRegistered, isFieldTypeRegistered, isGuardRegistered, mergeDomainChunks, parseBehavior, parseDomainEffect, parseDomainEffects, parseDomainGuard, parseEntity, parseGuard, parsePage, parseSectionId, removeMapping, resolveConflict, schemaEntityToDomainEntity, schemaPageToDomainPage, schemaTraitToDomainBehavior, schemaTypeToDomainKeyword, tokenize, translateDomainToParams, updateMappingRange, updateSchemaHash, upsertMapping, validateDomainChunk } from './domain-language/index.js';
7
7
  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-CHAMivlZ.js';
8
8
  export { PATTERN_TYPES, PatternConfig, PatternType, isValidPatternType } from '@almadar/patterns';
9
9
  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
@@ -7705,7 +7705,7 @@ var UI_SLOTS2 = [
7705
7705
  ];
7706
7706
 
7707
7707
  // src/domain-language/sync/translate-domain-to-params.ts
7708
- function translateDomainToParams(binding, signature, presentation) {
7708
+ function translateDomainToParams(binding, signature, presentation, ruleOverlay, traitOverlay, catalog) {
7709
7709
  const warnings = [];
7710
7710
  const params = {};
7711
7711
  applyEntityName(binding.entity, signature, params);
@@ -7713,6 +7713,8 @@ function translateDomainToParams(binding, signature, presentation) {
7713
7713
  applyPersistence(binding.entity, signature, params, warnings);
7714
7714
  applyPagePaths(binding.pages ?? [], signature, params, warnings);
7715
7715
  applyPresentation(presentation, signature, params, warnings);
7716
+ applyTraitOverlay(traitOverlay, signature, params, warnings);
7717
+ applyRuleOverlay(ruleOverlay, signature, binding, catalog, params, warnings);
7716
7718
  return {
7717
7719
  callSite: {
7718
7720
  organism: signature.organism,
@@ -7801,6 +7803,165 @@ function applyPresentation(overlay, signature, params, warnings) {
7801
7803
  }
7802
7804
  };
7803
7805
  }
7806
+ function applyTraitOverlay(overlay, signature, params, warnings) {
7807
+ if (!overlay) return;
7808
+ const traitsByName = new Map(signature.traits.map((t) => [t.name, t]));
7809
+ for (const [traitName, entry] of Object.entries(overlay)) {
7810
+ const trait = traitsByName.get(traitName);
7811
+ if (!trait) {
7812
+ warnings.push({
7813
+ field: `traitOverlay.${traitName}`,
7814
+ reason: `factory signature has no trait named "${traitName}"`
7815
+ });
7816
+ continue;
7817
+ }
7818
+ mergeTraitOverride(traitName, entry, trait, params, warnings);
7819
+ }
7820
+ }
7821
+ function mergeTraitOverride(traitName, entry, trait, params, warnings) {
7822
+ const advertised = new Set(trait.overridableConfigKeys);
7823
+ const existing = params.traitOverrides?.[traitName] ?? {};
7824
+ const existingConfig = existing.config ?? {};
7825
+ const mergedConfig = { ...existingConfig };
7826
+ if (entry.config) {
7827
+ for (const [k, v] of Object.entries(entry.config)) {
7828
+ if (!advertised.has(k)) {
7829
+ warnings.push({
7830
+ field: `traitOverlay.${traitName}.config.${k}`,
7831
+ reason: `trait does not advertise config key "${k}" (overridableConfigKeys: [${trait.overridableConfigKeys.join(", ")}])`
7832
+ });
7833
+ continue;
7834
+ }
7835
+ mergedConfig[k] = v;
7836
+ }
7837
+ }
7838
+ const next = {
7839
+ ...existing,
7840
+ ...Object.keys(mergedConfig).length > 0 ? { config: mergedConfig } : {}
7841
+ };
7842
+ params.traitOverrides = {
7843
+ ...params.traitOverrides,
7844
+ [traitName]: next
7845
+ };
7846
+ }
7847
+ function applyRuleOverlay(overlay, signature, binding, catalog, params, warnings) {
7848
+ if (!overlay) return;
7849
+ for (const rule of overlay.rules) {
7850
+ if (!ruleAppliesToBinding(rule, binding)) continue;
7851
+ if (!catalog) {
7852
+ warnings.push({
7853
+ field: `ruleOverlay.rules.${rule.id}`,
7854
+ reason: "rule overlay supplied without a catalog \u2014 capability lookup requires one"
7855
+ });
7856
+ continue;
7857
+ }
7858
+ const match = findTraitByCapability(catalog, rule.capability);
7859
+ if (!match) {
7860
+ warnings.push({
7861
+ field: `ruleOverlay.rules.${rule.id}`,
7862
+ reason: `no trait in the catalog advertises capability "${rule.capability}"`
7863
+ });
7864
+ continue;
7865
+ }
7866
+ appendRuleExtraTrait(rule, match, binding, params);
7867
+ if (rule.config) {
7868
+ threadRuleConfig(rule, match.trait, params, warnings);
7869
+ }
7870
+ }
7871
+ if (overlay.ownership) {
7872
+ for (const entry of overlay.ownership) {
7873
+ if (entry.entity !== binding.entity.name) continue;
7874
+ applyOwnership(entry, params, signature, catalog, warnings);
7875
+ }
7876
+ }
7877
+ }
7878
+ function ruleAppliesToBinding(rule, binding) {
7879
+ if (rule.appliesTo.length === 0) return true;
7880
+ return rule.appliesTo.includes(binding.entity.name);
7881
+ }
7882
+ function findTraitByCapability(catalog, capability) {
7883
+ for (const sig of catalog) {
7884
+ for (const trait of sig.traits) {
7885
+ if (trait.capabilities.includes(capability)) {
7886
+ return { signature: sig, trait };
7887
+ }
7888
+ }
7889
+ }
7890
+ return void 0;
7891
+ }
7892
+ function appendRuleExtraTrait(rule, match, binding, params) {
7893
+ const fromPath = `std/behaviors/${match.signature.organism}`;
7894
+ const alias = organismToAlias(match.signature.organism);
7895
+ const ref2 = {
7896
+ from: fromPath,
7897
+ ref: `${alias}.traits.${match.trait.name}`,
7898
+ linkedEntity: binding.entity.name
7899
+ };
7900
+ const existing = params.extraTraits ?? [];
7901
+ params.extraTraits = [...existing, ref2];
7902
+ }
7903
+ function organismToAlias(organism) {
7904
+ const trimmed = organism.startsWith("std-") ? organism.slice(4) : organism;
7905
+ return trimmed.split("-").filter((s) => s.length > 0).map((s) => s.charAt(0).toUpperCase() + s.slice(1)).join("");
7906
+ }
7907
+ function threadRuleConfig(rule, trait, params, warnings) {
7908
+ if (!rule.config) return;
7909
+ const advertised = new Set(trait.overridableConfigKeys);
7910
+ const existing = params.traitOverrides?.[trait.name] ?? {};
7911
+ const existingConfig = existing.config ?? {};
7912
+ const merged = { ...existingConfig };
7913
+ for (const [k, v] of Object.entries(rule.config)) {
7914
+ if (!advertised.has(k)) {
7915
+ warnings.push({
7916
+ field: `ruleOverlay.rules.${rule.id}.config.${k}`,
7917
+ reason: `trait "${trait.name}" does not advertise config key "${k}"`
7918
+ });
7919
+ continue;
7920
+ }
7921
+ merged[k] = v;
7922
+ }
7923
+ if (Object.keys(merged).length > 0) {
7924
+ params.traitOverrides = {
7925
+ ...params.traitOverrides,
7926
+ [trait.name]: { ...existing, config: merged }
7927
+ };
7928
+ }
7929
+ }
7930
+ function applyOwnership(entry, params, signature, catalog, warnings) {
7931
+ const local = signature.traits.find(
7932
+ (t) => t.overridableConfigKeys.includes("ownerField")
7933
+ );
7934
+ if (local) {
7935
+ writeOwnerField(local.name, entry.ownerField, params);
7936
+ return;
7937
+ }
7938
+ if (catalog) {
7939
+ for (const sig of catalog) {
7940
+ const trait = sig.traits.find(
7941
+ (t) => t.overridableConfigKeys.includes("ownerField")
7942
+ );
7943
+ if (trait) {
7944
+ writeOwnerField(trait.name, entry.ownerField, params);
7945
+ return;
7946
+ }
7947
+ }
7948
+ }
7949
+ warnings.push({
7950
+ field: `ruleOverlay.ownership.${entry.entity}`,
7951
+ reason: "no trait in the bound signature or catalog advertises an `ownerField` config knob"
7952
+ });
7953
+ }
7954
+ function writeOwnerField(traitName, ownerField, params) {
7955
+ const existing = params.traitOverrides?.[traitName] ?? {};
7956
+ const existingConfig = existing.config ?? {};
7957
+ params.traitOverrides = {
7958
+ ...params.traitOverrides,
7959
+ [traitName]: {
7960
+ ...existing,
7961
+ config: { ...existingConfig, ownerField }
7962
+ }
7963
+ };
7964
+ }
7804
7965
  function lowerField(f) {
7805
7966
  const schemaType = DOMAIN_TO_SCHEMA_FIELD_TYPE[f.fieldType];
7806
7967
  if (!schemaType) return void 0;