@almadar/std 3.10.0 → 3.11.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.
Files changed (41) hide show
  1. package/dist/behaviors/exports-reader.d.ts +4 -31
  2. package/dist/behaviors/exports-reader.js +21267 -40
  3. package/dist/behaviors/exports-reader.js.map +1 -1
  4. package/dist/behaviors/functions/index.js.map +1 -1
  5. package/dist/behaviors/index.js +1042 -617
  6. package/dist/behaviors/index.js.map +1 -1
  7. package/dist/behaviors/query.d.ts +6 -5
  8. package/dist/behaviors/query.js +21293 -29
  9. package/dist/behaviors/query.js.map +1 -1
  10. package/dist/behaviors/types.d.ts +7 -14
  11. package/dist/behaviors/types.js.map +1 -1
  12. package/dist/index.d.ts +2 -2
  13. package/dist/index.js +1367 -616
  14. package/dist/index.js.map +1 -1
  15. package/dist/modules/agent.d.ts +21 -0
  16. package/dist/modules/agent.js +322 -0
  17. package/dist/modules/agent.js.map +1 -0
  18. package/dist/modules/array.d.ts +1 -1
  19. package/dist/modules/async.d.ts +1 -1
  20. package/dist/modules/contract.d.ts +1 -1
  21. package/dist/modules/data.d.ts +1 -1
  22. package/dist/modules/format.d.ts +1 -1
  23. package/dist/modules/graph.d.ts +1 -1
  24. package/dist/modules/index.d.ts +2 -1
  25. package/dist/modules/index.js +320 -1
  26. package/dist/modules/index.js.map +1 -1
  27. package/dist/modules/math.d.ts +1 -1
  28. package/dist/modules/nn.d.ts +1 -1
  29. package/dist/modules/object.d.ts +1 -1
  30. package/dist/modules/os.d.ts +1 -1
  31. package/dist/modules/prob.d.ts +1 -1
  32. package/dist/modules/str.d.ts +1 -1
  33. package/dist/modules/tensor.d.ts +1 -1
  34. package/dist/modules/time.d.ts +1 -1
  35. package/dist/modules/train.d.ts +1 -1
  36. package/dist/modules/validate.d.ts +1 -1
  37. package/dist/registry.d.ts +1 -1
  38. package/dist/registry.js +321 -2
  39. package/dist/registry.js.map +1 -1
  40. package/dist/{types-DOeGXRCm.d.ts → types-BjP5nVQd.d.ts} +3 -3
  41. package/package.json +2 -2
@@ -1,4 +1,4 @@
1
- import { Effect, TraitCategory, Trait, SExpr } from '@almadar/core/types';
1
+ import { Effect, TraitCategory, OrbitalSchema, Trait, SExpr } from '@almadar/core/types';
2
2
  export { Effect, Entity, Event, Expression, Guard, Orbital, OrbitalSchema, State, StateMachine, Trait, TraitCategory, TraitDataEntity, TraitEntityField, TraitTick, Transition } from '@almadar/core/types';
3
3
 
4
4
  /**
@@ -11,22 +11,15 @@ export { Effect, Entity, Event, Expression, Guard, Orbital, OrbitalSchema, State
11
11
  */
12
12
 
13
13
  /**
14
- * Behavior schemas use raw UI tree objects in render-ui effects (e.g. { type: 'stack', ... })
15
- * rather than strict AnyPatternConfig. Schema correctness is validated by `orbital validate`.
14
+ * @deprecated Use `Effect` from `@almadar/core` directly.
15
+ * Kept for backward compatibility only.
16
16
  */
17
- type BehaviorEffect = Effect | ['render-ui', string, Record<string, unknown>] | ['render-ui', string, Record<string, unknown>, Record<string, unknown>] | ['render-ui', string, null];
17
+ type BehaviorEffect = Effect;
18
18
  /**
19
- * Behavior schemas may include a `theme` property and use raw UI trees in effects.
20
- * This type provides basic shape checking while deferring strict validation to `orbital validate`.
19
+ * @deprecated Use `OrbitalSchema` from `@almadar/core` directly.
20
+ * Kept for backward compatibility only.
21
21
  */
22
- interface BehaviorSchema {
23
- name: string;
24
- description?: string;
25
- theme?: Record<string, unknown>;
26
- entities?: Record<string, unknown>[];
27
- orbitals?: Record<string, unknown>[];
28
- [key: string]: unknown;
29
- }
22
+ type BehaviorSchema = OrbitalSchema;
30
23
  /**
31
24
  * @deprecated Use OrbitalSchema directly. BehaviorTrait is kept for backward compatibility.
32
25
  */
@@ -1 +1 @@
1
- {"version":3,"sources":["../../behaviors/types.ts"],"names":[],"mappings":"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","file":"types.js","sourcesContent":["/**\n * Standard Behaviors Types\n *\n * Standard Behaviors are reusable OrbitalSchema definitions with a `std-` naming convention.\n * Each behavior is a self-contained .orb file that can function independently.\n *\n * @packageDocumentation\n */\n\nimport type {\n SExpr,\n RequiredField,\n Effect,\n Expression,\n Trait,\n TraitCategory,\n StateMachine,\n State,\n Event,\n Transition,\n Guard,\n TraitTick,\n TraitDataEntity,\n TraitEntityField,\n TraitEventListener,\n OrbitalSchema,\n Orbital,\n Entity,\n} from '@almadar/core/types';\n\n// Re-export core types for use in behaviors\nexport type {\n Effect,\n Expression,\n Trait,\n StateMachine,\n State,\n Event,\n Transition,\n Guard,\n TraitTick,\n TraitDataEntity,\n TraitEntityField,\n TraitCategory,\n OrbitalSchema,\n Orbital,\n Entity,\n};\n\n// ============================================================================\n// Behavior-local types (permissive wrappers for schema authoring)\n// ============================================================================\n\n/**\n * Behavior schemas use raw UI tree objects in render-ui effects (e.g. { type: 'stack', ... })\n * rather than strict AnyPatternConfig. Schema correctness is validated by `orbital validate`.\n */\nexport type BehaviorEffect = Effect | ['render-ui', string, Record<string, unknown>] | ['render-ui', string, Record<string, unknown>, Record<string, unknown>] | ['render-ui', string, null];\n\n/**\n * Behavior schemas may include a `theme` property and use raw UI trees in effects.\n * This type provides basic shape checking while deferring strict validation to `orbital validate`.\n */\nexport interface BehaviorSchema {\n name: string;\n description?: string;\n theme?: Record<string, unknown>;\n entities?: Record<string, unknown>[];\n orbitals?: Record<string, unknown>[];\n [key: string]: unknown;\n}\n\n// ============================================================================\n// Legacy Type Aliases (for backward compatibility only)\n// ============================================================================\n\n/**\n * @deprecated Use OrbitalSchema directly. BehaviorTrait is kept for backward compatibility.\n */\nexport type BehaviorTrait = Trait;\n\n// ============================================================================\n// Item Action (for render_ui props)\n// ============================================================================\n\nexport interface ItemAction {\n label: string;\n event?: string;\n navigatesTo?: string;\n placement?: 'row' | 'bulk' | 'card' | 'footer' | 'header';\n variant?: 'primary' | 'secondary' | 'ghost' | 'danger';\n showWhen?: SExpr | string;\n}\n\n// ============================================================================\n// Behavior Metadata (for quick lookup and documentation)\n// ============================================================================\n\n/**\n * Behavior metadata extracted from a Trait for documentation purposes\n */\nexport interface BehaviorMetadata {\n name: string;\n category?: TraitCategory;\n description: string;\n states: string[];\n events: string[];\n tickCount: number;\n transitionCount: number;\n hasDataEntities: boolean;\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Extract metadata from a BehaviorTrait for documentation\n */\nexport function getBehaviorMetadata(behavior: BehaviorTrait): BehaviorMetadata {\n const sm = behavior.stateMachine;\n\n // Core types: State is always an object with name\n const states: string[] = (sm?.states || []).map(s => s.name);\n\n // Core types: Event is always an object with key\n const events: string[] = (sm?.events || []).map(e => e.key);\n\n return {\n name: behavior.name,\n category: behavior.category,\n description: behavior.description || '',\n states,\n events,\n tickCount: behavior.ticks?.length || 0,\n transitionCount: sm?.transitions?.length || 0,\n hasDataEntities: (behavior.dataEntities?.length || 0) > 0,\n };\n}\n\n/**\n * Validate behavior structure\n */\nexport function validateBehaviorStructure(behavior: BehaviorTrait): string[] {\n const errors: string[] = [];\n\n if (!behavior.name) {\n errors.push('Behavior must have a name');\n }\n\n if (!behavior.name.startsWith('std/')) {\n errors.push(`Behavior name should start with 'std/' (got: ${behavior.name})`);\n }\n\n const sm = behavior.stateMachine;\n if (sm) {\n if (!sm.states || sm.states.length === 0) {\n errors.push('State machine must have at least one state');\n }\n\n // Core types: check initial state using isInitial flag on State\n const hasInitialState = sm.states?.some(s => s.isInitial);\n if (!hasInitialState) {\n errors.push('State machine must have an initial state (set isInitial: true on one state)');\n }\n }\n\n return errors;\n}\n\n/**\n * Validate behavior events match transitions\n */\nexport function validateBehaviorEvents(behavior: BehaviorTrait): string[] {\n const errors: string[] = [];\n const sm = behavior.stateMachine;\n if (!sm) return errors;\n\n // Core types: Event is always an object with key\n const declaredEvents = new Set(\n (sm.events || []).map(e => e.key)\n );\n\n const transitionEvents = new Set(\n (sm.transitions || []).map(t => t.event)\n );\n\n for (const event of transitionEvents) {\n if (event && !declaredEvents.has(event)) {\n errors.push(`Transition uses undeclared event: ${event}`);\n }\n }\n\n return errors;\n}\n\n/**\n * Validate behavior states match transitions\n */\nexport function validateBehaviorStates(behavior: BehaviorTrait): string[] {\n const errors: string[] = [];\n const sm = behavior.stateMachine;\n if (!sm) return errors;\n\n // Core types: State is always an object with name\n const declaredStates = new Set(\n (sm.states || []).map(s => s.name)\n );\n\n for (const t of sm.transitions || []) {\n // Core types: from and to are both strings\n if (t.from && !declaredStates.has(t.from)) {\n errors.push(`Transition from undeclared state: ${t.from}`);\n }\n\n if (t.to && !declaredStates.has(t.to)) {\n errors.push(`Transition to undeclared state: ${t.to}`);\n }\n }\n\n return errors;\n}\n"]}
1
+ {"version":3,"sources":["../../behaviors/types.ts"],"names":[],"mappings":"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","file":"types.js","sourcesContent":["/**\n * Standard Behaviors Types\n *\n * Standard Behaviors are reusable OrbitalSchema definitions with a `std-` naming convention.\n * Each behavior is a self-contained .orb file that can function independently.\n *\n * @packageDocumentation\n */\n\nimport type {\n SExpr,\n RequiredField,\n Effect,\n Expression,\n Trait,\n TraitCategory,\n StateMachine,\n State,\n Event,\n Transition,\n Guard,\n TraitTick,\n TraitDataEntity,\n TraitEntityField,\n TraitEventListener,\n OrbitalSchema,\n Orbital,\n Entity,\n} from '@almadar/core/types';\n\n// Re-export core types for use in behaviors\nexport type {\n Effect,\n Expression,\n Trait,\n StateMachine,\n State,\n Event,\n Transition,\n Guard,\n TraitTick,\n TraitDataEntity,\n TraitEntityField,\n TraitCategory,\n OrbitalSchema,\n Orbital,\n Entity,\n};\n\n// ============================================================================\n// Behavior-local type aliases (use core types directly)\n// ============================================================================\n\n/**\n * @deprecated Use `Effect` from `@almadar/core` directly.\n * Kept for backward compatibility only.\n */\nexport type BehaviorEffect = Effect;\n\n/**\n * @deprecated Use `OrbitalSchema` from `@almadar/core` directly.\n * Kept for backward compatibility only.\n */\nexport type BehaviorSchema = OrbitalSchema;\n\n// ============================================================================\n// Legacy Type Aliases (for backward compatibility only)\n// ============================================================================\n\n/**\n * @deprecated Use OrbitalSchema directly. BehaviorTrait is kept for backward compatibility.\n */\nexport type BehaviorTrait = Trait;\n\n// ============================================================================\n// Item Action (for render_ui props)\n// ============================================================================\n\nexport interface ItemAction {\n label: string;\n event?: string;\n navigatesTo?: string;\n placement?: 'row' | 'bulk' | 'card' | 'footer' | 'header';\n variant?: 'primary' | 'secondary' | 'ghost' | 'danger';\n showWhen?: SExpr | string;\n}\n\n// ============================================================================\n// Behavior Metadata (for quick lookup and documentation)\n// ============================================================================\n\n/**\n * Behavior metadata extracted from a Trait for documentation purposes\n */\nexport interface BehaviorMetadata {\n name: string;\n category?: TraitCategory;\n description: string;\n states: string[];\n events: string[];\n tickCount: number;\n transitionCount: number;\n hasDataEntities: boolean;\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Extract metadata from a BehaviorTrait for documentation\n */\nexport function getBehaviorMetadata(behavior: BehaviorTrait): BehaviorMetadata {\n const sm = behavior.stateMachine;\n\n // Core types: State is always an object with name\n const states: string[] = (sm?.states || []).map(s => s.name);\n\n // Core types: Event is always an object with key\n const events: string[] = (sm?.events || []).map(e => e.key);\n\n return {\n name: behavior.name,\n category: behavior.category,\n description: behavior.description || '',\n states,\n events,\n tickCount: behavior.ticks?.length || 0,\n transitionCount: sm?.transitions?.length || 0,\n hasDataEntities: (behavior.dataEntities?.length || 0) > 0,\n };\n}\n\n/**\n * Validate behavior structure\n */\nexport function validateBehaviorStructure(behavior: BehaviorTrait): string[] {\n const errors: string[] = [];\n\n if (!behavior.name) {\n errors.push('Behavior must have a name');\n }\n\n if (!behavior.name.startsWith('std/')) {\n errors.push(`Behavior name should start with 'std/' (got: ${behavior.name})`);\n }\n\n const sm = behavior.stateMachine;\n if (sm) {\n if (!sm.states || sm.states.length === 0) {\n errors.push('State machine must have at least one state');\n }\n\n // Core types: check initial state using isInitial flag on State\n const hasInitialState = sm.states?.some(s => s.isInitial);\n if (!hasInitialState) {\n errors.push('State machine must have an initial state (set isInitial: true on one state)');\n }\n }\n\n return errors;\n}\n\n/**\n * Validate behavior events match transitions\n */\nexport function validateBehaviorEvents(behavior: BehaviorTrait): string[] {\n const errors: string[] = [];\n const sm = behavior.stateMachine;\n if (!sm) return errors;\n\n // Core types: Event is always an object with key\n const declaredEvents = new Set(\n (sm.events || []).map(e => e.key)\n );\n\n const transitionEvents = new Set(\n (sm.transitions || []).map(t => t.event)\n );\n\n for (const event of transitionEvents) {\n if (event && !declaredEvents.has(event)) {\n errors.push(`Transition uses undeclared event: ${event}`);\n }\n }\n\n return errors;\n}\n\n/**\n * Validate behavior states match transitions\n */\nexport function validateBehaviorStates(behavior: BehaviorTrait): string[] {\n const errors: string[] = [];\n const sm = behavior.stateMachine;\n if (!sm) return errors;\n\n // Core types: State is always an object with name\n const declaredStates = new Set(\n (sm.states || []).map(s => s.name)\n );\n\n for (const t of sm.transitions || []) {\n // Core types: from and to are both strings\n if (t.from && !declaredStates.has(t.from)) {\n errors.push(`Transition from undeclared state: ${t.from}`);\n }\n\n if (t.to && !declaredStates.has(t.to)) {\n errors.push(`Transition to undeclared state: ${t.to}`);\n }\n }\n\n return errors;\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { S as StdModule, a as StdOperatorMeta } from './types-DOeGXRCm.js';
2
- export { b as STD_MODULES, c as STD_OPERATOR_CATEGORIES, d as StdOperatorCategory, g as getFunctionFromOperator, e as getModuleFromOperator, i as isStdCategory, f as isStdOperator, m as makeStdOperator } from './types-DOeGXRCm.js';
1
+ import { S as StdModule, a as StdOperatorMeta } from './types-BjP5nVQd.js';
2
+ export { b as STD_MODULES, c as STD_OPERATOR_CATEGORIES, d as StdOperatorCategory, g as getFunctionFromOperator, e as getModuleFromOperator, i as isStdCategory, f as isStdOperator, m as makeStdOperator } from './types-BjP5nVQd.js';
3
3
  export { STD_OPERATORS, STD_OPERATORS_BY_MODULE, getAllStdOperators, getLambdaOperators, getModuleOperators, getOperatorMetaExtended, getStdEffectOperators, getStdLibStats, getStdOperatorMeta, getStdOperatorsByModule, getStdPureOperators, isEffectOperatorExtended, isKnownOperatorExtended, isKnownStdOperator, isStdEffectOperator, isStdGuardOperator, validateOperatorArityExtended, validateStdOperatorArity } from './registry.js';
4
4
  export { MATH_OPERATORS } from './modules/math.js';
5
5
  export { STR_OPERATORS } from './modules/str.js';