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.
Files changed (231) hide show
  1. package/README.md +58 -1
  2. package/dist/cli/index.js +46 -0
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/commands/dashboard.d.ts +27 -0
  5. package/dist/commands/dashboard.d.ts.map +1 -0
  6. package/dist/commands/dashboard.js +80 -0
  7. package/dist/commands/dashboard.js.map +1 -0
  8. package/dist/commands/debug.d.ts +53 -0
  9. package/dist/commands/debug.d.ts.map +1 -0
  10. package/dist/commands/debug.js +199 -0
  11. package/dist/commands/debug.js.map +1 -0
  12. package/dist/commands/profile.d.ts +37 -0
  13. package/dist/commands/profile.d.ts.map +1 -0
  14. package/dist/commands/profile.js +145 -0
  15. package/dist/commands/profile.js.map +1 -0
  16. package/dist/commands/recommendations.d.ts +27 -0
  17. package/dist/commands/recommendations.d.ts.map +1 -0
  18. package/dist/commands/recommendations.js +123 -0
  19. package/dist/commands/recommendations.js.map +1 -0
  20. package/dist/core/checkpoints/checkpoint.d.ts +1 -0
  21. package/dist/core/checkpoints/checkpoint.d.ts.map +1 -1
  22. package/dist/core/checkpoints/checkpoint.js.map +1 -1
  23. package/dist/core/checkpoints/handoff.d.ts +2 -1
  24. package/dist/core/checkpoints/handoff.d.ts.map +1 -1
  25. package/dist/core/checkpoints/handoff.js +2 -1
  26. package/dist/core/checkpoints/handoff.js.map +1 -1
  27. package/dist/core/checkpoints/session-recovery.d.ts +71 -0
  28. package/dist/core/checkpoints/session-recovery.d.ts.map +1 -0
  29. package/dist/core/checkpoints/session-recovery.js +172 -0
  30. package/dist/core/checkpoints/session-recovery.js.map +1 -0
  31. package/dist/core/config/feature-flags.d.ts +84 -0
  32. package/dist/core/config/feature-flags.d.ts.map +1 -1
  33. package/dist/core/config/feature-flags.js +18 -0
  34. package/dist/core/config/feature-flags.js.map +1 -1
  35. package/dist/core/context/__tests__/feedback-loop-engine.test.d.ts +5 -0
  36. package/dist/core/context/__tests__/feedback-loop-engine.test.d.ts.map +1 -0
  37. package/dist/core/context/__tests__/feedback-loop-engine.test.js +377 -0
  38. package/dist/core/context/__tests__/feedback-loop-engine.test.js.map +1 -0
  39. package/dist/core/context/adaptation-strategy.d.ts +125 -0
  40. package/dist/core/context/adaptation-strategy.d.ts.map +1 -0
  41. package/dist/core/context/adaptation-strategy.js +233 -0
  42. package/dist/core/context/adaptation-strategy.js.map +1 -0
  43. package/dist/core/context/auto-injection-engine.d.ts.map +1 -1
  44. package/dist/core/context/auto-injection-engine.js +21 -0
  45. package/dist/core/context/auto-injection-engine.js.map +1 -1
  46. package/dist/core/context/auto-unload-engine.d.ts +20 -2
  47. package/dist/core/context/auto-unload-engine.d.ts.map +1 -1
  48. package/dist/core/context/auto-unload-engine.js +78 -5
  49. package/dist/core/context/auto-unload-engine.js.map +1 -1
  50. package/dist/core/context/budget-thresholds.d.ts +75 -1
  51. package/dist/core/context/budget-thresholds.d.ts.map +1 -1
  52. package/dist/core/context/budget-thresholds.js +163 -2
  53. package/dist/core/context/budget-thresholds.js.map +1 -1
  54. package/dist/core/context/context-health.d.ts.map +1 -1
  55. package/dist/core/context/context-health.js +24 -0
  56. package/dist/core/context/context-health.js.map +1 -1
  57. package/dist/core/context/demand-detector.d.ts +34 -1
  58. package/dist/core/context/demand-detector.d.ts.map +1 -1
  59. package/dist/core/context/demand-detector.js +162 -1
  60. package/dist/core/context/demand-detector.js.map +1 -1
  61. package/dist/core/context/demand-signal-patterns.d.ts +120 -0
  62. package/dist/core/context/demand-signal-patterns.d.ts.map +1 -0
  63. package/dist/core/context/demand-signal-patterns.js +418 -0
  64. package/dist/core/context/demand-signal-patterns.js.map +1 -0
  65. package/dist/core/context/feedback-loop-engine.d.ts +128 -0
  66. package/dist/core/context/feedback-loop-engine.d.ts.map +1 -0
  67. package/dist/core/context/feedback-loop-engine.js +352 -0
  68. package/dist/core/context/feedback-loop-engine.js.map +1 -0
  69. package/dist/core/context/index.d.ts +5 -3
  70. package/dist/core/context/index.d.ts.map +1 -1
  71. package/dist/core/context/index.js +26 -6
  72. package/dist/core/context/index.js.map +1 -1
  73. package/dist/core/context/prefetch-learner.d.ts +195 -0
  74. package/dist/core/context/prefetch-learner.d.ts.map +1 -0
  75. package/dist/core/context/prefetch-learner.js +363 -0
  76. package/dist/core/context/prefetch-learner.js.map +1 -0
  77. package/dist/core/context/semantic-signal-detector.d.ts +96 -0
  78. package/dist/core/context/semantic-signal-detector.d.ts.map +1 -0
  79. package/dist/core/context/semantic-signal-detector.js +320 -0
  80. package/dist/core/context/semantic-signal-detector.js.map +1 -0
  81. package/dist/core/context/smart-prefetch-engine.d.ts +66 -0
  82. package/dist/core/context/smart-prefetch-engine.d.ts.map +1 -0
  83. package/dist/core/context/smart-prefetch-engine.js +226 -0
  84. package/dist/core/context/smart-prefetch-engine.js.map +1 -0
  85. package/dist/core/context/token-tracker.d.ts +9 -0
  86. package/dist/core/context/token-tracker.d.ts.map +1 -1
  87. package/dist/core/context/token-tracker.js +14 -0
  88. package/dist/core/context/token-tracker.js.map +1 -1
  89. package/dist/core/context/window-boundary.d.ts +132 -0
  90. package/dist/core/context/window-boundary.d.ts.map +1 -0
  91. package/dist/core/context/window-boundary.js +268 -0
  92. package/dist/core/context/window-boundary.js.map +1 -0
  93. package/dist/core/context-repl/confidence-scorer.d.ts +92 -0
  94. package/dist/core/context-repl/confidence-scorer.d.ts.map +1 -0
  95. package/dist/core/context-repl/confidence-scorer.js +159 -0
  96. package/dist/core/context-repl/confidence-scorer.js.map +1 -0
  97. package/dist/core/context-repl/reconnaissance-engine.d.ts +160 -0
  98. package/dist/core/context-repl/reconnaissance-engine.d.ts.map +1 -0
  99. package/dist/core/context-repl/reconnaissance-engine.js +275 -0
  100. package/dist/core/context-repl/reconnaissance-engine.js.map +1 -0
  101. package/dist/core/dashboard/dashboard-formatter.d.ts +68 -0
  102. package/dist/core/dashboard/dashboard-formatter.d.ts.map +1 -0
  103. package/dist/core/dashboard/dashboard-formatter.js +250 -0
  104. package/dist/core/dashboard/dashboard-formatter.js.map +1 -0
  105. package/dist/core/dashboard/health-metrics-aggregator.d.ts +117 -0
  106. package/dist/core/dashboard/health-metrics-aggregator.d.ts.map +1 -0
  107. package/dist/core/dashboard/health-metrics-aggregator.js +255 -0
  108. package/dist/core/dashboard/health-metrics-aggregator.js.map +1 -0
  109. package/dist/core/debug/context-decision-logger.d.ts +189 -0
  110. package/dist/core/debug/context-decision-logger.d.ts.map +1 -0
  111. package/dist/core/debug/context-decision-logger.js +397 -0
  112. package/dist/core/debug/context-decision-logger.js.map +1 -0
  113. package/dist/core/debug/debug-config.d.ts +100 -0
  114. package/dist/core/debug/debug-config.d.ts.map +1 -0
  115. package/dist/core/debug/debug-config.js +193 -0
  116. package/dist/core/debug/debug-config.js.map +1 -0
  117. package/dist/core/debug/debug-logger.d.ts +85 -0
  118. package/dist/core/debug/debug-logger.d.ts.map +1 -0
  119. package/dist/core/debug/debug-logger.js +287 -0
  120. package/dist/core/debug/debug-logger.js.map +1 -0
  121. package/dist/core/debug/index.d.ts +10 -0
  122. package/dist/core/debug/index.d.ts.map +1 -0
  123. package/dist/core/debug/index.js +13 -0
  124. package/dist/core/debug/index.js.map +1 -0
  125. package/dist/core/embeddings/content-indexer.d.ts +169 -0
  126. package/dist/core/embeddings/content-indexer.d.ts.map +1 -0
  127. package/dist/core/embeddings/content-indexer.js +317 -0
  128. package/dist/core/embeddings/content-indexer.js.map +1 -0
  129. package/dist/core/embeddings/index.d.ts +2 -0
  130. package/dist/core/embeddings/index.d.ts.map +1 -1
  131. package/dist/core/embeddings/index.js +4 -0
  132. package/dist/core/embeddings/index.js.map +1 -1
  133. package/dist/core/embeddings/semantic-cache.d.ts +162 -0
  134. package/dist/core/embeddings/semantic-cache.d.ts.map +1 -0
  135. package/dist/core/embeddings/semantic-cache.js +317 -0
  136. package/dist/core/embeddings/semantic-cache.js.map +1 -0
  137. package/dist/core/generator/session-md.d.ts +31 -1
  138. package/dist/core/generator/session-md.d.ts.map +1 -1
  139. package/dist/core/generator/session-md.js +63 -1
  140. package/dist/core/generator/session-md.js.map +1 -1
  141. package/dist/core/memory/retrieval.d.ts +7 -1
  142. package/dist/core/memory/retrieval.d.ts.map +1 -1
  143. package/dist/core/memory/retrieval.js +7 -1
  144. package/dist/core/memory/retrieval.js.map +1 -1
  145. package/dist/core/metrics/__tests__/metrics-collector.test.d.ts +5 -0
  146. package/dist/core/metrics/__tests__/metrics-collector.test.d.ts.map +1 -0
  147. package/dist/core/metrics/__tests__/metrics-collector.test.js +354 -0
  148. package/dist/core/metrics/__tests__/metrics-collector.test.js.map +1 -0
  149. package/dist/core/metrics/index.d.ts +9 -0
  150. package/dist/core/metrics/index.d.ts.map +1 -0
  151. package/dist/core/metrics/index.js +29 -0
  152. package/dist/core/metrics/index.js.map +1 -0
  153. package/dist/core/metrics/metrics-collector.d.ts +153 -0
  154. package/dist/core/metrics/metrics-collector.d.ts.map +1 -0
  155. package/dist/core/metrics/metrics-collector.js +446 -0
  156. package/dist/core/metrics/metrics-collector.js.map +1 -0
  157. package/dist/core/metrics/metrics-schema.d.ts +189 -0
  158. package/dist/core/metrics/metrics-schema.d.ts.map +1 -0
  159. package/dist/core/metrics/metrics-schema.js +180 -0
  160. package/dist/core/metrics/metrics-schema.js.map +1 -0
  161. package/dist/core/profiling/index.d.ts +8 -0
  162. package/dist/core/profiling/index.d.ts.map +1 -0
  163. package/dist/core/profiling/index.js +8 -0
  164. package/dist/core/profiling/index.js.map +1 -0
  165. package/dist/core/profiling/operation-profiler.d.ts +118 -0
  166. package/dist/core/profiling/operation-profiler.d.ts.map +1 -0
  167. package/dist/core/profiling/operation-profiler.js +266 -0
  168. package/dist/core/profiling/operation-profiler.js.map +1 -0
  169. package/dist/core/profiling/perf-report-generator.d.ts +46 -0
  170. package/dist/core/profiling/perf-report-generator.d.ts.map +1 -0
  171. package/dist/core/profiling/perf-report-generator.js +235 -0
  172. package/dist/core/profiling/perf-report-generator.js.map +1 -0
  173. package/dist/core/recommendations/heuristics.d.ts +120 -0
  174. package/dist/core/recommendations/heuristics.d.ts.map +1 -0
  175. package/dist/core/recommendations/heuristics.js +771 -0
  176. package/dist/core/recommendations/heuristics.js.map +1 -0
  177. package/dist/core/recommendations/priority-scorer.d.ts +75 -0
  178. package/dist/core/recommendations/priority-scorer.d.ts.map +1 -0
  179. package/dist/core/recommendations/priority-scorer.js +148 -0
  180. package/dist/core/recommendations/priority-scorer.js.map +1 -0
  181. package/dist/core/recommendations/recommendation-engine.d.ts +60 -0
  182. package/dist/core/recommendations/recommendation-engine.d.ts.map +1 -0
  183. package/dist/core/recommendations/recommendation-engine.js +271 -0
  184. package/dist/core/recommendations/recommendation-engine.js.map +1 -0
  185. package/dist/hooks/pre-compact.d.ts +9 -1
  186. package/dist/hooks/pre-compact.d.ts.map +1 -1
  187. package/dist/hooks/pre-compact.js +93 -1
  188. package/dist/hooks/pre-compact.js.map +1 -1
  189. package/dist/hooks/session-start.d.ts +5 -1
  190. package/dist/hooks/session-start.d.ts.map +1 -1
  191. package/dist/hooks/session-start.js +190 -1
  192. package/dist/hooks/session-start.js.map +1 -1
  193. package/dist/mcp/focus-tag-learner.d.ts +132 -0
  194. package/dist/mcp/focus-tag-learner.d.ts.map +1 -0
  195. package/dist/mcp/focus-tag-learner.js +269 -0
  196. package/dist/mcp/focus-tag-learner.js.map +1 -0
  197. package/dist/mcp/proximity-tags.d.ts +93 -0
  198. package/dist/mcp/proximity-tags.d.ts.map +1 -0
  199. package/dist/mcp/proximity-tags.js +248 -0
  200. package/dist/mcp/proximity-tags.js.map +1 -0
  201. package/dist/mcp/tool-tiers.d.ts.map +1 -1
  202. package/dist/mcp/tool-tiers.js +2 -0
  203. package/dist/mcp/tool-tiers.js.map +1 -1
  204. package/dist/mcp/tools/index.d.ts +5 -2
  205. package/dist/mcp/tools/index.d.ts.map +1 -1
  206. package/dist/mcp/tools/index.js +19 -2
  207. package/dist/mcp/tools/index.js.map +1 -1
  208. package/dist/mcp/tools/memory.d.ts +7 -2
  209. package/dist/mcp/tools/memory.d.ts.map +1 -1
  210. package/dist/mcp/tools/memory.js +40 -9
  211. package/dist/mcp/tools/memory.js.map +1 -1
  212. package/dist/mcp/tools/prefetch.d.ts.map +1 -1
  213. package/dist/mcp/tools/prefetch.js +21 -0
  214. package/dist/mcp/tools/prefetch.js.map +1 -1
  215. package/dist/mcp/tools/recommendations.d.ts +30 -0
  216. package/dist/mcp/tools/recommendations.d.ts.map +1 -0
  217. package/dist/mcp/tools/recommendations.js +134 -0
  218. package/dist/mcp/tools/recommendations.js.map +1 -0
  219. package/dist/mcp/tools/tool-clearing.d.ts +35 -0
  220. package/dist/mcp/tools/tool-clearing.d.ts.map +1 -0
  221. package/dist/mcp/tools/tool-clearing.js +253 -0
  222. package/dist/mcp/tools/tool-clearing.js.map +1 -0
  223. package/dist/statusline/budget-tracker.d.ts +94 -0
  224. package/dist/statusline/budget-tracker.d.ts.map +1 -0
  225. package/dist/statusline/budget-tracker.js +240 -0
  226. package/dist/statusline/budget-tracker.js.map +1 -0
  227. package/dist/statusline/index.d.ts +1 -0
  228. package/dist/statusline/index.d.ts.map +1 -1
  229. package/dist/statusline/index.js +2 -0
  230. package/dist/statusline/index.js.map +1 -1
  231. 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"}