@higher.archi/boe 1.0.26 → 1.0.28

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 (74) 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 +48 -0
  6. package/dist/engines/decay/engine.d.ts.map +1 -0
  7. package/dist/engines/decay/engine.js +90 -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 +19 -0
  14. package/dist/engines/decay/strategy.d.ts.map +1 -0
  15. package/dist/engines/decay/strategy.js +284 -0
  16. package/dist/engines/decay/strategy.js.map +1 -0
  17. package/dist/engines/decay/types.d.ts +148 -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/engines/sentiment/engine.d.ts +25 -1
  42. package/dist/engines/sentiment/engine.d.ts.map +1 -1
  43. package/dist/engines/sentiment/engine.js +119 -0
  44. package/dist/engines/sentiment/engine.js.map +1 -1
  45. package/dist/engines/sentiment/index.d.ts +1 -1
  46. package/dist/engines/sentiment/index.d.ts.map +1 -1
  47. package/dist/engines/sentiment/index.js.map +1 -1
  48. package/dist/engines/sentiment/strategy.d.ts +2 -0
  49. package/dist/engines/sentiment/strategy.d.ts.map +1 -1
  50. package/dist/engines/sentiment/strategy.js +7 -8
  51. package/dist/engines/sentiment/strategy.js.map +1 -1
  52. package/dist/engines/sentiment/types.d.ts +9 -0
  53. package/dist/engines/sentiment/types.d.ts.map +1 -1
  54. package/dist/engines/sentiment/types.js.map +1 -1
  55. package/dist/index.d.ts +7 -1
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +22 -6
  58. package/dist/index.js.map +1 -1
  59. package/package.json +1 -1
  60. package/src/engines/decay/compiler.ts +276 -0
  61. package/src/engines/decay/engine.ts +119 -0
  62. package/src/engines/decay/index.ts +42 -0
  63. package/src/engines/decay/strategy.ts +400 -0
  64. package/src/engines/decay/types.ts +221 -0
  65. package/src/engines/negotiation/compiler.ts +229 -0
  66. package/src/engines/negotiation/engine.ts +117 -0
  67. package/src/engines/negotiation/index.ts +42 -0
  68. package/src/engines/negotiation/strategy.ts +587 -0
  69. package/src/engines/negotiation/types.ts +244 -0
  70. package/src/engines/sentiment/engine.ts +157 -1
  71. package/src/engines/sentiment/index.ts +2 -1
  72. package/src/engines/sentiment/strategy.ts +12 -9
  73. package/src/engines/sentiment/types.ts +10 -0
  74. package/src/index.ts +70 -1
@@ -0,0 +1,284 @@
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
+ run(ruleSet, wm, options = {}) {
17
+ const startTime = performance.now();
18
+ const asOf = options.asOf ?? new Date();
19
+ let entities;
20
+ switch (ruleSet.strategy) {
21
+ case 'single-dimension':
22
+ entities = this.runSingleDimension(ruleSet, wm, asOf, options);
23
+ break;
24
+ case 'multi-dimension':
25
+ entities = this.runMultiDimension(ruleSet, wm, asOf, options);
26
+ break;
27
+ case 'event-driven':
28
+ entities = this.runEventDriven(ruleSet, wm, asOf, options);
29
+ break;
30
+ default:
31
+ throw new Error(`Unknown decay strategy: '${ruleSet.strategy}'`);
32
+ }
33
+ const executionTimeMs = Math.round((performance.now() - startTime) * 100) / 100;
34
+ // Build tier distribution
35
+ const tierDistribution = {
36
+ critical: 0,
37
+ high: 0,
38
+ medium: 0,
39
+ low: 0,
40
+ stale: 0
41
+ };
42
+ for (const entity of entities) {
43
+ tierDistribution[entity.urgencyTier]++;
44
+ }
45
+ return {
46
+ entities,
47
+ totalEntities: entities.length,
48
+ strategy: ruleSet.strategy,
49
+ tierDistribution,
50
+ executionTimeMs
51
+ };
52
+ }
53
+ // ========================================
54
+ // Single-Dimension Strategy
55
+ // ========================================
56
+ runSingleDimension(ruleSet, wm, asOf, options) {
57
+ const entityFacts = wm.getByType(ruleSet.entityType);
58
+ if (entityFacts.length === 0)
59
+ return [];
60
+ const results = [];
61
+ for (const fact of entityFacts) {
62
+ const entityId = resolveEntityId(fact, ruleSet.entityIdField);
63
+ const dimResult = computeDimensionDecay(fact, ruleSet.dimension, asOf);
64
+ const entity = {
65
+ entityId,
66
+ compositeFreshness: dimResult.freshnessScore,
67
+ urgencyTier: (0, types_1.resolveUrgencyTier)(dimResult.freshnessScore, ruleSet.urgencyThresholds),
68
+ dimensions: [dimResult]
69
+ };
70
+ if (options.onEntity) {
71
+ options.onEntity(entity);
72
+ }
73
+ results.push(entity);
74
+ }
75
+ return results;
76
+ }
77
+ // ========================================
78
+ // Multi-Dimension Strategy
79
+ // ========================================
80
+ runMultiDimension(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 dimResults = ruleSet.dimensions.map(dim => computeDimensionDecay(fact, dim, asOf));
88
+ const compositeFreshness = aggregateFreshness(dimResults, ruleSet.dimensions, ruleSet.aggregation);
89
+ const entity = {
90
+ entityId,
91
+ compositeFreshness,
92
+ urgencyTier: (0, types_1.resolveUrgencyTier)(compositeFreshness, ruleSet.urgencyThresholds),
93
+ dimensions: dimResults
94
+ };
95
+ if (options.onEntity) {
96
+ options.onEntity(entity);
97
+ }
98
+ results.push(entity);
99
+ }
100
+ return results;
101
+ }
102
+ // ========================================
103
+ // Event-Driven Strategy
104
+ // ========================================
105
+ runEventDriven(ruleSet, wm, asOf, options) {
106
+ const entityFacts = wm.getByType(ruleSet.entityType);
107
+ if (entityFacts.length === 0)
108
+ return [];
109
+ const results = [];
110
+ for (const fact of entityFacts) {
111
+ const entityId = resolveEntityId(fact, ruleSet.entityIdField);
112
+ const reEngagements = [];
113
+ // Build adjusted fact data by applying re-engagement rules
114
+ const adjustedData = { ...fact.data };
115
+ for (const rule of ruleSet.reEngagementRules) {
116
+ // Scan WM for events matching this rule's eventType that reference this entity
117
+ const events = wm.getByType(rule.eventType);
118
+ const matchingEvents = events.filter(e => e.data?.entityId === entityId || e.data?.targetId === entityId);
119
+ if (matchingEvents.length === 0)
120
+ continue;
121
+ // Use the most recent matching event
122
+ const latestEvent = matchingEvents.reduce((latest, e) => {
123
+ const latestTime = latest.data?.timestamp ? new Date(latest.data.timestamp).getTime() : 0;
124
+ const currentTime = e.data?.timestamp ? new Date(e.data.timestamp).getTime() : 0;
125
+ return currentTime > latestTime ? e : latest;
126
+ });
127
+ const eventTimestamp = latestEvent.data?.timestamp
128
+ ? new Date(latestEvent.data.timestamp).toISOString()
129
+ : asOf.toISOString();
130
+ // Apply effect to each dimension's timestamp field
131
+ for (const dim of ruleSet.dimensions) {
132
+ const originalTimestamp = adjustedData[dim.timestampField];
133
+ if (!originalTimestamp)
134
+ continue;
135
+ const originalDate = new Date(originalTimestamp);
136
+ const config = {
137
+ curve: dim.curve,
138
+ timeUnit: dim.timeUnit,
139
+ halfLife: dim.halfLife,
140
+ maxAge: dim.maxAge,
141
+ threshold: dim.threshold,
142
+ floor: dim.floor
143
+ };
144
+ const baseFreshness = (0, decay_1.calculateDecayMultiplier)(originalDate, asOf, config).multiplier;
145
+ let adjustedFreshness = baseFreshness;
146
+ switch (rule.effect) {
147
+ case 'reset':
148
+ // Use the event timestamp instead of the original
149
+ adjustedData[dim.timestampField] = eventTimestamp;
150
+ adjustedFreshness = (0, decay_1.calculateDecayMultiplier)(new Date(eventTimestamp), asOf, config).multiplier;
151
+ break;
152
+ case 'boost':
153
+ // Add boost amount, clamp to 1.0
154
+ adjustedFreshness = Math.min(1.0, baseFreshness + (rule.boostAmount ?? 0));
155
+ break;
156
+ case 'extend':
157
+ // Push original timestamp forward by extensionDays
158
+ const extendedDate = new Date(originalDate.getTime() + (rule.extensionDays ?? 0) * MS_PER_DAY);
159
+ adjustedData[dim.timestampField] = extendedDate.toISOString();
160
+ adjustedFreshness = (0, decay_1.calculateDecayMultiplier)(extendedDate, asOf, config).multiplier;
161
+ break;
162
+ }
163
+ reEngagements.push({
164
+ ruleId: rule.id,
165
+ eventType: rule.eventType,
166
+ effect: rule.effect,
167
+ appliedAt: eventTimestamp,
168
+ freshnessBeforeBoost: baseFreshness,
169
+ freshnessAfterBoost: adjustedFreshness
170
+ });
171
+ }
172
+ }
173
+ // Compute dimension decay using adjusted data
174
+ const adjustedFact = { ...fact, data: adjustedData };
175
+ const dimResults = ruleSet.dimensions.map(dim => computeDimensionDecay(adjustedFact, dim, asOf));
176
+ // For boost effect, override freshness from re-engagement records
177
+ for (const reEng of reEngagements) {
178
+ if (reEng.effect === 'boost') {
179
+ // Find the matching dimension result and override its freshness
180
+ for (const dimResult of dimResults) {
181
+ // Apply the boosted freshness to the dimension
182
+ const originalFreshness = dimResult.freshnessScore;
183
+ if (originalFreshness === reEng.freshnessBeforeBoost) {
184
+ dimResult.freshnessScore = reEng.freshnessAfterBoost;
185
+ dimResult.fullyDecayed = dimResult.freshnessScore <= 0;
186
+ }
187
+ }
188
+ }
189
+ }
190
+ const compositeFreshness = aggregateFreshness(dimResults, ruleSet.dimensions, ruleSet.aggregation);
191
+ const entity = {
192
+ entityId,
193
+ compositeFreshness,
194
+ urgencyTier: (0, types_1.resolveUrgencyTier)(compositeFreshness, ruleSet.urgencyThresholds),
195
+ dimensions: dimResults,
196
+ reEngagements: reEngagements.length > 0 ? reEngagements : undefined
197
+ };
198
+ if (options.onEntity) {
199
+ options.onEntity(entity);
200
+ }
201
+ results.push(entity);
202
+ }
203
+ return results;
204
+ }
205
+ }
206
+ exports.DecayExecutor = DecayExecutor;
207
+ // ========================================
208
+ // Module-Level Helpers
209
+ // ========================================
210
+ function resolveEntityId(fact, entityIdField) {
211
+ return fact.data?.[entityIdField] ?? fact.id;
212
+ }
213
+ function computeDimensionDecay(fact, dimension, asOf) {
214
+ const timestampValue = fact.data?.[dimension.timestampField];
215
+ // If no timestamp found, treat as fully decayed
216
+ if (timestampValue === null || timestampValue === undefined) {
217
+ return {
218
+ dimensionId: dimension.id,
219
+ dimensionName: dimension.name,
220
+ freshnessScore: dimension.floor ?? 0,
221
+ ageInUnits: Infinity,
222
+ curve: dimension.curve,
223
+ timestamp: '',
224
+ fullyDecayed: true
225
+ };
226
+ }
227
+ const dataTimestamp = new Date(timestampValue);
228
+ if (isNaN(dataTimestamp.getTime())) {
229
+ return {
230
+ dimensionId: dimension.id,
231
+ dimensionName: dimension.name,
232
+ freshnessScore: dimension.floor ?? 0,
233
+ ageInUnits: Infinity,
234
+ curve: dimension.curve,
235
+ timestamp: String(timestampValue),
236
+ fullyDecayed: true
237
+ };
238
+ }
239
+ const config = {
240
+ curve: dimension.curve,
241
+ timeUnit: dimension.timeUnit,
242
+ halfLife: dimension.halfLife,
243
+ maxAge: dimension.maxAge,
244
+ threshold: dimension.threshold,
245
+ floor: dimension.floor
246
+ };
247
+ const decayInfo = (0, decay_1.calculateDecayMultiplier)(dataTimestamp, asOf, config);
248
+ return {
249
+ dimensionId: dimension.id,
250
+ dimensionName: dimension.name,
251
+ freshnessScore: decayInfo.multiplier,
252
+ ageInUnits: decayInfo.ageInUnits,
253
+ curve: decayInfo.curve,
254
+ timestamp: decayInfo.timestamp,
255
+ fullyDecayed: decayInfo.fullyDecayed
256
+ };
257
+ }
258
+ function aggregateFreshness(dimResults, dimensions, aggregation) {
259
+ switch (aggregation) {
260
+ case 'weighted-average': {
261
+ let sum = 0;
262
+ for (let i = 0; i < dimResults.length; i++) {
263
+ sum += dimResults[i].freshnessScore * dimensions[i].weight;
264
+ }
265
+ return sum;
266
+ }
267
+ case 'minimum':
268
+ return Math.min(...dimResults.map(d => d.freshnessScore));
269
+ case 'geometric-mean': {
270
+ // Weighted geometric mean: exp(sum(weight * ln(freshness)))
271
+ let weightedLogSum = 0;
272
+ for (let i = 0; i < dimResults.length; i++) {
273
+ const freshness = Math.max(dimResults[i].freshnessScore, 1e-10); // avoid log(0)
274
+ weightedLogSum += dimensions[i].weight * Math.log(freshness);
275
+ }
276
+ return Math.exp(weightedLogSum);
277
+ }
278
+ default:
279
+ throw new Error(`Unknown aggregation: '${aggregation}'`);
280
+ }
281
+ }
282
+ /** Singleton instance */
283
+ exports.decayStrategy = new DecayExecutor();
284
+ //# 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,148 @@
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
+ export {};
148
+ //# 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"}