@higher.archi/boe 1.0.27 → 1.0.29

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 (56) hide show
  1. package/dist/engines/decay/compiler.d.ts +11 -0
  2. package/dist/engines/decay/compiler.d.ts.map +1 -0
  3. package/dist/engines/decay/compiler.js +216 -0
  4. package/dist/engines/decay/compiler.js.map +1 -0
  5. package/dist/engines/decay/engine.d.ts +79 -0
  6. package/dist/engines/decay/engine.d.ts.map +1 -0
  7. package/dist/engines/decay/engine.js +159 -0
  8. package/dist/engines/decay/engine.js.map +1 -0
  9. package/dist/engines/decay/index.d.ts +9 -0
  10. package/dist/engines/decay/index.d.ts.map +1 -0
  11. package/dist/engines/decay/index.js +21 -0
  12. package/dist/engines/decay/index.js.map +1 -0
  13. package/dist/engines/decay/strategy.d.ts +21 -0
  14. package/dist/engines/decay/strategy.d.ts.map +1 -0
  15. package/dist/engines/decay/strategy.js +308 -0
  16. package/dist/engines/decay/strategy.js.map +1 -0
  17. package/dist/engines/decay/types.d.ts +157 -0
  18. package/dist/engines/decay/types.d.ts.map +1 -0
  19. package/dist/engines/decay/types.js +39 -0
  20. package/dist/engines/decay/types.js.map +1 -0
  21. package/dist/engines/negotiation/compiler.d.ts +11 -0
  22. package/dist/engines/negotiation/compiler.d.ts.map +1 -0
  23. package/dist/engines/negotiation/compiler.js +177 -0
  24. package/dist/engines/negotiation/compiler.js.map +1 -0
  25. package/dist/engines/negotiation/engine.d.ts +46 -0
  26. package/dist/engines/negotiation/engine.d.ts.map +1 -0
  27. package/dist/engines/negotiation/engine.js +88 -0
  28. package/dist/engines/negotiation/engine.js.map +1 -0
  29. package/dist/engines/negotiation/index.d.ts +8 -0
  30. package/dist/engines/negotiation/index.d.ts.map +1 -0
  31. package/dist/engines/negotiation/index.js +17 -0
  32. package/dist/engines/negotiation/index.js.map +1 -0
  33. package/dist/engines/negotiation/strategy.d.ts +18 -0
  34. package/dist/engines/negotiation/strategy.d.ts.map +1 -0
  35. package/dist/engines/negotiation/strategy.js +439 -0
  36. package/dist/engines/negotiation/strategy.js.map +1 -0
  37. package/dist/engines/negotiation/types.d.ts +179 -0
  38. package/dist/engines/negotiation/types.d.ts.map +1 -0
  39. package/dist/engines/negotiation/types.js +10 -0
  40. package/dist/engines/negotiation/types.js.map +1 -0
  41. package/dist/index.d.ts +6 -0
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +22 -6
  44. package/dist/index.js.map +1 -1
  45. package/package.json +1 -1
  46. package/src/engines/decay/compiler.ts +276 -0
  47. package/src/engines/decay/engine.ts +211 -0
  48. package/src/engines/decay/index.ts +43 -0
  49. package/src/engines/decay/strategy.ts +433 -0
  50. package/src/engines/decay/types.ts +231 -0
  51. package/src/engines/negotiation/compiler.ts +229 -0
  52. package/src/engines/negotiation/engine.ts +117 -0
  53. package/src/engines/negotiation/index.ts +42 -0
  54. package/src/engines/negotiation/strategy.ts +587 -0
  55. package/src/engines/negotiation/types.ts +244 -0
  56. package/src/index.ts +69 -0
@@ -0,0 +1,308 @@
1
+ "use strict";
2
+ /**
3
+ * Decay Engine Strategy
4
+ *
5
+ * Core execution logic for all decay strategies:
6
+ * - single-dimension: One temporal axis evaluated per entity
7
+ * - multi-dimension: Multiple temporal axes aggregated into a composite score
8
+ * - event-driven: Multi-dimension with re-engagement events that reset/boost/extend decay
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.decayStrategy = exports.DecayExecutor = void 0;
12
+ const decay_1 = require("../../core/evaluation/decay");
13
+ const types_1 = require("./types");
14
+ const MS_PER_DAY = 86_400_000;
15
+ class DecayExecutor {
16
+ /** Score a single entity fact directly (no WorkingMemory scan) */
17
+ scoreEntity(fact, ruleSet, asOf = new Date()) {
18
+ const entityId = resolveEntityId(fact, ruleSet.entityIdField);
19
+ if (ruleSet.strategy === 'single-dimension') {
20
+ const dimResult = computeDimensionDecay(fact, ruleSet.dimension, asOf);
21
+ return {
22
+ entityId,
23
+ compositeFreshness: dimResult.freshnessScore,
24
+ urgencyTier: (0, types_1.resolveUrgencyTier)(dimResult.freshnessScore, ruleSet.urgencyThresholds),
25
+ dimensions: [dimResult]
26
+ };
27
+ }
28
+ // multi-dimension or event-driven (without WM-based re-engagement events)
29
+ const dimensions = ruleSet.strategy === 'event-driven' ? ruleSet.dimensions : ruleSet.dimensions;
30
+ const aggregation = ruleSet.aggregation;
31
+ const dimResults = dimensions.map(dim => computeDimensionDecay(fact, dim, asOf));
32
+ const compositeFreshness = aggregateFreshness(dimResults, dimensions, aggregation);
33
+ return {
34
+ entityId,
35
+ compositeFreshness,
36
+ urgencyTier: (0, types_1.resolveUrgencyTier)(compositeFreshness, ruleSet.urgencyThresholds),
37
+ dimensions: dimResults
38
+ };
39
+ }
40
+ run(ruleSet, wm, options = {}) {
41
+ const startTime = performance.now();
42
+ const asOf = options.asOf ?? new Date();
43
+ let entities;
44
+ switch (ruleSet.strategy) {
45
+ case 'single-dimension':
46
+ entities = this.runSingleDimension(ruleSet, wm, asOf, options);
47
+ break;
48
+ case 'multi-dimension':
49
+ entities = this.runMultiDimension(ruleSet, wm, asOf, options);
50
+ break;
51
+ case 'event-driven':
52
+ entities = this.runEventDriven(ruleSet, wm, asOf, options);
53
+ break;
54
+ default:
55
+ throw new Error(`Unknown decay strategy: '${ruleSet.strategy}'`);
56
+ }
57
+ const executionTimeMs = Math.round((performance.now() - startTime) * 100) / 100;
58
+ // Build tier distribution
59
+ const tierDistribution = {
60
+ critical: 0,
61
+ high: 0,
62
+ medium: 0,
63
+ low: 0,
64
+ stale: 0
65
+ };
66
+ for (const entity of entities) {
67
+ tierDistribution[entity.urgencyTier]++;
68
+ }
69
+ return {
70
+ entities,
71
+ totalEntities: entities.length,
72
+ strategy: ruleSet.strategy,
73
+ tierDistribution,
74
+ executionTimeMs
75
+ };
76
+ }
77
+ // ========================================
78
+ // Single-Dimension Strategy
79
+ // ========================================
80
+ runSingleDimension(ruleSet, wm, asOf, options) {
81
+ const entityFacts = wm.getByType(ruleSet.entityType);
82
+ if (entityFacts.length === 0)
83
+ return [];
84
+ const results = [];
85
+ for (const fact of entityFacts) {
86
+ const entityId = resolveEntityId(fact, ruleSet.entityIdField);
87
+ const dimResult = computeDimensionDecay(fact, ruleSet.dimension, asOf);
88
+ const entity = {
89
+ entityId,
90
+ compositeFreshness: dimResult.freshnessScore,
91
+ urgencyTier: (0, types_1.resolveUrgencyTier)(dimResult.freshnessScore, ruleSet.urgencyThresholds),
92
+ dimensions: [dimResult]
93
+ };
94
+ if (options.onEntity) {
95
+ options.onEntity(entity);
96
+ }
97
+ results.push(entity);
98
+ }
99
+ return results;
100
+ }
101
+ // ========================================
102
+ // Multi-Dimension Strategy
103
+ // ========================================
104
+ runMultiDimension(ruleSet, wm, asOf, options) {
105
+ const entityFacts = wm.getByType(ruleSet.entityType);
106
+ if (entityFacts.length === 0)
107
+ return [];
108
+ const results = [];
109
+ for (const fact of entityFacts) {
110
+ const entityId = resolveEntityId(fact, ruleSet.entityIdField);
111
+ const dimResults = ruleSet.dimensions.map(dim => computeDimensionDecay(fact, dim, asOf));
112
+ const compositeFreshness = aggregateFreshness(dimResults, ruleSet.dimensions, ruleSet.aggregation);
113
+ const entity = {
114
+ entityId,
115
+ compositeFreshness,
116
+ urgencyTier: (0, types_1.resolveUrgencyTier)(compositeFreshness, ruleSet.urgencyThresholds),
117
+ dimensions: dimResults
118
+ };
119
+ if (options.onEntity) {
120
+ options.onEntity(entity);
121
+ }
122
+ results.push(entity);
123
+ }
124
+ return results;
125
+ }
126
+ // ========================================
127
+ // Event-Driven Strategy
128
+ // ========================================
129
+ runEventDriven(ruleSet, wm, asOf, options) {
130
+ const entityFacts = wm.getByType(ruleSet.entityType);
131
+ if (entityFacts.length === 0)
132
+ return [];
133
+ const results = [];
134
+ for (const fact of entityFacts) {
135
+ const entityId = resolveEntityId(fact, ruleSet.entityIdField);
136
+ const reEngagements = [];
137
+ // Build adjusted fact data by applying re-engagement rules
138
+ const adjustedData = { ...fact.data };
139
+ for (const rule of ruleSet.reEngagementRules) {
140
+ // Scan WM for events matching this rule's eventType that reference this entity
141
+ const events = wm.getByType(rule.eventType);
142
+ const matchingEvents = events.filter(e => e.data?.entityId === entityId || e.data?.targetId === entityId);
143
+ if (matchingEvents.length === 0)
144
+ continue;
145
+ // Use the most recent matching event
146
+ const latestEvent = matchingEvents.reduce((latest, e) => {
147
+ const latestTime = latest.data?.timestamp ? new Date(latest.data.timestamp).getTime() : 0;
148
+ const currentTime = e.data?.timestamp ? new Date(e.data.timestamp).getTime() : 0;
149
+ return currentTime > latestTime ? e : latest;
150
+ });
151
+ const eventTimestamp = latestEvent.data?.timestamp
152
+ ? new Date(latestEvent.data.timestamp).toISOString()
153
+ : asOf.toISOString();
154
+ // Apply effect to each dimension's timestamp field
155
+ for (const dim of ruleSet.dimensions) {
156
+ const originalTimestamp = adjustedData[dim.timestampField];
157
+ if (!originalTimestamp)
158
+ continue;
159
+ const originalDate = new Date(originalTimestamp);
160
+ const config = {
161
+ curve: dim.curve,
162
+ timeUnit: dim.timeUnit,
163
+ halfLife: dim.halfLife,
164
+ maxAge: dim.maxAge,
165
+ threshold: dim.threshold,
166
+ floor: dim.floor
167
+ };
168
+ const baseFreshness = (0, decay_1.calculateDecayMultiplier)(originalDate, asOf, config).multiplier;
169
+ let adjustedFreshness = baseFreshness;
170
+ switch (rule.effect) {
171
+ case 'reset':
172
+ // Use the event timestamp instead of the original
173
+ adjustedData[dim.timestampField] = eventTimestamp;
174
+ adjustedFreshness = (0, decay_1.calculateDecayMultiplier)(new Date(eventTimestamp), asOf, config).multiplier;
175
+ break;
176
+ case 'boost':
177
+ // Add boost amount, clamp to 1.0
178
+ adjustedFreshness = Math.min(1.0, baseFreshness + (rule.boostAmount ?? 0));
179
+ break;
180
+ case 'extend':
181
+ // Push original timestamp forward by extensionDays
182
+ const extendedDate = new Date(originalDate.getTime() + (rule.extensionDays ?? 0) * MS_PER_DAY);
183
+ adjustedData[dim.timestampField] = extendedDate.toISOString();
184
+ adjustedFreshness = (0, decay_1.calculateDecayMultiplier)(extendedDate, asOf, config).multiplier;
185
+ break;
186
+ }
187
+ reEngagements.push({
188
+ ruleId: rule.id,
189
+ eventType: rule.eventType,
190
+ effect: rule.effect,
191
+ appliedAt: eventTimestamp,
192
+ freshnessBeforeBoost: baseFreshness,
193
+ freshnessAfterBoost: adjustedFreshness
194
+ });
195
+ }
196
+ }
197
+ // Compute dimension decay using adjusted data
198
+ const adjustedFact = { ...fact, data: adjustedData };
199
+ const dimResults = ruleSet.dimensions.map(dim => computeDimensionDecay(adjustedFact, dim, asOf));
200
+ // For boost effect, override freshness from re-engagement records
201
+ for (const reEng of reEngagements) {
202
+ if (reEng.effect === 'boost') {
203
+ // Find the matching dimension result and override its freshness
204
+ for (const dimResult of dimResults) {
205
+ // Apply the boosted freshness to the dimension
206
+ const originalFreshness = dimResult.freshnessScore;
207
+ if (originalFreshness === reEng.freshnessBeforeBoost) {
208
+ dimResult.freshnessScore = reEng.freshnessAfterBoost;
209
+ dimResult.fullyDecayed = dimResult.freshnessScore <= 0;
210
+ }
211
+ }
212
+ }
213
+ }
214
+ const compositeFreshness = aggregateFreshness(dimResults, ruleSet.dimensions, ruleSet.aggregation);
215
+ const entity = {
216
+ entityId,
217
+ compositeFreshness,
218
+ urgencyTier: (0, types_1.resolveUrgencyTier)(compositeFreshness, ruleSet.urgencyThresholds),
219
+ dimensions: dimResults,
220
+ reEngagements: reEngagements.length > 0 ? reEngagements : undefined
221
+ };
222
+ if (options.onEntity) {
223
+ options.onEntity(entity);
224
+ }
225
+ results.push(entity);
226
+ }
227
+ return results;
228
+ }
229
+ }
230
+ exports.DecayExecutor = DecayExecutor;
231
+ // ========================================
232
+ // Module-Level Helpers
233
+ // ========================================
234
+ function resolveEntityId(fact, entityIdField) {
235
+ return fact.data?.[entityIdField] ?? fact.id;
236
+ }
237
+ function computeDimensionDecay(fact, dimension, asOf) {
238
+ const timestampValue = fact.data?.[dimension.timestampField];
239
+ // If no timestamp found, treat as fully decayed
240
+ if (timestampValue === null || timestampValue === undefined) {
241
+ return {
242
+ dimensionId: dimension.id,
243
+ dimensionName: dimension.name,
244
+ freshnessScore: dimension.floor ?? 0,
245
+ ageInUnits: Infinity,
246
+ curve: dimension.curve,
247
+ timestamp: '',
248
+ fullyDecayed: true
249
+ };
250
+ }
251
+ const dataTimestamp = new Date(timestampValue);
252
+ if (isNaN(dataTimestamp.getTime())) {
253
+ return {
254
+ dimensionId: dimension.id,
255
+ dimensionName: dimension.name,
256
+ freshnessScore: dimension.floor ?? 0,
257
+ ageInUnits: Infinity,
258
+ curve: dimension.curve,
259
+ timestamp: String(timestampValue),
260
+ fullyDecayed: true
261
+ };
262
+ }
263
+ const config = {
264
+ curve: dimension.curve,
265
+ timeUnit: dimension.timeUnit,
266
+ halfLife: dimension.halfLife,
267
+ maxAge: dimension.maxAge,
268
+ threshold: dimension.threshold,
269
+ floor: dimension.floor
270
+ };
271
+ const decayInfo = (0, decay_1.calculateDecayMultiplier)(dataTimestamp, asOf, config);
272
+ return {
273
+ dimensionId: dimension.id,
274
+ dimensionName: dimension.name,
275
+ freshnessScore: decayInfo.multiplier,
276
+ ageInUnits: decayInfo.ageInUnits,
277
+ curve: decayInfo.curve,
278
+ timestamp: decayInfo.timestamp,
279
+ fullyDecayed: decayInfo.fullyDecayed
280
+ };
281
+ }
282
+ function aggregateFreshness(dimResults, dimensions, aggregation) {
283
+ switch (aggregation) {
284
+ case 'weighted-average': {
285
+ let sum = 0;
286
+ for (let i = 0; i < dimResults.length; i++) {
287
+ sum += dimResults[i].freshnessScore * dimensions[i].weight;
288
+ }
289
+ return sum;
290
+ }
291
+ case 'minimum':
292
+ return Math.min(...dimResults.map(d => d.freshnessScore));
293
+ case 'geometric-mean': {
294
+ // Weighted geometric mean: exp(sum(weight * ln(freshness)))
295
+ let weightedLogSum = 0;
296
+ for (let i = 0; i < dimResults.length; i++) {
297
+ const freshness = Math.max(dimResults[i].freshnessScore, 1e-10); // avoid log(0)
298
+ weightedLogSum += dimensions[i].weight * Math.log(freshness);
299
+ }
300
+ return Math.exp(weightedLogSum);
301
+ }
302
+ default:
303
+ throw new Error(`Unknown aggregation: '${aggregation}'`);
304
+ }
305
+ }
306
+ /** Singleton instance */
307
+ exports.decayStrategy = new DecayExecutor();
308
+ //# sourceMappingURL=strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../../src/engines/decay/strategy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Decay Engine Types
3
+ *
4
+ * Temporal decay engine that computes freshness scores for entities based
5
+ * on how recently their data was updated. Supports single-dimension,
6
+ * multi-dimension, and event-driven decay strategies.
7
+ */
8
+ import type { DecayCurve, DecayTimeUnit } from '../../core/evaluation/decay';
9
+ import type { SemanticPriority } from '../utility/types';
10
+ /** Decay strategy to use */
11
+ export type DecayStrategy = 'single-dimension' | 'multi-dimension' | 'event-driven';
12
+ /** Urgency tier based on freshness score */
13
+ export type UrgencyTier = 'critical' | 'high' | 'medium' | 'low' | 'stale';
14
+ /** Effect applied when a re-engagement event is detected */
15
+ export type ReEngagementEffect = 'reset' | 'boost' | 'extend';
16
+ /** Aggregation method for combining multi-dimension freshness scores */
17
+ export type DecayAggregation = 'weighted-average' | 'minimum' | 'geometric-mean';
18
+ /** Default urgency tier thresholds (freshness score boundaries) */
19
+ export declare const URGENCY_THRESHOLDS: Record<UrgencyTier, number>;
20
+ /** Map a freshness score (0-1) to an urgency tier */
21
+ export declare function resolveUrgencyTier(freshness: number, thresholds?: Partial<Record<UrgencyTier, number>>): UrgencyTier;
22
+ /** A decay dimension -- a single temporal axis to evaluate */
23
+ export type DecayDimension = {
24
+ id: string;
25
+ name?: string;
26
+ timestampField: string;
27
+ curve: DecayCurve;
28
+ timeUnit: DecayTimeUnit;
29
+ halfLife?: number;
30
+ maxAge?: number;
31
+ threshold?: number;
32
+ floor?: number;
33
+ weight: number | SemanticPriority;
34
+ };
35
+ /** Compiled dimension with resolved numeric weight */
36
+ export type CompiledDecayDimension = {
37
+ id: string;
38
+ name?: string;
39
+ timestampField: string;
40
+ curve: DecayCurve;
41
+ timeUnit: DecayTimeUnit;
42
+ halfLife?: number;
43
+ maxAge?: number;
44
+ threshold?: number;
45
+ floor?: number;
46
+ weight: number;
47
+ };
48
+ /** A rule that adjusts decay when a re-engagement event is detected */
49
+ export type ReEngagementRule = {
50
+ id: string;
51
+ eventType: string;
52
+ effect: ReEngagementEffect;
53
+ boostAmount?: number;
54
+ extensionDays?: number;
55
+ };
56
+ type DecayRuleSetBase = {
57
+ id: string;
58
+ name?: string;
59
+ mode: 'decay';
60
+ entityType: string;
61
+ entityIdField?: string;
62
+ urgencyThresholds?: Partial<Record<UrgencyTier, number>>;
63
+ };
64
+ /** Single-dimension strategy: one temporal axis */
65
+ export type SingleDimensionDecayRuleSet = DecayRuleSetBase & {
66
+ strategy: 'single-dimension';
67
+ dimension: DecayDimension;
68
+ };
69
+ /** Multi-dimension strategy: multiple temporal axes aggregated together */
70
+ export type MultiDimensionDecayRuleSet = DecayRuleSetBase & {
71
+ strategy: 'multi-dimension';
72
+ dimensions: DecayDimension[];
73
+ aggregation?: DecayAggregation;
74
+ };
75
+ /** Event-driven strategy: multi-dimension with re-engagement rules */
76
+ export type EventDrivenDecayRuleSet = DecayRuleSetBase & {
77
+ strategy: 'event-driven';
78
+ dimensions: DecayDimension[];
79
+ aggregation?: DecayAggregation;
80
+ reEngagementRules: ReEngagementRule[];
81
+ };
82
+ export type DecayRuleSet = SingleDimensionDecayRuleSet | MultiDimensionDecayRuleSet | EventDrivenDecayRuleSet;
83
+ type CompiledDecayRuleSetBase = {
84
+ id: string;
85
+ name?: string;
86
+ mode: 'decay';
87
+ entityType: string;
88
+ entityIdField: string;
89
+ urgencyThresholds: Record<UrgencyTier, number>;
90
+ };
91
+ export type CompiledSingleDimensionDecayRuleSet = CompiledDecayRuleSetBase & {
92
+ strategy: 'single-dimension';
93
+ dimension: CompiledDecayDimension;
94
+ };
95
+ export type CompiledMultiDimensionDecayRuleSet = CompiledDecayRuleSetBase & {
96
+ strategy: 'multi-dimension';
97
+ dimensions: CompiledDecayDimension[];
98
+ aggregation: DecayAggregation;
99
+ };
100
+ export type CompiledEventDrivenDecayRuleSet = CompiledDecayRuleSetBase & {
101
+ strategy: 'event-driven';
102
+ dimensions: CompiledDecayDimension[];
103
+ aggregation: DecayAggregation;
104
+ reEngagementRules: ReEngagementRule[];
105
+ };
106
+ export type CompiledDecayRuleSet = CompiledSingleDimensionDecayRuleSet | CompiledMultiDimensionDecayRuleSet | CompiledEventDrivenDecayRuleSet;
107
+ /** Per-dimension decay result */
108
+ export type DimensionDecayResult = {
109
+ dimensionId: string;
110
+ dimensionName?: string;
111
+ freshnessScore: number;
112
+ ageInUnits: number;
113
+ curve: DecayCurve;
114
+ timestamp: string;
115
+ fullyDecayed: boolean;
116
+ };
117
+ /** Record of a re-engagement event that was applied */
118
+ export type ReEngagementEvent = {
119
+ ruleId: string;
120
+ eventType: string;
121
+ effect: ReEngagementEffect;
122
+ appliedAt: string;
123
+ freshnessBeforeBoost: number;
124
+ freshnessAfterBoost: number;
125
+ };
126
+ /** Per-entity decay result */
127
+ export type EntityDecayResult = {
128
+ entityId: string;
129
+ compositeFreshness: number;
130
+ urgencyTier: UrgencyTier;
131
+ dimensions: DimensionDecayResult[];
132
+ reEngagements?: ReEngagementEvent[];
133
+ };
134
+ /** Full decay execution result */
135
+ export type DecayResult = {
136
+ entities: EntityDecayResult[];
137
+ totalEntities: number;
138
+ strategy: DecayStrategy;
139
+ tierDistribution: Record<UrgencyTier, number>;
140
+ executionTimeMs: number;
141
+ };
142
+ /** Runtime options for decay execution */
143
+ export type DecayOptions = {
144
+ asOf?: Date;
145
+ onEntity?: (entity: EntityDecayResult) => void;
146
+ };
147
+ /** Result from ingest() -- includes individual entity result and running aggregate */
148
+ export type DecayIngestResult = EntityDecayResult & {
149
+ /** Running tier distribution across all ingested entities */
150
+ tierDistribution: Record<UrgencyTier, number>;
151
+ /** Running average freshness across all ingested entities */
152
+ averageFreshness: number;
153
+ /** Total number of entities ingested so far */
154
+ totalIngested: number;
155
+ };
156
+ export {};
157
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/engines/decay/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ /**
3
+ * Decay Engine Types
4
+ *
5
+ * Temporal decay engine that computes freshness scores for entities based
6
+ * on how recently their data was updated. Supports single-dimension,
7
+ * multi-dimension, and event-driven decay strategies.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.URGENCY_THRESHOLDS = void 0;
11
+ exports.resolveUrgencyTier = resolveUrgencyTier;
12
+ // ========================================
13
+ // Constants
14
+ // ========================================
15
+ /** Default urgency tier thresholds (freshness score boundaries) */
16
+ exports.URGENCY_THRESHOLDS = {
17
+ 'critical': 0.8,
18
+ 'high': 0.6,
19
+ 'medium': 0.4,
20
+ 'low': 0.2,
21
+ 'stale': 0
22
+ };
23
+ // ========================================
24
+ // Resolver Functions
25
+ // ========================================
26
+ /** Map a freshness score (0-1) to an urgency tier */
27
+ function resolveUrgencyTier(freshness, thresholds) {
28
+ const t = { ...exports.URGENCY_THRESHOLDS, ...thresholds };
29
+ if (freshness >= t.critical)
30
+ return 'critical';
31
+ if (freshness >= t.high)
32
+ return 'high';
33
+ if (freshness >= t.medium)
34
+ return 'medium';
35
+ if (freshness >= t.low)
36
+ return 'low';
37
+ return 'stale';
38
+ }
39
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/engines/decay/types.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAuCH,gDAUC;AA5BD,2CAA2C;AAC3C,YAAY;AACZ,2CAA2C;AAE3C,mEAAmE;AACtD,QAAA,kBAAkB,GAAgC;IAC7D,UAAU,EAAE,GAAG;IACf,MAAM,EAAE,GAAG;IACX,QAAQ,EAAE,GAAG;IACb,KAAK,EAAE,GAAG;IACV,OAAO,EAAE,CAAC;CACX,CAAC;AAEF,2CAA2C;AAC3C,qBAAqB;AACrB,2CAA2C;AAE3C,qDAAqD;AACrD,SAAgB,kBAAkB,CAChC,SAAiB,EACjB,UAAiD;IAEjD,MAAM,CAAC,GAAG,EAAE,GAAG,0BAAkB,EAAE,GAAG,UAAU,EAAE,CAAC;IACnD,IAAI,SAAS,IAAI,CAAC,CAAC,QAAQ;QAAE,OAAO,UAAU,CAAC;IAC/C,IAAI,SAAS,IAAI,CAAC,CAAC,IAAI;QAAE,OAAO,MAAM,CAAC;IACvC,IAAI,SAAS,IAAI,CAAC,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IAC3C,IAAI,SAAS,IAAI,CAAC,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACrC,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Negotiation Engine Compiler
3
+ *
4
+ * Validates negotiation rulesets and resolves defaults.
5
+ */
6
+ import type { NegotiationRuleSet, CompiledNegotiationRuleSet } from './types';
7
+ /**
8
+ * Compile and validate a negotiation ruleset.
9
+ */
10
+ export declare function compileNegotiationRuleSet(ruleSet: NegotiationRuleSet): CompiledNegotiationRuleSet;
11
+ //# sourceMappingURL=compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../../src/engines/negotiation/compiler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EACV,kBAAkB,EAClB,0BAA0B,EAO3B,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,kBAAkB,GAC1B,0BAA0B,CAkG5B"}