dino-spec 15.0.0 → 16.1.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/README.md +58 -1
- package/dist/cli/index.js +46 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/dashboard.d.ts +27 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +80 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/debug.d.ts +53 -0
- package/dist/commands/debug.d.ts.map +1 -0
- package/dist/commands/debug.js +199 -0
- package/dist/commands/debug.js.map +1 -0
- package/dist/commands/profile.d.ts +37 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +145 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/commands/recommendations.d.ts +27 -0
- package/dist/commands/recommendations.d.ts.map +1 -0
- package/dist/commands/recommendations.js +123 -0
- package/dist/commands/recommendations.js.map +1 -0
- package/dist/core/checkpoints/checkpoint.d.ts +1 -0
- package/dist/core/checkpoints/checkpoint.d.ts.map +1 -1
- package/dist/core/checkpoints/checkpoint.js.map +1 -1
- package/dist/core/checkpoints/handoff.d.ts +2 -1
- package/dist/core/checkpoints/handoff.d.ts.map +1 -1
- package/dist/core/checkpoints/handoff.js +2 -1
- package/dist/core/checkpoints/handoff.js.map +1 -1
- package/dist/core/checkpoints/session-recovery.d.ts +71 -0
- package/dist/core/checkpoints/session-recovery.d.ts.map +1 -0
- package/dist/core/checkpoints/session-recovery.js +172 -0
- package/dist/core/checkpoints/session-recovery.js.map +1 -0
- package/dist/core/config/feature-flags.d.ts +84 -0
- package/dist/core/config/feature-flags.d.ts.map +1 -1
- package/dist/core/config/feature-flags.js +18 -0
- package/dist/core/config/feature-flags.js.map +1 -1
- package/dist/core/context/__tests__/feedback-loop-engine.test.d.ts +5 -0
- package/dist/core/context/__tests__/feedback-loop-engine.test.d.ts.map +1 -0
- package/dist/core/context/__tests__/feedback-loop-engine.test.js +377 -0
- package/dist/core/context/__tests__/feedback-loop-engine.test.js.map +1 -0
- package/dist/core/context/adaptation-strategy.d.ts +125 -0
- package/dist/core/context/adaptation-strategy.d.ts.map +1 -0
- package/dist/core/context/adaptation-strategy.js +233 -0
- package/dist/core/context/adaptation-strategy.js.map +1 -0
- package/dist/core/context/auto-injection-engine.d.ts.map +1 -1
- package/dist/core/context/auto-injection-engine.js +21 -0
- package/dist/core/context/auto-injection-engine.js.map +1 -1
- package/dist/core/context/auto-unload-engine.d.ts +20 -2
- package/dist/core/context/auto-unload-engine.d.ts.map +1 -1
- package/dist/core/context/auto-unload-engine.js +78 -5
- package/dist/core/context/auto-unload-engine.js.map +1 -1
- package/dist/core/context/budget-thresholds.d.ts +75 -1
- package/dist/core/context/budget-thresholds.d.ts.map +1 -1
- package/dist/core/context/budget-thresholds.js +163 -2
- package/dist/core/context/budget-thresholds.js.map +1 -1
- package/dist/core/context/context-health.d.ts.map +1 -1
- package/dist/core/context/context-health.js +24 -0
- package/dist/core/context/context-health.js.map +1 -1
- package/dist/core/context/demand-detector.d.ts +34 -1
- package/dist/core/context/demand-detector.d.ts.map +1 -1
- package/dist/core/context/demand-detector.js +162 -1
- package/dist/core/context/demand-detector.js.map +1 -1
- package/dist/core/context/demand-signal-patterns.d.ts +120 -0
- package/dist/core/context/demand-signal-patterns.d.ts.map +1 -0
- package/dist/core/context/demand-signal-patterns.js +418 -0
- package/dist/core/context/demand-signal-patterns.js.map +1 -0
- package/dist/core/context/feedback-loop-engine.d.ts +128 -0
- package/dist/core/context/feedback-loop-engine.d.ts.map +1 -0
- package/dist/core/context/feedback-loop-engine.js +352 -0
- package/dist/core/context/feedback-loop-engine.js.map +1 -0
- package/dist/core/context/index.d.ts +5 -3
- package/dist/core/context/index.d.ts.map +1 -1
- package/dist/core/context/index.js +26 -6
- package/dist/core/context/index.js.map +1 -1
- package/dist/core/context/prefetch-learner.d.ts +195 -0
- package/dist/core/context/prefetch-learner.d.ts.map +1 -0
- package/dist/core/context/prefetch-learner.js +363 -0
- package/dist/core/context/prefetch-learner.js.map +1 -0
- package/dist/core/context/semantic-signal-detector.d.ts +96 -0
- package/dist/core/context/semantic-signal-detector.d.ts.map +1 -0
- package/dist/core/context/semantic-signal-detector.js +320 -0
- package/dist/core/context/semantic-signal-detector.js.map +1 -0
- package/dist/core/context/smart-prefetch-engine.d.ts +66 -0
- package/dist/core/context/smart-prefetch-engine.d.ts.map +1 -0
- package/dist/core/context/smart-prefetch-engine.js +226 -0
- package/dist/core/context/smart-prefetch-engine.js.map +1 -0
- package/dist/core/context/token-tracker.d.ts +9 -0
- package/dist/core/context/token-tracker.d.ts.map +1 -1
- package/dist/core/context/token-tracker.js +14 -0
- package/dist/core/context/token-tracker.js.map +1 -1
- package/dist/core/context/window-boundary.d.ts +132 -0
- package/dist/core/context/window-boundary.d.ts.map +1 -0
- package/dist/core/context/window-boundary.js +268 -0
- package/dist/core/context/window-boundary.js.map +1 -0
- package/dist/core/context-repl/confidence-scorer.d.ts +92 -0
- package/dist/core/context-repl/confidence-scorer.d.ts.map +1 -0
- package/dist/core/context-repl/confidence-scorer.js +159 -0
- package/dist/core/context-repl/confidence-scorer.js.map +1 -0
- package/dist/core/context-repl/reconnaissance-engine.d.ts +160 -0
- package/dist/core/context-repl/reconnaissance-engine.d.ts.map +1 -0
- package/dist/core/context-repl/reconnaissance-engine.js +275 -0
- package/dist/core/context-repl/reconnaissance-engine.js.map +1 -0
- package/dist/core/dashboard/dashboard-formatter.d.ts +68 -0
- package/dist/core/dashboard/dashboard-formatter.d.ts.map +1 -0
- package/dist/core/dashboard/dashboard-formatter.js +250 -0
- package/dist/core/dashboard/dashboard-formatter.js.map +1 -0
- package/dist/core/dashboard/health-metrics-aggregator.d.ts +117 -0
- package/dist/core/dashboard/health-metrics-aggregator.d.ts.map +1 -0
- package/dist/core/dashboard/health-metrics-aggregator.js +255 -0
- package/dist/core/dashboard/health-metrics-aggregator.js.map +1 -0
- package/dist/core/debug/context-decision-logger.d.ts +189 -0
- package/dist/core/debug/context-decision-logger.d.ts.map +1 -0
- package/dist/core/debug/context-decision-logger.js +397 -0
- package/dist/core/debug/context-decision-logger.js.map +1 -0
- package/dist/core/debug/debug-config.d.ts +100 -0
- package/dist/core/debug/debug-config.d.ts.map +1 -0
- package/dist/core/debug/debug-config.js +193 -0
- package/dist/core/debug/debug-config.js.map +1 -0
- package/dist/core/debug/debug-logger.d.ts +85 -0
- package/dist/core/debug/debug-logger.d.ts.map +1 -0
- package/dist/core/debug/debug-logger.js +287 -0
- package/dist/core/debug/debug-logger.js.map +1 -0
- package/dist/core/debug/index.d.ts +10 -0
- package/dist/core/debug/index.d.ts.map +1 -0
- package/dist/core/debug/index.js +13 -0
- package/dist/core/debug/index.js.map +1 -0
- package/dist/core/embeddings/content-indexer.d.ts +169 -0
- package/dist/core/embeddings/content-indexer.d.ts.map +1 -0
- package/dist/core/embeddings/content-indexer.js +317 -0
- package/dist/core/embeddings/content-indexer.js.map +1 -0
- package/dist/core/embeddings/index.d.ts +2 -0
- package/dist/core/embeddings/index.d.ts.map +1 -1
- package/dist/core/embeddings/index.js +4 -0
- package/dist/core/embeddings/index.js.map +1 -1
- package/dist/core/embeddings/semantic-cache.d.ts +162 -0
- package/dist/core/embeddings/semantic-cache.d.ts.map +1 -0
- package/dist/core/embeddings/semantic-cache.js +317 -0
- package/dist/core/embeddings/semantic-cache.js.map +1 -0
- package/dist/core/generator/session-md.d.ts +31 -1
- package/dist/core/generator/session-md.d.ts.map +1 -1
- package/dist/core/generator/session-md.js +63 -1
- package/dist/core/generator/session-md.js.map +1 -1
- package/dist/core/memory/retrieval.d.ts +7 -1
- package/dist/core/memory/retrieval.d.ts.map +1 -1
- package/dist/core/memory/retrieval.js +7 -1
- package/dist/core/memory/retrieval.js.map +1 -1
- package/dist/core/metrics/__tests__/metrics-collector.test.d.ts +5 -0
- package/dist/core/metrics/__tests__/metrics-collector.test.d.ts.map +1 -0
- package/dist/core/metrics/__tests__/metrics-collector.test.js +354 -0
- package/dist/core/metrics/__tests__/metrics-collector.test.js.map +1 -0
- package/dist/core/metrics/index.d.ts +9 -0
- package/dist/core/metrics/index.d.ts.map +1 -0
- package/dist/core/metrics/index.js +29 -0
- package/dist/core/metrics/index.js.map +1 -0
- package/dist/core/metrics/metrics-collector.d.ts +153 -0
- package/dist/core/metrics/metrics-collector.d.ts.map +1 -0
- package/dist/core/metrics/metrics-collector.js +446 -0
- package/dist/core/metrics/metrics-collector.js.map +1 -0
- package/dist/core/metrics/metrics-schema.d.ts +189 -0
- package/dist/core/metrics/metrics-schema.d.ts.map +1 -0
- package/dist/core/metrics/metrics-schema.js +180 -0
- package/dist/core/metrics/metrics-schema.js.map +1 -0
- package/dist/core/profiling/index.d.ts +8 -0
- package/dist/core/profiling/index.d.ts.map +1 -0
- package/dist/core/profiling/index.js +8 -0
- package/dist/core/profiling/index.js.map +1 -0
- package/dist/core/profiling/operation-profiler.d.ts +118 -0
- package/dist/core/profiling/operation-profiler.d.ts.map +1 -0
- package/dist/core/profiling/operation-profiler.js +266 -0
- package/dist/core/profiling/operation-profiler.js.map +1 -0
- package/dist/core/profiling/perf-report-generator.d.ts +46 -0
- package/dist/core/profiling/perf-report-generator.d.ts.map +1 -0
- package/dist/core/profiling/perf-report-generator.js +235 -0
- package/dist/core/profiling/perf-report-generator.js.map +1 -0
- package/dist/core/recommendations/heuristics.d.ts +120 -0
- package/dist/core/recommendations/heuristics.d.ts.map +1 -0
- package/dist/core/recommendations/heuristics.js +771 -0
- package/dist/core/recommendations/heuristics.js.map +1 -0
- package/dist/core/recommendations/priority-scorer.d.ts +75 -0
- package/dist/core/recommendations/priority-scorer.d.ts.map +1 -0
- package/dist/core/recommendations/priority-scorer.js +148 -0
- package/dist/core/recommendations/priority-scorer.js.map +1 -0
- package/dist/core/recommendations/recommendation-engine.d.ts +60 -0
- package/dist/core/recommendations/recommendation-engine.d.ts.map +1 -0
- package/dist/core/recommendations/recommendation-engine.js +271 -0
- package/dist/core/recommendations/recommendation-engine.js.map +1 -0
- package/dist/hooks/pre-compact.d.ts +9 -1
- package/dist/hooks/pre-compact.d.ts.map +1 -1
- package/dist/hooks/pre-compact.js +93 -1
- package/dist/hooks/pre-compact.js.map +1 -1
- package/dist/hooks/session-start.d.ts +5 -1
- package/dist/hooks/session-start.d.ts.map +1 -1
- package/dist/hooks/session-start.js +190 -1
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/mcp/focus-tag-learner.d.ts +132 -0
- package/dist/mcp/focus-tag-learner.d.ts.map +1 -0
- package/dist/mcp/focus-tag-learner.js +269 -0
- package/dist/mcp/focus-tag-learner.js.map +1 -0
- package/dist/mcp/proximity-tags.d.ts +93 -0
- package/dist/mcp/proximity-tags.d.ts.map +1 -0
- package/dist/mcp/proximity-tags.js +248 -0
- package/dist/mcp/proximity-tags.js.map +1 -0
- package/dist/mcp/tool-tiers.d.ts.map +1 -1
- package/dist/mcp/tool-tiers.js +2 -0
- package/dist/mcp/tool-tiers.js.map +1 -1
- package/dist/mcp/tools/index.d.ts +5 -2
- package/dist/mcp/tools/index.d.ts.map +1 -1
- package/dist/mcp/tools/index.js +19 -2
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/memory.d.ts +7 -2
- package/dist/mcp/tools/memory.d.ts.map +1 -1
- package/dist/mcp/tools/memory.js +40 -9
- package/dist/mcp/tools/memory.js.map +1 -1
- package/dist/mcp/tools/prefetch.d.ts.map +1 -1
- package/dist/mcp/tools/prefetch.js +21 -0
- package/dist/mcp/tools/prefetch.js.map +1 -1
- package/dist/mcp/tools/recommendations.d.ts +30 -0
- package/dist/mcp/tools/recommendations.d.ts.map +1 -0
- package/dist/mcp/tools/recommendations.js +134 -0
- package/dist/mcp/tools/recommendations.js.map +1 -0
- package/dist/mcp/tools/tool-clearing.d.ts +35 -0
- package/dist/mcp/tools/tool-clearing.d.ts.map +1 -0
- package/dist/mcp/tools/tool-clearing.js +253 -0
- package/dist/mcp/tools/tool-clearing.js.map +1 -0
- package/dist/statusline/budget-tracker.d.ts +94 -0
- package/dist/statusline/budget-tracker.d.ts.map +1 -0
- package/dist/statusline/budget-tracker.js +240 -0
- package/dist/statusline/budget-tracker.js.map +1 -0
- package/dist/statusline/index.d.ts +1 -0
- package/dist/statusline/index.d.ts.map +1 -1
- package/dist/statusline/index.js +2 -0
- package/dist/statusline/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feedback Loop Engine Tests - v16.0.0
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
5
|
+
import { join } from 'path';
|
|
6
|
+
import { mkdtemp, rm } from 'fs/promises';
|
|
7
|
+
import { tmpdir } from 'os';
|
|
8
|
+
import { FileSystem } from '../../../utils/file-system.js';
|
|
9
|
+
import { executeFeedbackLoop, applyAdjustments, getDynamicThresholds, loadFeedbackLoopState, saveFeedbackLoopState, createInitialState, calculateTrendData, formatFeedbackLoopResult, formatAdjustmentHistory, FEEDBACK_LOOP_VERSION, } from '../feedback-loop-engine.js';
|
|
10
|
+
import { detectTrendPattern, calculateThresholdAdjustment, validateThresholdOrder, enforceThresholdOrder, getStrategyConfig, STRATEGY_CONFIGS, THRESHOLD_BOUNDS, } from '../adaptation-strategy.js';
|
|
11
|
+
import { recordMetric, resetMetricsState } from '../../metrics/index.js';
|
|
12
|
+
describe('Adaptation Strategy', () => {
|
|
13
|
+
describe('detectTrendPattern', () => {
|
|
14
|
+
it('should detect improving trend', () => {
|
|
15
|
+
const trend = {
|
|
16
|
+
successRateTrend: 0.05,
|
|
17
|
+
tokenSavingsTrend: 0.02,
|
|
18
|
+
avgBudgetUtilization: 0.6,
|
|
19
|
+
dataPoints: 100,
|
|
20
|
+
periodDays: 7,
|
|
21
|
+
};
|
|
22
|
+
expect(detectTrendPattern(trend)).toBe('improving');
|
|
23
|
+
});
|
|
24
|
+
it('should detect degrading trend', () => {
|
|
25
|
+
const trend = {
|
|
26
|
+
successRateTrend: -0.08,
|
|
27
|
+
tokenSavingsTrend: -0.03,
|
|
28
|
+
avgBudgetUtilization: 0.8,
|
|
29
|
+
dataPoints: 100,
|
|
30
|
+
periodDays: 7,
|
|
31
|
+
};
|
|
32
|
+
expect(detectTrendPattern(trend)).toBe('degrading');
|
|
33
|
+
});
|
|
34
|
+
it('should detect plateau', () => {
|
|
35
|
+
const trend = {
|
|
36
|
+
successRateTrend: 0.005,
|
|
37
|
+
tokenSavingsTrend: -0.002,
|
|
38
|
+
avgBudgetUtilization: 0.5,
|
|
39
|
+
dataPoints: 100,
|
|
40
|
+
periodDays: 7,
|
|
41
|
+
};
|
|
42
|
+
expect(detectTrendPattern(trend)).toBe('plateau');
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
describe('calculateThresholdAdjustment', () => {
|
|
46
|
+
const strategy = getStrategyConfig('moderate');
|
|
47
|
+
it('should suggest raising threshold on improving trend', () => {
|
|
48
|
+
const trend = {
|
|
49
|
+
successRateTrend: 0.10,
|
|
50
|
+
tokenSavingsTrend: 0.05,
|
|
51
|
+
avgBudgetUtilization: 0.5,
|
|
52
|
+
dataPoints: 50,
|
|
53
|
+
periodDays: 7,
|
|
54
|
+
};
|
|
55
|
+
const adjustment = calculateThresholdAdjustment(0.85, 'warning', 'improving', trend, strategy);
|
|
56
|
+
expect(adjustment).not.toBeNull();
|
|
57
|
+
expect(adjustment.delta).toBeGreaterThan(0);
|
|
58
|
+
expect(adjustment.suggestedValue).toBeGreaterThan(0.85);
|
|
59
|
+
});
|
|
60
|
+
it('should suggest lowering threshold on degrading trend', () => {
|
|
61
|
+
const trend = {
|
|
62
|
+
successRateTrend: -0.10,
|
|
63
|
+
tokenSavingsTrend: -0.05,
|
|
64
|
+
avgBudgetUtilization: 0.8,
|
|
65
|
+
dataPoints: 50,
|
|
66
|
+
periodDays: 7,
|
|
67
|
+
};
|
|
68
|
+
const adjustment = calculateThresholdAdjustment(0.90, 'high', 'degrading', trend, strategy);
|
|
69
|
+
expect(adjustment).not.toBeNull();
|
|
70
|
+
expect(adjustment.delta).toBeLessThan(0);
|
|
71
|
+
expect(adjustment.suggestedValue).toBeLessThan(0.90);
|
|
72
|
+
});
|
|
73
|
+
it('should return null when insufficient data', () => {
|
|
74
|
+
const trend = {
|
|
75
|
+
successRateTrend: 0.10,
|
|
76
|
+
tokenSavingsTrend: 0.05,
|
|
77
|
+
avgBudgetUtilization: 0.5,
|
|
78
|
+
dataPoints: 5, // Too few
|
|
79
|
+
periodDays: 7,
|
|
80
|
+
};
|
|
81
|
+
const adjustment = calculateThresholdAdjustment(0.85, 'warning', 'improving', trend, strategy);
|
|
82
|
+
expect(adjustment).toBeNull();
|
|
83
|
+
});
|
|
84
|
+
it('should cap delta at 5%', () => {
|
|
85
|
+
const trend = {
|
|
86
|
+
successRateTrend: 0.50, // Very high trend
|
|
87
|
+
tokenSavingsTrend: 0.30,
|
|
88
|
+
avgBudgetUtilization: 0.5,
|
|
89
|
+
dataPoints: 50,
|
|
90
|
+
periodDays: 7,
|
|
91
|
+
};
|
|
92
|
+
const adjustment = calculateThresholdAdjustment(0.80, 'warning', 'improving', trend, strategy);
|
|
93
|
+
expect(adjustment).not.toBeNull();
|
|
94
|
+
expect(Math.abs(adjustment.delta)).toBeLessThanOrEqual(0.05);
|
|
95
|
+
});
|
|
96
|
+
it('should respect threshold bounds', () => {
|
|
97
|
+
const trend = {
|
|
98
|
+
successRateTrend: 0.50,
|
|
99
|
+
tokenSavingsTrend: 0.30,
|
|
100
|
+
avgBudgetUtilization: 0.5,
|
|
101
|
+
dataPoints: 50,
|
|
102
|
+
periodDays: 7,
|
|
103
|
+
};
|
|
104
|
+
const adjustment = calculateThresholdAdjustment(0.89, // Near upper bound
|
|
105
|
+
'warning', 'improving', trend, strategy);
|
|
106
|
+
if (adjustment) {
|
|
107
|
+
expect(adjustment.suggestedValue).toBeLessThanOrEqual(THRESHOLD_BOUNDS.warning.max);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
describe('validateThresholdOrder', () => {
|
|
112
|
+
it('should validate correct ordering', () => {
|
|
113
|
+
expect(validateThresholdOrder(0.80, 0.90, 0.95)).toBe(true);
|
|
114
|
+
expect(validateThresholdOrder(0.85, 0.92, 0.98)).toBe(true);
|
|
115
|
+
});
|
|
116
|
+
it('should reject invalid ordering', () => {
|
|
117
|
+
expect(validateThresholdOrder(0.90, 0.85, 0.95)).toBe(false); // warning > high
|
|
118
|
+
expect(validateThresholdOrder(0.80, 0.96, 0.95)).toBe(false); // high > critical
|
|
119
|
+
expect(validateThresholdOrder(0.90, 0.90, 0.95)).toBe(false); // warning == high
|
|
120
|
+
});
|
|
121
|
+
it('should reject out of bounds values', () => {
|
|
122
|
+
expect(validateThresholdOrder(0.60, 0.90, 0.95)).toBe(false); // warning too low
|
|
123
|
+
expect(validateThresholdOrder(0.80, 0.98, 0.99)).toBe(false); // high too high
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
describe('enforceThresholdOrder', () => {
|
|
127
|
+
const current = { warning: 0.85, high: 0.90, critical: 0.95 };
|
|
128
|
+
it('should cap warning below high', () => {
|
|
129
|
+
const enforced = enforceThresholdOrder('warning', 0.92, current);
|
|
130
|
+
expect(enforced).toBeLessThan(current.high);
|
|
131
|
+
});
|
|
132
|
+
it('should keep high between warning and critical', () => {
|
|
133
|
+
const enforced = enforceThresholdOrder('high', 0.98, current);
|
|
134
|
+
expect(enforced).toBeGreaterThan(current.warning);
|
|
135
|
+
expect(enforced).toBeLessThan(current.critical);
|
|
136
|
+
});
|
|
137
|
+
it('should keep critical above high', () => {
|
|
138
|
+
const enforced = enforceThresholdOrder('critical', 0.88, current);
|
|
139
|
+
expect(enforced).toBeGreaterThan(current.high);
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
describe('strategy configs', () => {
|
|
143
|
+
it('should have all required strategies', () => {
|
|
144
|
+
expect(STRATEGY_CONFIGS.conservative).toBeDefined();
|
|
145
|
+
expect(STRATEGY_CONFIGS.moderate).toBeDefined();
|
|
146
|
+
expect(STRATEGY_CONFIGS.aggressive).toBeDefined();
|
|
147
|
+
});
|
|
148
|
+
it('conservative should have lowest max delta', () => {
|
|
149
|
+
expect(STRATEGY_CONFIGS.conservative.maxDeltaPerAdjustment)
|
|
150
|
+
.toBeLessThan(STRATEGY_CONFIGS.moderate.maxDeltaPerAdjustment);
|
|
151
|
+
});
|
|
152
|
+
it('aggressive should have lowest hysteresis', () => {
|
|
153
|
+
expect(STRATEGY_CONFIGS.aggressive.hysteresisThreshold)
|
|
154
|
+
.toBeLessThan(STRATEGY_CONFIGS.moderate.hysteresisThreshold);
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
describe('Feedback Loop Engine', () => {
|
|
159
|
+
let testDir;
|
|
160
|
+
beforeEach(async () => {
|
|
161
|
+
testDir = await mkdtemp(join(tmpdir(), 'feedback-loop-test-'));
|
|
162
|
+
await FileSystem.createDirectory(join(testDir, '.dino'));
|
|
163
|
+
resetMetricsState();
|
|
164
|
+
});
|
|
165
|
+
afterEach(async () => {
|
|
166
|
+
resetMetricsState();
|
|
167
|
+
await rm(testDir, { recursive: true, force: true });
|
|
168
|
+
});
|
|
169
|
+
describe('state management', () => {
|
|
170
|
+
it('should create initial state', () => {
|
|
171
|
+
const state = createInitialState();
|
|
172
|
+
expect(state.version).toBe(FEEDBACK_LOOP_VERSION);
|
|
173
|
+
expect(state.adjustmentHistory).toEqual([]);
|
|
174
|
+
expect(state.strategy).toBe('moderate');
|
|
175
|
+
});
|
|
176
|
+
it('should save and load state', async () => {
|
|
177
|
+
const state = createInitialState();
|
|
178
|
+
state.strategy = 'conservative';
|
|
179
|
+
state.dynamicThresholds = { warning: 0.82, high: 0.92, critical: 0.97 };
|
|
180
|
+
await saveFeedbackLoopState(testDir, state);
|
|
181
|
+
const loaded = await loadFeedbackLoopState(testDir);
|
|
182
|
+
expect(loaded.strategy).toBe('conservative');
|
|
183
|
+
expect(loaded.dynamicThresholds).toEqual(state.dynamicThresholds);
|
|
184
|
+
});
|
|
185
|
+
it('should return initial state when file missing', async () => {
|
|
186
|
+
const state = await loadFeedbackLoopState(testDir);
|
|
187
|
+
expect(state.version).toBe(FEEDBACK_LOOP_VERSION);
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
describe('executeFeedbackLoop', () => {
|
|
191
|
+
it('should skip when feature disabled', async () => {
|
|
192
|
+
const result = await executeFeedbackLoop(testDir);
|
|
193
|
+
expect(result.executed).toBe(false);
|
|
194
|
+
expect(result.reason).toContain('dynamicThresholds');
|
|
195
|
+
});
|
|
196
|
+
it('should execute with forceAnalysis', async () => {
|
|
197
|
+
// Add some metrics first
|
|
198
|
+
for (let i = 0; i < 35; i++) {
|
|
199
|
+
await recordMetric(testDir, {
|
|
200
|
+
operationType: 'auto-injection',
|
|
201
|
+
outcome: 'success',
|
|
202
|
+
durationMs: 10,
|
|
203
|
+
tokensSaved: 100,
|
|
204
|
+
budgetPercentage: 50,
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
const result = await executeFeedbackLoop(testDir, { forceAnalysis: true });
|
|
208
|
+
// Should execute but may not have adjustments due to insufficient trend
|
|
209
|
+
expect(result.dataPointsAnalyzed).toBeGreaterThanOrEqual(35);
|
|
210
|
+
});
|
|
211
|
+
it('should skip with insufficient data', async () => {
|
|
212
|
+
// Add only a few metrics
|
|
213
|
+
for (let i = 0; i < 5; i++) {
|
|
214
|
+
await recordMetric(testDir, {
|
|
215
|
+
operationType: 'auto-injection',
|
|
216
|
+
outcome: 'success',
|
|
217
|
+
durationMs: 10,
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
const result = await executeFeedbackLoop(testDir, { forceAnalysis: true });
|
|
221
|
+
expect(result.executed).toBe(false);
|
|
222
|
+
expect(result.reason).toContain('Insufficient data');
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
describe('applyAdjustments', () => {
|
|
226
|
+
it('should not apply when no adjustments', async () => {
|
|
227
|
+
const result = {
|
|
228
|
+
executed: true,
|
|
229
|
+
pattern: 'plateau',
|
|
230
|
+
adjustments: [],
|
|
231
|
+
strategy: 'moderate',
|
|
232
|
+
timestamp: new Date().toISOString(),
|
|
233
|
+
dataPointsAnalyzed: 100,
|
|
234
|
+
};
|
|
235
|
+
const applied = await applyAdjustments(testDir, result);
|
|
236
|
+
expect(applied).toBe(false);
|
|
237
|
+
});
|
|
238
|
+
it('should apply valid adjustments', async () => {
|
|
239
|
+
const result = {
|
|
240
|
+
executed: true,
|
|
241
|
+
pattern: 'improving',
|
|
242
|
+
adjustments: [{
|
|
243
|
+
threshold: 'warning',
|
|
244
|
+
currentValue: 0.85,
|
|
245
|
+
suggestedValue: 0.87,
|
|
246
|
+
delta: 0.02,
|
|
247
|
+
reason: 'test',
|
|
248
|
+
confidence: 0.8,
|
|
249
|
+
}],
|
|
250
|
+
strategy: 'moderate',
|
|
251
|
+
timestamp: new Date().toISOString(),
|
|
252
|
+
dataPointsAnalyzed: 100,
|
|
253
|
+
};
|
|
254
|
+
const applied = await applyAdjustments(testDir, result);
|
|
255
|
+
expect(applied).toBe(true);
|
|
256
|
+
const state = await loadFeedbackLoopState(testDir);
|
|
257
|
+
expect(state.dynamicThresholds?.warning).toBe(0.87);
|
|
258
|
+
expect(state.adjustmentHistory.length).toBe(1);
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
describe('getDynamicThresholds', () => {
|
|
262
|
+
it('should return null when feature disabled', async () => {
|
|
263
|
+
const thresholds = await getDynamicThresholds(testDir);
|
|
264
|
+
expect(thresholds).toBeNull();
|
|
265
|
+
});
|
|
266
|
+
it('should return null when no dynamic thresholds set', async () => {
|
|
267
|
+
// Enable feature via config
|
|
268
|
+
await FileSystem.writeJson(join(testDir, '.dino', 'config.json'), {
|
|
269
|
+
version: '16.0.0',
|
|
270
|
+
features: { dynamicThresholds: true },
|
|
271
|
+
});
|
|
272
|
+
const thresholds = await getDynamicThresholds(testDir);
|
|
273
|
+
expect(thresholds).toBeNull();
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
describe('calculateTrendData', () => {
|
|
277
|
+
it('should calculate trend from summaries', () => {
|
|
278
|
+
const recent = {
|
|
279
|
+
timeRange: { start: '', end: '', days: 3 },
|
|
280
|
+
overall: {
|
|
281
|
+
totalOperations: 100,
|
|
282
|
+
successRate: 0.90,
|
|
283
|
+
totalTokensSaved: 5000,
|
|
284
|
+
totalTokensFreed: 2000,
|
|
285
|
+
avgDurationMs: 50,
|
|
286
|
+
},
|
|
287
|
+
byOperation: {
|
|
288
|
+
'auto-injection': { count: 60, successRate: 0.95, tokensSaved: 3000, tokensFreed: 0, avgDurationMs: 40 },
|
|
289
|
+
'auto-unload': { count: 40, successRate: 0.85, tokensSaved: 0, tokensFreed: 2000, avgDurationMs: 60 },
|
|
290
|
+
},
|
|
291
|
+
};
|
|
292
|
+
const older = {
|
|
293
|
+
timeRange: { start: '', end: '', days: 7 },
|
|
294
|
+
overall: {
|
|
295
|
+
totalOperations: 80,
|
|
296
|
+
successRate: 0.85,
|
|
297
|
+
totalTokensSaved: 3500,
|
|
298
|
+
totalTokensFreed: 1500,
|
|
299
|
+
avgDurationMs: 55,
|
|
300
|
+
},
|
|
301
|
+
byOperation: {
|
|
302
|
+
'auto-injection': { count: 50, successRate: 0.90, tokensSaved: 2500, tokensFreed: 0, avgDurationMs: 45 },
|
|
303
|
+
'auto-unload': { count: 30, successRate: 0.80, tokensSaved: 0, tokensFreed: 1500, avgDurationMs: 65 },
|
|
304
|
+
},
|
|
305
|
+
};
|
|
306
|
+
const trend = calculateTrendData(recent, older);
|
|
307
|
+
// Success rate improved from 0.85 to 0.90
|
|
308
|
+
expect(trend.successRateTrend).toBeCloseTo(0.05, 2);
|
|
309
|
+
expect(trend.dataPoints).toBe(100);
|
|
310
|
+
});
|
|
311
|
+
});
|
|
312
|
+
describe('formatting', () => {
|
|
313
|
+
it('should format executed result', () => {
|
|
314
|
+
const result = {
|
|
315
|
+
executed: true,
|
|
316
|
+
pattern: 'improving',
|
|
317
|
+
trendData: {
|
|
318
|
+
successRateTrend: 0.05,
|
|
319
|
+
tokenSavingsTrend: 0.02,
|
|
320
|
+
avgBudgetUtilization: 0.6,
|
|
321
|
+
dataPoints: 100,
|
|
322
|
+
periodDays: 7,
|
|
323
|
+
},
|
|
324
|
+
adjustments: [{
|
|
325
|
+
threshold: 'warning',
|
|
326
|
+
currentValue: 0.85,
|
|
327
|
+
suggestedValue: 0.87,
|
|
328
|
+
delta: 0.02,
|
|
329
|
+
reason: 'Performance improving',
|
|
330
|
+
confidence: 0.8,
|
|
331
|
+
}],
|
|
332
|
+
strategy: 'moderate',
|
|
333
|
+
timestamp: new Date().toISOString(),
|
|
334
|
+
dataPointsAnalyzed: 100,
|
|
335
|
+
};
|
|
336
|
+
const formatted = formatFeedbackLoopResult(result);
|
|
337
|
+
expect(formatted).toContain('Feedback Loop Analysis');
|
|
338
|
+
expect(formatted).toContain('improving');
|
|
339
|
+
expect(formatted).toContain('Suggested Adjustments');
|
|
340
|
+
});
|
|
341
|
+
it('should format skipped result', () => {
|
|
342
|
+
const result = {
|
|
343
|
+
executed: false,
|
|
344
|
+
reason: 'dynamicThresholds feature flag is disabled',
|
|
345
|
+
adjustments: [],
|
|
346
|
+
strategy: 'moderate',
|
|
347
|
+
timestamp: new Date().toISOString(),
|
|
348
|
+
dataPointsAnalyzed: 0,
|
|
349
|
+
};
|
|
350
|
+
const formatted = formatFeedbackLoopResult(result);
|
|
351
|
+
expect(formatted).toContain('Skipped');
|
|
352
|
+
});
|
|
353
|
+
it('should format adjustment history', () => {
|
|
354
|
+
const history = [
|
|
355
|
+
{
|
|
356
|
+
timestamp: new Date().toISOString(),
|
|
357
|
+
adjustment: {
|
|
358
|
+
threshold: 'warning',
|
|
359
|
+
currentValue: 0.85,
|
|
360
|
+
suggestedValue: 0.87,
|
|
361
|
+
delta: 0.02,
|
|
362
|
+
reason: 'test',
|
|
363
|
+
confidence: 0.8,
|
|
364
|
+
},
|
|
365
|
+
pattern: 'improving',
|
|
366
|
+
},
|
|
367
|
+
];
|
|
368
|
+
const formatted = formatAdjustmentHistory(history);
|
|
369
|
+
expect(formatted).toContain('Adjustment History');
|
|
370
|
+
});
|
|
371
|
+
it('should format empty history', () => {
|
|
372
|
+
const formatted = formatAdjustmentHistory([]);
|
|
373
|
+
expect(formatted).toContain('No adjustment history');
|
|
374
|
+
});
|
|
375
|
+
});
|
|
376
|
+
});
|
|
377
|
+
//# sourceMappingURL=feedback-loop-engine.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-loop-engine.test.js","sourceRoot":"","sources":["../../../../src/core/context/__tests__/feedback-loop-engine.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adaptation Strategy - v16.0.0
|
|
3
|
+
*
|
|
4
|
+
* Defines strategies for dynamic threshold adjustment based on metrics.
|
|
5
|
+
* Part of the Feedback Loop system.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Three adaptation strategies: conservative, moderate, aggressive
|
|
9
|
+
* - Threshold delta calculation with bounds
|
|
10
|
+
* - Hysteresis to prevent oscillation
|
|
11
|
+
* - Validation of threshold bounds
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Adaptation strategy types
|
|
15
|
+
*/
|
|
16
|
+
export type AdaptationStrategyType = 'conservative' | 'moderate' | 'aggressive';
|
|
17
|
+
/**
|
|
18
|
+
* Detected trend pattern
|
|
19
|
+
*/
|
|
20
|
+
export type TrendPattern = 'improving' | 'plateau' | 'degrading';
|
|
21
|
+
/**
|
|
22
|
+
* Threshold adjustment recommendation
|
|
23
|
+
*/
|
|
24
|
+
export interface ThresholdAdjustment {
|
|
25
|
+
/** Which threshold to adjust */
|
|
26
|
+
threshold: 'warning' | 'high' | 'critical';
|
|
27
|
+
/** Current value (0-1) */
|
|
28
|
+
currentValue: number;
|
|
29
|
+
/** Suggested new value (0-1) */
|
|
30
|
+
suggestedValue: number;
|
|
31
|
+
/** Delta (positive = raise, negative = lower) */
|
|
32
|
+
delta: number;
|
|
33
|
+
/** Reason for adjustment */
|
|
34
|
+
reason: string;
|
|
35
|
+
/** Confidence in this adjustment (0-1) */
|
|
36
|
+
confidence: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Adaptation strategy configuration
|
|
40
|
+
*/
|
|
41
|
+
export interface AdaptationStrategyConfig {
|
|
42
|
+
/** Strategy type */
|
|
43
|
+
type: AdaptationStrategyType;
|
|
44
|
+
/** Maximum delta per adjustment (as fraction, e.g., 0.05 = 5%) */
|
|
45
|
+
maxDeltaPerAdjustment: number;
|
|
46
|
+
/** Minimum improvement required to make change (hysteresis) */
|
|
47
|
+
hysteresisThreshold: number;
|
|
48
|
+
/** Minimum data points required for trend detection */
|
|
49
|
+
minDataPoints: number;
|
|
50
|
+
/** Weight given to recent data vs historical */
|
|
51
|
+
recencyWeight: number;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Metrics trend data for analysis
|
|
55
|
+
*/
|
|
56
|
+
export interface TrendData {
|
|
57
|
+
/** Success rate trend (positive = improving) */
|
|
58
|
+
successRateTrend: number;
|
|
59
|
+
/** Token savings trend (positive = improving) */
|
|
60
|
+
tokenSavingsTrend: number;
|
|
61
|
+
/** Average budget utilization */
|
|
62
|
+
avgBudgetUtilization: number;
|
|
63
|
+
/** Number of data points analyzed */
|
|
64
|
+
dataPoints: number;
|
|
65
|
+
/** Period in days */
|
|
66
|
+
periodDays: number;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Strategy configurations
|
|
70
|
+
*/
|
|
71
|
+
export declare const STRATEGY_CONFIGS: Record<AdaptationStrategyType, AdaptationStrategyConfig>;
|
|
72
|
+
/**
|
|
73
|
+
* Default strategy
|
|
74
|
+
*/
|
|
75
|
+
export declare const DEFAULT_STRATEGY: AdaptationStrategyType;
|
|
76
|
+
/**
|
|
77
|
+
* Threshold bounds (must maintain: warning < high < critical)
|
|
78
|
+
*/
|
|
79
|
+
export declare const THRESHOLD_BOUNDS: {
|
|
80
|
+
warning: {
|
|
81
|
+
min: number;
|
|
82
|
+
max: number;
|
|
83
|
+
};
|
|
84
|
+
high: {
|
|
85
|
+
min: number;
|
|
86
|
+
max: number;
|
|
87
|
+
};
|
|
88
|
+
critical: {
|
|
89
|
+
min: number;
|
|
90
|
+
max: number;
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* Get strategy configuration
|
|
95
|
+
*/
|
|
96
|
+
export declare function getStrategyConfig(strategy?: AdaptationStrategyType): AdaptationStrategyConfig;
|
|
97
|
+
/**
|
|
98
|
+
* Detect trend pattern from metrics data
|
|
99
|
+
*/
|
|
100
|
+
export declare function detectTrendPattern(trend: TrendData): TrendPattern;
|
|
101
|
+
/**
|
|
102
|
+
* Calculate suggested threshold adjustment
|
|
103
|
+
*/
|
|
104
|
+
export declare function calculateThresholdAdjustment(currentThreshold: number, thresholdType: 'warning' | 'high' | 'critical', pattern: TrendPattern, trend: TrendData, strategy: AdaptationStrategyConfig): ThresholdAdjustment | null;
|
|
105
|
+
/**
|
|
106
|
+
* Validate threshold values maintain proper ordering
|
|
107
|
+
*/
|
|
108
|
+
export declare function validateThresholdOrder(warning: number, high: number, critical: number): boolean;
|
|
109
|
+
/**
|
|
110
|
+
* Adjust a suggested value to maintain threshold ordering
|
|
111
|
+
*/
|
|
112
|
+
export declare function enforceThresholdOrder(thresholdType: 'warning' | 'high' | 'critical', suggestedValue: number, currentThresholds: {
|
|
113
|
+
warning: number;
|
|
114
|
+
high: number;
|
|
115
|
+
critical: number;
|
|
116
|
+
}): number;
|
|
117
|
+
/**
|
|
118
|
+
* Format threshold adjustment for display
|
|
119
|
+
*/
|
|
120
|
+
export declare function formatThresholdAdjustment(adj: ThresholdAdjustment): string;
|
|
121
|
+
/**
|
|
122
|
+
* Format strategy config for display
|
|
123
|
+
*/
|
|
124
|
+
export declare function formatStrategyConfig(config: AdaptationStrategyConfig): string;
|
|
125
|
+
//# sourceMappingURL=adaptation-strategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adaptation-strategy.d.ts","sourceRoot":"","sources":["../../../src/core/context/adaptation-strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,cAAc,GAAG,UAAU,GAAG,YAAY,CAAC;AAEhF;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,gCAAgC;IAChC,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;IAC3C,0BAA0B;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,oBAAoB;IACpB,IAAI,EAAE,sBAAsB,CAAC;IAC7B,kEAAkE;IAClE,qBAAqB,EAAE,MAAM,CAAC;IAC9B,+DAA+D;IAC/D,mBAAmB,EAAE,MAAM,CAAC;IAC5B,uDAAuD;IACvD,aAAa,EAAE,MAAM,CAAC;IACtB,gDAAgD;IAChD,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,gDAAgD;IAChD,gBAAgB,EAAE,MAAM,CAAC;IACzB,iDAAiD;IACjD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iCAAiC;IACjC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,sBAAsB,EAAE,wBAAwB,CAsBrF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,sBAAmC,CAAC;AAEnE;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;CAI5B,CAAC;AAMF;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,GAAE,sBAAyC,GAClD,wBAAwB,CAE1B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,YAAY,CAgBjE;AAMD;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,SAAS,GAAG,MAAM,GAAG,UAAU,EAC9C,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,wBAAwB,GACjC,mBAAmB,GAAG,IAAI,CAkE5B;AAuDD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CAiBT;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,SAAS,GAAG,MAAM,GAAG,UAAU,EAC9C,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACrE,MAAM,CAkBR;AAMD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,mBAAmB,GAAG,MAAM,CAG1E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,wBAAwB,GAAG,MAAM,CAE7E"}
|