@skillsmith/core 2.1.0 → 2.1.2

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 (204) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/src/analysis/types.d.ts +2 -0
  3. package/dist/src/analysis/types.d.ts.map +1 -1
  4. package/dist/src/analysis/types.js +13 -1
  5. package/dist/src/analysis/types.js.map +1 -1
  6. package/dist/src/analytics/AnalyticsRepository.d.ts +4 -0
  7. package/dist/src/analytics/AnalyticsRepository.d.ts.map +1 -1
  8. package/dist/src/analytics/AnalyticsRepository.js +26 -44
  9. package/dist/src/analytics/AnalyticsRepository.js.map +1 -1
  10. package/dist/src/analytics/schema.d.ts +1 -1
  11. package/dist/src/analytics/schema.d.ts.map +1 -1
  12. package/dist/src/analytics/schema.js +68 -0
  13. package/dist/src/analytics/schema.js.map +1 -1
  14. package/dist/src/api/client.d.ts +33 -29
  15. package/dist/src/api/client.d.ts.map +1 -1
  16. package/dist/src/api/client.js +15 -10
  17. package/dist/src/api/client.js.map +1 -1
  18. package/dist/src/billing/BillingService.d.ts +139 -0
  19. package/dist/src/billing/BillingService.d.ts.map +1 -0
  20. package/dist/src/billing/BillingService.js +393 -0
  21. package/dist/src/billing/BillingService.js.map +1 -0
  22. package/dist/src/billing/GDPRComplianceService.d.ts +176 -0
  23. package/dist/src/billing/GDPRComplianceService.d.ts.map +1 -0
  24. package/dist/src/billing/GDPRComplianceService.js +361 -0
  25. package/dist/src/billing/GDPRComplianceService.js.map +1 -0
  26. package/dist/src/billing/StripeClient.d.ts +177 -0
  27. package/dist/src/billing/StripeClient.d.ts.map +1 -0
  28. package/dist/src/billing/StripeClient.js +462 -0
  29. package/dist/src/billing/StripeClient.js.map +1 -0
  30. package/dist/src/billing/StripeReconciliationJob.d.ts +95 -0
  31. package/dist/src/billing/StripeReconciliationJob.d.ts.map +1 -0
  32. package/dist/src/billing/StripeReconciliationJob.js +405 -0
  33. package/dist/src/billing/StripeReconciliationJob.js.map +1 -0
  34. package/dist/src/billing/StripeWebhookHandler.d.ts +92 -0
  35. package/dist/src/billing/StripeWebhookHandler.d.ts.map +1 -0
  36. package/dist/src/billing/StripeWebhookHandler.js +409 -0
  37. package/dist/src/billing/StripeWebhookHandler.js.map +1 -0
  38. package/dist/src/billing/index.d.ts +18 -0
  39. package/dist/src/billing/index.d.ts.map +1 -0
  40. package/dist/src/billing/index.js +19 -0
  41. package/dist/src/billing/index.js.map +1 -0
  42. package/dist/src/billing/types.d.ts +266 -0
  43. package/dist/src/billing/types.d.ts.map +1 -0
  44. package/dist/src/billing/types.js +23 -0
  45. package/dist/src/billing/types.js.map +1 -0
  46. package/dist/src/embeddings/hnsw-store.d.ts +568 -0
  47. package/dist/src/embeddings/hnsw-store.d.ts.map +1 -0
  48. package/dist/src/embeddings/hnsw-store.js +805 -0
  49. package/dist/src/embeddings/hnsw-store.js.map +1 -0
  50. package/dist/src/embeddings/index.d.ts +2 -0
  51. package/dist/src/embeddings/index.d.ts.map +1 -1
  52. package/dist/src/embeddings/index.js +2 -0
  53. package/dist/src/embeddings/index.js.map +1 -1
  54. package/dist/src/index.d.ts +1 -0
  55. package/dist/src/index.d.ts.map +1 -1
  56. package/dist/src/index.js +2 -0
  57. package/dist/src/index.js.map +1 -1
  58. package/dist/src/learning/PatternStore.d.ts +457 -0
  59. package/dist/src/learning/PatternStore.d.ts.map +1 -0
  60. package/dist/src/learning/PatternStore.js +893 -0
  61. package/dist/src/learning/PatternStore.js.map +1 -0
  62. package/dist/src/learning/ReasoningBankIntegration.d.ts +403 -0
  63. package/dist/src/learning/ReasoningBankIntegration.d.ts.map +1 -0
  64. package/dist/src/learning/ReasoningBankIntegration.js +627 -0
  65. package/dist/src/learning/ReasoningBankIntegration.js.map +1 -0
  66. package/dist/src/learning/index.d.ts +15 -0
  67. package/dist/src/learning/index.d.ts.map +1 -0
  68. package/dist/src/learning/index.js +15 -0
  69. package/dist/src/learning/index.js.map +1 -0
  70. package/dist/src/routing/SONARouter.d.ts +154 -0
  71. package/dist/src/routing/SONARouter.d.ts.map +1 -0
  72. package/dist/src/routing/SONARouter.js +679 -0
  73. package/dist/src/routing/SONARouter.js.map +1 -0
  74. package/dist/src/routing/index.d.ts +9 -0
  75. package/dist/src/routing/index.d.ts.map +1 -0
  76. package/dist/src/routing/index.js +10 -0
  77. package/dist/src/routing/index.js.map +1 -0
  78. package/dist/src/routing/types.d.ts +331 -0
  79. package/dist/src/routing/types.d.ts.map +1 -0
  80. package/dist/src/routing/types.js +203 -0
  81. package/dist/src/routing/types.js.map +1 -0
  82. package/dist/src/scripts/__tests__/scan-imported-skills.test.js +5 -0
  83. package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -1
  84. package/dist/src/security/SkillSandbox.d.ts +156 -0
  85. package/dist/src/security/SkillSandbox.d.ts.map +1 -0
  86. package/dist/src/security/SkillSandbox.js +303 -0
  87. package/dist/src/security/SkillSandbox.js.map +1 -0
  88. package/dist/src/security/index.d.ts +3 -1
  89. package/dist/src/security/index.d.ts.map +1 -1
  90. package/dist/src/security/index.js +5 -1
  91. package/dist/src/security/index.js.map +1 -1
  92. package/dist/src/security/rate-limiter/presets.d.ts +12 -0
  93. package/dist/src/security/rate-limiter/presets.d.ts.map +1 -1
  94. package/dist/src/security/rate-limiter/presets.js +12 -0
  95. package/dist/src/security/rate-limiter/presets.js.map +1 -1
  96. package/dist/src/security/sanitization.d.ts +85 -0
  97. package/dist/src/security/sanitization.d.ts.map +1 -1
  98. package/dist/src/security/sanitization.js +133 -0
  99. package/dist/src/security/sanitization.js.map +1 -1
  100. package/dist/src/security/scanner/SecurityScanner.d.ts +23 -0
  101. package/dist/src/security/scanner/SecurityScanner.d.ts.map +1 -1
  102. package/dist/src/security/scanner/SecurityScanner.js +232 -28
  103. package/dist/src/security/scanner/SecurityScanner.js.map +1 -1
  104. package/dist/src/security/scanner/patterns.d.ts +13 -0
  105. package/dist/src/security/scanner/patterns.d.ts.map +1 -1
  106. package/dist/src/security/scanner/patterns.js +51 -0
  107. package/dist/src/security/scanner/patterns.js.map +1 -1
  108. package/dist/src/security/scanner/types.d.ts +13 -1
  109. package/dist/src/security/scanner/types.d.ts.map +1 -1
  110. package/dist/src/security/scanner/weights.d.ts.map +1 -1
  111. package/dist/src/security/scanner/weights.js +1 -0
  112. package/dist/src/security/scanner/weights.js.map +1 -1
  113. package/dist/src/session/SessionManager.d.ts +7 -0
  114. package/dist/src/session/SessionManager.d.ts.map +1 -1
  115. package/dist/src/session/SessionManager.js +117 -10
  116. package/dist/src/session/SessionManager.js.map +1 -1
  117. package/dist/src/sync/SyncEngine.d.ts.map +1 -1
  118. package/dist/src/sync/SyncEngine.js +52 -32
  119. package/dist/src/sync/SyncEngine.js.map +1 -1
  120. package/dist/src/testing/MultiLLMProvider.d.ts +374 -0
  121. package/dist/src/testing/MultiLLMProvider.d.ts.map +1 -0
  122. package/dist/src/testing/MultiLLMProvider.js +720 -0
  123. package/dist/src/testing/MultiLLMProvider.js.map +1 -0
  124. package/dist/src/testing/index.d.ts +8 -0
  125. package/dist/src/testing/index.d.ts.map +1 -0
  126. package/dist/src/testing/index.js +9 -0
  127. package/dist/src/testing/index.js.map +1 -0
  128. package/dist/src/types.d.ts +3 -0
  129. package/dist/src/types.d.ts.map +1 -1
  130. package/dist/tests/SecurityScanner.test.js +337 -1
  131. package/dist/tests/SecurityScanner.test.js.map +1 -1
  132. package/dist/tests/billing/BillingService.test.d.ts +7 -0
  133. package/dist/tests/billing/BillingService.test.d.ts.map +1 -0
  134. package/dist/tests/billing/BillingService.test.js +168 -0
  135. package/dist/tests/billing/BillingService.test.js.map +1 -0
  136. package/dist/tests/billing/GDPRCompliance.test.d.ts +7 -0
  137. package/dist/tests/billing/GDPRCompliance.test.d.ts.map +1 -0
  138. package/dist/tests/billing/GDPRCompliance.test.js +195 -0
  139. package/dist/tests/billing/GDPRCompliance.test.js.map +1 -0
  140. package/dist/tests/billing/StripeReconciliation.test.d.ts +7 -0
  141. package/dist/tests/billing/StripeReconciliation.test.d.ts.map +1 -0
  142. package/dist/tests/billing/StripeReconciliation.test.js +266 -0
  143. package/dist/tests/billing/StripeReconciliation.test.js.map +1 -0
  144. package/dist/tests/billing/stripe-validators.test.d.ts +7 -0
  145. package/dist/tests/billing/stripe-validators.test.d.ts.map +1 -0
  146. package/dist/tests/billing/stripe-validators.test.js +107 -0
  147. package/dist/tests/billing/stripe-validators.test.js.map +1 -0
  148. package/dist/tests/embeddings/hnsw-store.test.d.ts +7 -0
  149. package/dist/tests/embeddings/hnsw-store.test.d.ts.map +1 -0
  150. package/dist/tests/embeddings/hnsw-store.test.js +295 -0
  151. package/dist/tests/embeddings/hnsw-store.test.js.map +1 -0
  152. package/dist/tests/integration/neural/e2e-learning.test.d.ts +17 -0
  153. package/dist/tests/integration/neural/e2e-learning.test.d.ts.map +1 -0
  154. package/dist/tests/integration/neural/e2e-learning.test.js +238 -0
  155. package/dist/tests/integration/neural/e2e-learning.test.js.map +1 -0
  156. package/dist/tests/integration/neural/helpers.d.ts +132 -0
  157. package/dist/tests/integration/neural/helpers.d.ts.map +1 -0
  158. package/dist/tests/integration/neural/helpers.js +287 -0
  159. package/dist/tests/integration/neural/helpers.js.map +1 -0
  160. package/dist/tests/integration/neural/personalization.test.d.ts +21 -0
  161. package/dist/tests/integration/neural/personalization.test.d.ts.map +1 -0
  162. package/dist/tests/integration/neural/personalization.test.js +304 -0
  163. package/dist/tests/integration/neural/personalization.test.js.map +1 -0
  164. package/dist/tests/integration/neural/preference-learner.test.d.ts +23 -0
  165. package/dist/tests/integration/neural/preference-learner.test.d.ts.map +1 -0
  166. package/dist/tests/integration/neural/preference-learner.test.js +289 -0
  167. package/dist/tests/integration/neural/preference-learner.test.js.map +1 -0
  168. package/dist/tests/integration/neural/privacy.test.d.ts +19 -0
  169. package/dist/tests/integration/neural/privacy.test.d.ts.map +1 -0
  170. package/dist/tests/integration/neural/privacy.test.js +249 -0
  171. package/dist/tests/integration/neural/privacy.test.js.map +1 -0
  172. package/dist/tests/integration/neural/setup.d.ts +175 -0
  173. package/dist/tests/integration/neural/setup.d.ts.map +1 -0
  174. package/dist/tests/integration/neural/setup.js +487 -0
  175. package/dist/tests/integration/neural/setup.js.map +1 -0
  176. package/dist/tests/integration/neural/signal-collection.test.d.ts +21 -0
  177. package/dist/tests/integration/neural/signal-collection.test.d.ts.map +1 -0
  178. package/dist/tests/integration/neural/signal-collection.test.js +232 -0
  179. package/dist/tests/integration/neural/signal-collection.test.js.map +1 -0
  180. package/dist/tests/learning/PatternStore.test.d.ts +8 -0
  181. package/dist/tests/learning/PatternStore.test.d.ts.map +1 -0
  182. package/dist/tests/learning/PatternStore.test.js +589 -0
  183. package/dist/tests/learning/PatternStore.test.js.map +1 -0
  184. package/dist/tests/learning/ReasoningBankIntegration.test.d.ts +8 -0
  185. package/dist/tests/learning/ReasoningBankIntegration.test.d.ts.map +1 -0
  186. package/dist/tests/learning/ReasoningBankIntegration.test.js +269 -0
  187. package/dist/tests/learning/ReasoningBankIntegration.test.js.map +1 -0
  188. package/dist/tests/routing/SONARouter.test.d.ts +8 -0
  189. package/dist/tests/routing/SONARouter.test.d.ts.map +1 -0
  190. package/dist/tests/routing/SONARouter.test.js +400 -0
  191. package/dist/tests/routing/SONARouter.test.js.map +1 -0
  192. package/dist/tests/security/ContinuousSecurity.test.js +10 -12
  193. package/dist/tests/security/ContinuousSecurity.test.js.map +1 -1
  194. package/dist/tests/security/SkillSandbox.test.d.ts +8 -0
  195. package/dist/tests/security/SkillSandbox.test.d.ts.map +1 -0
  196. package/dist/tests/security/SkillSandbox.test.js +321 -0
  197. package/dist/tests/security/SkillSandbox.test.js.map +1 -0
  198. package/dist/tests/sync/SyncEngine.test.js +4 -2
  199. package/dist/tests/sync/SyncEngine.test.js.map +1 -1
  200. package/dist/tests/testing/MultiLLMProvider.test.d.ts +14 -0
  201. package/dist/tests/testing/MultiLLMProvider.test.d.ts.map +1 -0
  202. package/dist/tests/testing/MultiLLMProvider.test.js +438 -0
  203. package/dist/tests/testing/MultiLLMProvider.test.js.map +1 -0
  204. package/package.json +16 -3
@@ -0,0 +1,589 @@
1
+ /**
2
+ * SMI-1522: PatternStore with EWC++ Tests
3
+ *
4
+ * Tests for the PatternStore class that implements Elastic Weight
5
+ * Consolidation++ for catastrophic forgetting prevention.
6
+ */
7
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
8
+ import { PatternStore, createPatternStore, FisherInformationMatrix, DEFAULT_EWC_CONFIG, PATTERN_REWARDS, } from '../../src/learning/PatternStore.js';
9
+ describe('PatternStore', () => {
10
+ let store;
11
+ const mockContext = {
12
+ installedSkills: ['anthropic/commit', 'anthropic/review-pr'],
13
+ frameworks: ['react', 'typescript'],
14
+ keywords: ['testing', 'jest'],
15
+ timeOfDay: 'afternoon',
16
+ dayType: 'weekday',
17
+ };
18
+ const mockSkill = {
19
+ skillId: 'community/jest-helper',
20
+ category: 'testing',
21
+ trustTier: 'community',
22
+ keywords: ['jest', 'testing', 'unit-test'],
23
+ qualityScore: 85,
24
+ installCount: 500,
25
+ };
26
+ const mockPattern = {
27
+ context: mockContext,
28
+ skill: mockSkill,
29
+ originalScore: 0.85,
30
+ source: 'recommend',
31
+ };
32
+ const acceptOutcome = {
33
+ type: 'accept',
34
+ reward: 1.0,
35
+ confidence: 1.0,
36
+ };
37
+ const dismissOutcome = {
38
+ type: 'dismiss',
39
+ reward: -0.5,
40
+ };
41
+ beforeEach(async () => {
42
+ store = await createPatternStore({
43
+ autoConsolidate: false, // Manual consolidation in tests
44
+ ewc: {
45
+ consolidationThreshold: 0.05,
46
+ maxPatterns: 100,
47
+ },
48
+ });
49
+ });
50
+ afterEach(() => {
51
+ store.close();
52
+ });
53
+ describe('initialization', () => {
54
+ it('should create instance with default config', async () => {
55
+ const instance = new PatternStore();
56
+ await instance.initialize();
57
+ expect(instance).toBeInstanceOf(PatternStore);
58
+ instance.close();
59
+ });
60
+ it('should create initialized instance via factory', async () => {
61
+ const instance = await createPatternStore();
62
+ expect(instance).toBeInstanceOf(PatternStore);
63
+ instance.close();
64
+ });
65
+ it('should throw if methods called before initialization', async () => {
66
+ const uninitialized = new PatternStore();
67
+ await expect(uninitialized.storePattern(mockPattern, acceptOutcome)).rejects.toThrow('not initialized');
68
+ });
69
+ it('should persist configuration', async () => {
70
+ const instance = await createPatternStore({
71
+ dimensions: 256,
72
+ ewc: {
73
+ lambda: 10.0,
74
+ fisherDecay: 0.9,
75
+ },
76
+ });
77
+ // No direct config accessor, but creation should succeed
78
+ expect(instance).toBeInstanceOf(PatternStore);
79
+ instance.close();
80
+ });
81
+ });
82
+ describe('storePattern', () => {
83
+ it('should store a new pattern and return ID', async () => {
84
+ const patternId = await store.storePattern(mockPattern, acceptOutcome);
85
+ expect(patternId).toBeDefined();
86
+ expect(typeof patternId).toBe('string');
87
+ expect(patternId.length).toBeGreaterThan(0);
88
+ });
89
+ it('should store pattern with custom ID', async () => {
90
+ const customPattern = {
91
+ ...mockPattern,
92
+ id: 'custom-pattern-id',
93
+ };
94
+ const patternId = await store.storePattern(customPattern, acceptOutcome);
95
+ expect(patternId).toBe('custom-pattern-id');
96
+ });
97
+ it('should calculate initial importance from outcome reward', async () => {
98
+ const patternId = await store.storePattern(mockPattern, acceptOutcome);
99
+ const importance = store.getPatternImportance(patternId);
100
+ expect(importance).toBeGreaterThan(0);
101
+ });
102
+ it('should give higher importance to positive outcomes', async () => {
103
+ const positiveId = await store.storePattern(mockPattern, acceptOutcome);
104
+ const negativeId = await store.storePattern({ ...mockPattern, skill: { ...mockSkill, skillId: 'other/skill' } }, dismissOutcome);
105
+ const positiveImportance = store.getPatternImportance(positiveId);
106
+ const negativeImportance = store.getPatternImportance(negativeId);
107
+ // Positive outcomes get 1.5x boost
108
+ expect(positiveImportance).toBeGreaterThan(negativeImportance);
109
+ });
110
+ it('should update existing pattern if very similar', async () => {
111
+ const firstId = await store.storePattern(mockPattern, acceptOutcome);
112
+ // Store nearly identical pattern
113
+ const samePatternAgain = await store.storePattern(mockPattern, {
114
+ type: 'usage',
115
+ reward: 0.3,
116
+ });
117
+ // Should return same ID since patterns are very similar
118
+ expect(samePatternAgain).toBe(firstId);
119
+ });
120
+ it('should store different patterns separately', async () => {
121
+ const firstId = await store.storePattern(mockPattern, acceptOutcome);
122
+ // Store different pattern
123
+ const differentPattern = {
124
+ context: {
125
+ installedSkills: ['other/skill'],
126
+ frameworks: ['vue', 'python'],
127
+ keywords: ['different', 'keywords'],
128
+ },
129
+ skill: { skillId: 'other/different-skill', category: 'devops' },
130
+ originalScore: 0.6,
131
+ source: 'search',
132
+ };
133
+ const secondId = await store.storePattern(differentPattern, acceptOutcome);
134
+ expect(secondId).not.toBe(firstId);
135
+ });
136
+ });
137
+ describe('findSimilarPatterns', () => {
138
+ beforeEach(async () => {
139
+ // Seed some patterns
140
+ await store.storePattern(mockPattern, acceptOutcome);
141
+ await store.storePattern({
142
+ context: { ...mockContext, frameworks: ['vue'] },
143
+ skill: { ...mockSkill, skillId: 'community/vue-helper' },
144
+ originalScore: 0.75,
145
+ source: 'recommend',
146
+ }, acceptOutcome);
147
+ await store.storePattern({
148
+ context: { ...mockContext, keywords: ['python'] },
149
+ skill: { ...mockSkill, skillId: 'community/pytest-helper' },
150
+ originalScore: 0.65,
151
+ source: 'search',
152
+ }, dismissOutcome);
153
+ });
154
+ it('should find similar patterns by context', async () => {
155
+ const results = await store.findSimilarPatterns({
156
+ context: mockContext,
157
+ });
158
+ expect(results.length).toBeGreaterThan(0);
159
+ expect(results[0].similarity).toBeGreaterThan(0);
160
+ expect(results[0].weightedSimilarity).toBeGreaterThan(0);
161
+ });
162
+ it('should return patterns sorted by weighted similarity', async () => {
163
+ const results = await store.findSimilarPatterns({
164
+ context: mockContext,
165
+ });
166
+ for (let i = 1; i < results.length; i++) {
167
+ expect(results[i - 1].weightedSimilarity).toBeGreaterThanOrEqual(results[i].weightedSimilarity);
168
+ }
169
+ });
170
+ it('should assign correct ranks', async () => {
171
+ const results = await store.findSimilarPatterns({
172
+ context: mockContext,
173
+ });
174
+ for (let i = 0; i < results.length; i++) {
175
+ expect(results[i].rank).toBe(i + 1);
176
+ }
177
+ });
178
+ it('should filter by skillId', async () => {
179
+ const results = await store.findSimilarPatterns({
180
+ context: mockContext,
181
+ skillId: 'community/jest-helper',
182
+ });
183
+ expect(results.length).toBeGreaterThan(0);
184
+ for (const result of results) {
185
+ expect(result.pattern.skill.skillId).toBe('community/jest-helper');
186
+ }
187
+ });
188
+ it('should filter by category', async () => {
189
+ const results = await store.findSimilarPatterns({
190
+ context: mockContext,
191
+ category: 'testing',
192
+ });
193
+ for (const result of results) {
194
+ expect(result.pattern.skill.category).toBe('testing');
195
+ }
196
+ });
197
+ it('should filter by minimum importance', async () => {
198
+ const results = await store.findSimilarPatterns({
199
+ context: mockContext,
200
+ minImportance: 0.05,
201
+ });
202
+ for (const result of results) {
203
+ expect(result.pattern.importance).toBeGreaterThanOrEqual(0.05);
204
+ }
205
+ });
206
+ it('should filter by positiveOnly', async () => {
207
+ const results = await store.findSimilarPatterns({
208
+ context: mockContext,
209
+ positiveOnly: true,
210
+ });
211
+ for (const result of results) {
212
+ expect(result.pattern.outcome.reward).toBeGreaterThan(0);
213
+ }
214
+ });
215
+ it('should respect limit parameter', async () => {
216
+ const results = await store.findSimilarPatterns({ context: mockContext }, 2);
217
+ expect(results.length).toBeLessThanOrEqual(2);
218
+ });
219
+ });
220
+ describe('consolidate', () => {
221
+ it('should skip consolidation if threshold not reached', async () => {
222
+ // Store many patterns first to establish baseline
223
+ for (let i = 0; i < 20; i++) {
224
+ await store.storePattern({
225
+ context: { ...mockContext, keywords: [`baseline-${i}`] },
226
+ skill: { ...mockSkill, skillId: `baseline/skill-${i}` },
227
+ originalScore: 0.8,
228
+ source: 'recommend',
229
+ }, acceptOutcome);
230
+ }
231
+ // Force consolidation to reset the counter
232
+ await store.consolidate();
233
+ // Now add just one pattern (well below 5% threshold)
234
+ await store.storePattern({ ...mockPattern, skill: { ...mockSkill, skillId: 'single/new' } }, acceptOutcome);
235
+ const result = await store.consolidate();
236
+ expect(result.consolidated).toBe(false);
237
+ expect(result.patternsProcessed).toBe(0);
238
+ });
239
+ it('should consolidate when threshold is reached', async () => {
240
+ // Store enough patterns to trigger consolidation
241
+ for (let i = 0; i < 20; i++) {
242
+ await store.storePattern({
243
+ context: { ...mockContext, keywords: [`keyword-${i}`] },
244
+ skill: { ...mockSkill, skillId: `skill/skill-${i}` },
245
+ originalScore: 0.5 + Math.random() * 0.5,
246
+ source: 'recommend',
247
+ }, Math.random() > 0.3 ? acceptOutcome : dismissOutcome);
248
+ }
249
+ const result = await store.consolidate();
250
+ expect(result.consolidated).toBe(true);
251
+ expect(result.patternsProcessed).toBeGreaterThan(0);
252
+ });
253
+ it('should achieve >= 95% preservation rate', async () => {
254
+ // Store patterns with varying importance
255
+ for (let i = 0; i < 30; i++) {
256
+ await store.storePattern({
257
+ context: { ...mockContext, keywords: [`keyword-${i}`] },
258
+ skill: { ...mockSkill, skillId: `skill/skill-${i}` },
259
+ originalScore: 0.5 + Math.random() * 0.5,
260
+ source: 'recommend',
261
+ }, acceptOutcome);
262
+ }
263
+ const result = await store.consolidate();
264
+ if (result.consolidated) {
265
+ expect(result.preservationRate).toBeGreaterThanOrEqual(0.95);
266
+ }
267
+ });
268
+ it('should prune low-importance patterns', async () => {
269
+ // Store many patterns
270
+ for (let i = 0; i < 50; i++) {
271
+ await store.storePattern({
272
+ context: { ...mockContext, keywords: [`keyword-${i}`] },
273
+ skill: { ...mockSkill, skillId: `skill/skill-${i}` },
274
+ originalScore: 0.5 + Math.random() * 0.5,
275
+ source: 'recommend',
276
+ }, i % 5 === 0 ? dismissOutcome : acceptOutcome);
277
+ }
278
+ const result = await store.consolidate();
279
+ if (result.consolidated) {
280
+ expect(result.patternsPruned).toBeGreaterThanOrEqual(0);
281
+ }
282
+ });
283
+ it('should update average importance', async () => {
284
+ for (let i = 0; i < 25; i++) {
285
+ await store.storePattern({
286
+ context: { ...mockContext, keywords: [`keyword-${i}`] },
287
+ skill: { ...mockSkill, skillId: `skill/skill-${i}` },
288
+ originalScore: 0.5,
289
+ source: 'recommend',
290
+ }, acceptOutcome);
291
+ }
292
+ const result = await store.consolidate();
293
+ expect(result.averageImportance).toBeGreaterThanOrEqual(0);
294
+ });
295
+ });
296
+ describe('getMetrics', () => {
297
+ it('should return metrics for empty store', async () => {
298
+ const metrics = store.getMetrics();
299
+ expect(metrics.totalPatterns).toBe(0);
300
+ expect(metrics.averageImportance).toBe(0);
301
+ expect(metrics.consolidation.totalConsolidations).toBe(0);
302
+ });
303
+ it('should track patterns by outcome type', async () => {
304
+ await store.storePattern(mockPattern, acceptOutcome);
305
+ await store.storePattern({ ...mockPattern, skill: { ...mockSkill, skillId: 'skill/2' } }, dismissOutcome);
306
+ const metrics = store.getMetrics();
307
+ expect(metrics.patternsByOutcome.accept).toBeGreaterThanOrEqual(1);
308
+ expect(metrics.patternsByOutcome.dismiss).toBeGreaterThanOrEqual(1);
309
+ });
310
+ it('should track query performance', async () => {
311
+ await store.storePattern(mockPattern, acceptOutcome);
312
+ // Get initial query count (storePattern also uses findSimilarPatterns internally)
313
+ const initialMetrics = store.getMetrics();
314
+ const initialQueries = initialMetrics.queryPerformance.queriesPerformed;
315
+ // Perform additional queries
316
+ await store.findSimilarPatterns({ context: mockContext });
317
+ await store.findSimilarPatterns({ context: mockContext });
318
+ const metrics = store.getMetrics();
319
+ expect(metrics.queryPerformance.queriesPerformed).toBe(initialQueries + 2);
320
+ expect(metrics.queryPerformance.averageLatencyMs).toBeGreaterThanOrEqual(0);
321
+ });
322
+ it('should track consolidation history', async () => {
323
+ // Store patterns and force consolidation
324
+ for (let i = 0; i < 30; i++) {
325
+ await store.storePattern({
326
+ context: { ...mockContext, keywords: [`keyword-${i}`] },
327
+ skill: { ...mockSkill, skillId: `skill/skill-${i}` },
328
+ originalScore: 0.5,
329
+ source: 'recommend',
330
+ }, acceptOutcome);
331
+ }
332
+ await store.consolidate();
333
+ const metrics = store.getMetrics();
334
+ expect(metrics.consolidation.totalConsolidations).toBeGreaterThanOrEqual(1);
335
+ });
336
+ });
337
+ });
338
+ describe('FisherInformationMatrix', () => {
339
+ let matrix;
340
+ const dimensions = 384;
341
+ beforeEach(() => {
342
+ matrix = new FisherInformationMatrix(dimensions);
343
+ });
344
+ describe('initialization', () => {
345
+ it('should create with correct dimensions', () => {
346
+ const importanceVector = matrix.getImportanceVector();
347
+ expect(importanceVector.length).toBe(dimensions);
348
+ });
349
+ it('should start with zero importance', () => {
350
+ expect(matrix.getAverageImportance()).toBe(0);
351
+ expect(matrix.getImportance(0)).toBe(0);
352
+ expect(matrix.getImportance(dimensions - 1)).toBe(0);
353
+ });
354
+ });
355
+ describe('update', () => {
356
+ it('should update importance based on gradient', () => {
357
+ const gradient = new Float32Array(dimensions);
358
+ gradient.fill(0.5);
359
+ matrix.update(gradient);
360
+ expect(matrix.getAverageImportance()).toBeGreaterThan(0);
361
+ });
362
+ it('should accumulate importance over multiple updates', () => {
363
+ const gradient = new Float32Array(dimensions);
364
+ gradient.fill(0.5);
365
+ matrix.update(gradient);
366
+ matrix.getAverageImportance(); // First update
367
+ matrix.update(gradient);
368
+ const secondAvg = matrix.getAverageImportance();
369
+ // Running mean should stabilize
370
+ expect(secondAvg).toBeGreaterThan(0);
371
+ });
372
+ it('should track update count', () => {
373
+ const gradient = new Float32Array(dimensions);
374
+ gradient.fill(0.5);
375
+ expect(matrix.getUpdateCount()).toBe(0);
376
+ matrix.update(gradient);
377
+ expect(matrix.getUpdateCount()).toBe(1);
378
+ matrix.update(gradient);
379
+ expect(matrix.getUpdateCount()).toBe(2);
380
+ });
381
+ });
382
+ describe('decay', () => {
383
+ it('should reduce importance values', () => {
384
+ const gradient = new Float32Array(dimensions);
385
+ gradient.fill(1.0);
386
+ matrix.update(gradient);
387
+ const beforeDecay = matrix.getAverageImportance();
388
+ matrix.decay(0.5);
389
+ const afterDecay = matrix.getAverageImportance();
390
+ expect(afterDecay).toBeLessThan(beforeDecay);
391
+ });
392
+ it('should not affect zero importance', () => {
393
+ matrix.decay(0.5);
394
+ expect(matrix.getAverageImportance()).toBe(0);
395
+ });
396
+ });
397
+ describe('serialization', () => {
398
+ it('should serialize and deserialize correctly', () => {
399
+ const gradient = new Float32Array(dimensions);
400
+ gradient.fill(0.75);
401
+ matrix.update(gradient);
402
+ const originalAvg = matrix.getAverageImportance();
403
+ const originalCount = matrix.getUpdateCount();
404
+ const serialized = matrix.serialize();
405
+ const newMatrix = new FisherInformationMatrix(dimensions);
406
+ newMatrix.deserialize(serialized);
407
+ expect(newMatrix.getAverageImportance()).toBeCloseTo(originalAvg, 5);
408
+ expect(newMatrix.getUpdateCount()).toBe(originalCount);
409
+ });
410
+ it('should preserve dimension-level importance', () => {
411
+ const gradient = new Float32Array(dimensions);
412
+ for (let i = 0; i < dimensions; i++) {
413
+ gradient[i] = i / dimensions;
414
+ }
415
+ matrix.update(gradient);
416
+ const serialized = matrix.serialize();
417
+ const newMatrix = new FisherInformationMatrix(dimensions);
418
+ newMatrix.deserialize(serialized);
419
+ for (let i = 0; i < dimensions; i++) {
420
+ expect(newMatrix.getImportance(i)).toBeCloseTo(matrix.getImportance(i), 5);
421
+ }
422
+ });
423
+ });
424
+ describe('reset', () => {
425
+ it('should reset all values to zero', () => {
426
+ const gradient = new Float32Array(dimensions);
427
+ gradient.fill(1.0);
428
+ matrix.update(gradient);
429
+ expect(matrix.getAverageImportance()).toBeGreaterThan(0);
430
+ matrix.reset();
431
+ expect(matrix.getAverageImportance()).toBe(0);
432
+ expect(matrix.getUpdateCount()).toBe(0);
433
+ });
434
+ });
435
+ });
436
+ describe('Pattern Rewards', () => {
437
+ it('should have correct reward values', () => {
438
+ expect(PATTERN_REWARDS.accept).toBe(1.0);
439
+ expect(PATTERN_REWARDS.usage).toBe(0.3);
440
+ expect(PATTERN_REWARDS.frequent).toBe(0.5);
441
+ expect(PATTERN_REWARDS.dismiss).toBe(-0.5);
442
+ expect(PATTERN_REWARDS.abandonment).toBe(-0.3);
443
+ expect(PATTERN_REWARDS.uninstall).toBe(-0.7);
444
+ });
445
+ it('should align with ReasoningBank trajectory rewards', () => {
446
+ // These should match TRAJECTORY_REWARDS in ReasoningBankIntegration
447
+ expect(PATTERN_REWARDS.accept).toBeGreaterThan(0);
448
+ expect(PATTERN_REWARDS.dismiss).toBeLessThan(0);
449
+ expect(PATTERN_REWARDS.uninstall).toBeLessThan(PATTERN_REWARDS.dismiss);
450
+ });
451
+ });
452
+ describe('Default EWC Config', () => {
453
+ it('should have reasonable default values', () => {
454
+ expect(DEFAULT_EWC_CONFIG.lambda).toBe(5.0);
455
+ expect(DEFAULT_EWC_CONFIG.fisherDecay).toBe(0.95);
456
+ expect(DEFAULT_EWC_CONFIG.importanceThreshold).toBe(0.01);
457
+ expect(DEFAULT_EWC_CONFIG.fisherSampleSize).toBe(100);
458
+ expect(DEFAULT_EWC_CONFIG.consolidationThreshold).toBe(0.1);
459
+ expect(DEFAULT_EWC_CONFIG.maxPatterns).toBe(10000);
460
+ });
461
+ it('should have fisher decay in valid range', () => {
462
+ expect(DEFAULT_EWC_CONFIG.fisherDecay).toBeGreaterThan(0.8);
463
+ expect(DEFAULT_EWC_CONFIG.fisherDecay).toBeLessThanOrEqual(1.0);
464
+ });
465
+ });
466
+ describe('EWC++ Catastrophic Forgetting Prevention', () => {
467
+ let store;
468
+ const importantContext = {
469
+ installedSkills: ['anthropic/commit'],
470
+ frameworks: ['react', 'typescript'],
471
+ keywords: ['testing', 'jest'],
472
+ };
473
+ const importantPattern = {
474
+ context: importantContext,
475
+ skill: { skillId: 'community/jest-helper', category: 'testing' },
476
+ originalScore: 0.95,
477
+ source: 'recommend',
478
+ };
479
+ beforeEach(async () => {
480
+ store = await createPatternStore({
481
+ autoConsolidate: false,
482
+ ewc: {
483
+ consolidationThreshold: 0.05,
484
+ maxPatterns: 100,
485
+ },
486
+ });
487
+ });
488
+ afterEach(() => {
489
+ store.close();
490
+ });
491
+ it('should preserve important patterns across many new insertions', async () => {
492
+ // Store the important pattern
493
+ await store.storePattern(importantPattern, {
494
+ type: 'accept',
495
+ reward: 1.0,
496
+ });
497
+ // Access it multiple times to increase importance
498
+ for (let i = 0; i < 10; i++) {
499
+ await store.findSimilarPatterns({
500
+ context: importantContext,
501
+ skillId: 'community/jest-helper',
502
+ });
503
+ }
504
+ // Store many new patterns
505
+ for (let i = 0; i < 50; i++) {
506
+ await store.storePattern({
507
+ context: {
508
+ installedSkills: ['other/skill'],
509
+ frameworks: ['vue', 'python'],
510
+ keywords: [`keyword-${i}`],
511
+ },
512
+ skill: { skillId: `new-skill-${i}`, category: 'testing' },
513
+ originalScore: 0.5,
514
+ source: 'recommend',
515
+ }, {
516
+ type: 'accept',
517
+ reward: 0.8,
518
+ });
519
+ }
520
+ // Consolidate
521
+ const result = await store.consolidate();
522
+ // Verify important pattern was preserved
523
+ const preserved = await store.findSimilarPatterns({
524
+ context: importantContext,
525
+ skillId: 'community/jest-helper',
526
+ minImportance: 0.01,
527
+ });
528
+ expect(preserved.length).toBeGreaterThan(0);
529
+ expect(result.preservationRate).toBeGreaterThanOrEqual(0.95);
530
+ });
531
+ it('should allow low-importance patterns to be overwritten', async () => {
532
+ // Store a low-importance pattern
533
+ await store.storePattern({
534
+ context: { installedSkills: [] },
535
+ skill: { skillId: 'low/importance' },
536
+ originalScore: 0.1,
537
+ source: 'search',
538
+ }, {
539
+ type: 'dismiss',
540
+ reward: -0.5,
541
+ confidence: 0.3,
542
+ });
543
+ // Store many patterns and consolidate
544
+ for (let i = 0; i < 50; i++) {
545
+ await store.storePattern({
546
+ context: { installedSkills: [], keywords: [`key-${i}`] },
547
+ skill: { skillId: `skill-${i}` },
548
+ originalScore: 0.8,
549
+ source: 'recommend',
550
+ }, { type: 'accept', reward: 1.0 });
551
+ }
552
+ const result = await store.consolidate();
553
+ // Low importance patterns may be pruned
554
+ expect(result.consolidated).toBe(true);
555
+ });
556
+ it('should maintain 95% preservation after multiple consolidation cycles', async () => {
557
+ // Seed initial important patterns
558
+ for (let i = 0; i < 20; i++) {
559
+ await store.storePattern({
560
+ context: { ...importantContext, keywords: [`important-${i}`] },
561
+ skill: { skillId: `important/skill-${i}`, category: 'testing' },
562
+ originalScore: 0.9,
563
+ source: 'recommend',
564
+ }, { type: 'accept', reward: 1.0 });
565
+ }
566
+ // Run multiple consolidation cycles
567
+ const preservationRates = [];
568
+ for (let cycle = 0; cycle < 3; cycle++) {
569
+ // Add new patterns each cycle
570
+ for (let i = 0; i < 15; i++) {
571
+ await store.storePattern({
572
+ context: { installedSkills: [], keywords: [`cycle-${cycle}-${i}`] },
573
+ skill: { skillId: `cycle-${cycle}-skill-${i}` },
574
+ originalScore: 0.5,
575
+ source: 'search',
576
+ }, { type: 'accept', reward: 0.7 });
577
+ }
578
+ const result = await store.consolidate();
579
+ if (result.consolidated) {
580
+ preservationRates.push(result.preservationRate);
581
+ }
582
+ }
583
+ // All consolidation cycles should maintain high preservation
584
+ for (const rate of preservationRates) {
585
+ expect(rate).toBeGreaterThanOrEqual(0.9);
586
+ }
587
+ });
588
+ });
589
+ //# sourceMappingURL=PatternStore.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PatternStore.test.js","sourceRoot":"","sources":["../../../tests/learning/PatternStore.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACpE,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,EAClB,eAAe,GAKhB,MAAM,oCAAoC,CAAA;AAE3C,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAI,KAAmB,CAAA;IAEvB,MAAM,WAAW,GAAiC;QAChD,eAAe,EAAE,CAAC,kBAAkB,EAAE,qBAAqB,CAAC;QAC5D,UAAU,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC;QACnC,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC;QAC7B,SAAS,EAAE,WAAW;QACtB,OAAO,EAAE,SAAS;KACnB,CAAA;IAED,MAAM,SAAS,GAAkB;QAC/B,OAAO,EAAE,uBAAuB;QAChC,QAAQ,EAAE,SAAS;QACnB,SAAS,EAAE,WAAW;QACtB,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC;QAC1C,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,GAAG;KAClB,CAAA;IAED,MAAM,WAAW,GAAY;QAC3B,OAAO,EAAE,WAAW;QACpB,KAAK,EAAE,SAAS;QAChB,aAAa,EAAE,IAAI;QACnB,MAAM,EAAE,WAAW;KACpB,CAAA;IAED,MAAM,aAAa,GAAmB;QACpC,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,GAAG;QACX,UAAU,EAAE,GAAG;KAChB,CAAA;IAED,MAAM,cAAc,GAAmB;QACrC,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,CAAC,GAAG;KACb,CAAA;IAED,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,KAAK,GAAG,MAAM,kBAAkB,CAAC;YAC/B,eAAe,EAAE,KAAK,EAAE,gCAAgC;YACxD,GAAG,EAAE;gBACH,sBAAsB,EAAE,IAAI;gBAC5B,WAAW,EAAE,GAAG;aACjB;SACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,CAAC,KAAK,EAAE,CAAA;IACf,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAA;YACnC,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAA;YAC3B,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;YAC7C,QAAQ,CAAC,KAAK,EAAE,CAAA;QAClB,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,QAAQ,GAAG,MAAM,kBAAkB,EAAE,CAAA;YAC3C,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;YAC7C,QAAQ,CAAC,KAAK,EAAE,CAAA;QAClB,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,aAAa,GAAG,IAAI,YAAY,EAAE,CAAA;YAExC,MAAM,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAClF,iBAAiB,CAClB,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;YAC5C,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC;gBACxC,UAAU,EAAE,GAAG;gBACf,GAAG,EAAE;oBACH,MAAM,EAAE,IAAI;oBACZ,WAAW,EAAE,GAAG;iBACjB;aACF,CAAC,CAAA;YACF,yDAAyD;YACzD,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;YAC7C,QAAQ,CAAC,KAAK,EAAE,CAAA;QAClB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;YAEtE,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAA;YAC/B,MAAM,CAAC,OAAO,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACvC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QAC7C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,aAAa,GAAY;gBAC7B,GAAG,WAAW;gBACd,EAAE,EAAE,mBAAmB;aACxB,CAAA;YAED,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,aAAa,CAAC,CAAA;YACxE,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;QAC7C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YACvE,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;YAEtE,MAAM,UAAU,GAAG,KAAK,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAA;YACxD,MAAM,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QACvC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;YACvE,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,YAAY,CACzC,EAAE,GAAG,WAAW,EAAE,KAAK,EAAE,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,EACnE,cAAc,CACf,CAAA;YAED,MAAM,kBAAkB,GAAG,KAAK,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAA;YACjE,MAAM,kBAAkB,GAAG,KAAK,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAA;YAEjE,mCAAmC;YACnC,MAAM,CAAC,kBAAkB,CAAC,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAA;QAChE,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;YAEpE,iCAAiC;YACjC,MAAM,gBAAgB,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE;gBAC7D,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,GAAG;aACZ,CAAC,CAAA;YAEF,wDAAwD;YACxD,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;YAEpE,0BAA0B;YAC1B,MAAM,gBAAgB,GAAY;gBAChC,OAAO,EAAE;oBACP,eAAe,EAAE,CAAC,aAAa,CAAC;oBAChC,UAAU,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC;oBAC7B,QAAQ,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC;iBACpC;gBACD,KAAK,EAAE,EAAE,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,QAAQ,EAAE;gBAC/D,aAAa,EAAE,GAAG;gBAClB,MAAM,EAAE,QAAQ;aACjB,CAAA;YAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAA;YAC1E,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACpC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,UAAU,CAAC,KAAK,IAAI,EAAE;YACpB,qBAAqB;YACrB,MAAM,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;YACpD,MAAM,KAAK,CAAC,YAAY,CACtB;gBACE,OAAO,EAAE,EAAE,GAAG,WAAW,EAAE,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE;gBAChD,KAAK,EAAE,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,sBAAsB,EAAE;gBACxD,aAAa,EAAE,IAAI;gBACnB,MAAM,EAAE,WAAW;aACpB,EACD,aAAa,CACd,CAAA;YACD,MAAM,KAAK,CAAC,YAAY,CACtB;gBACE,OAAO,EAAE,EAAE,GAAG,WAAW,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;gBACjD,KAAK,EAAE,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,yBAAyB,EAAE;gBAC3D,aAAa,EAAE,IAAI;gBACnB,MAAM,EAAE,QAAQ;aACjB,EACD,cAAc,CACf,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,mBAAmB,CAAC;gBAC9C,OAAO,EAAE,WAAW;aACrB,CAAC,CAAA;YAEF,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YACzC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YAChD,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QAC1D,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,mBAAmB,CAAC;gBAC9C,OAAO,EAAE,WAAW;aACrB,CAAC,CAAA;YAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACxC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,sBAAsB,CAC9D,OAAO,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAC9B,CAAA;YACH,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC3C,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,mBAAmB,CAAC;gBAC9C,OAAO,EAAE,WAAW;aACrB,CAAC,CAAA;YAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACxC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YACrC,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;YACxC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,mBAAmB,CAAC;gBAC9C,OAAO,EAAE,WAAW;gBACpB,OAAO,EAAE,uBAAuB;aACjC,CAAC,CAAA;YAEF,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YACzC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;YACpE,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;YACzC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,mBAAmB,CAAC;gBAC9C,OAAO,EAAE,WAAW;gBACpB,QAAQ,EAAE,SAAS;aACpB,CAAC,CAAA;YAEF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACvD,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,mBAAmB,CAAC;gBAC9C,OAAO,EAAE,WAAW;gBACpB,aAAa,EAAE,IAAI;aACpB,CAAC,CAAA;YAEF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAA;YAChE,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;YAC7C,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,mBAAmB,CAAC;gBAC9C,OAAO,EAAE,WAAW;gBACpB,YAAY,EAAE,IAAI;aACnB,CAAC,CAAA;YAEF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YAC1D,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;YAC9C,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAA;YAE5E,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAA;QAC/C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,kDAAkD;YAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,MAAM,KAAK,CAAC,YAAY,CACtB;oBACE,OAAO,EAAE,EAAE,GAAG,WAAW,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE;oBACxD,KAAK,EAAE,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,kBAAkB,CAAC,EAAE,EAAE;oBACvD,aAAa,EAAE,GAAG;oBAClB,MAAM,EAAE,WAAW;iBACpB,EACD,aAAa,CACd,CAAA;YACH,CAAC;YAED,2CAA2C;YAC3C,MAAM,KAAK,CAAC,WAAW,EAAE,CAAA;YAEzB,qDAAqD;YACrD,MAAM,KAAK,CAAC,YAAY,CACtB,EAAE,GAAG,WAAW,EAAE,KAAK,EAAE,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,EAClE,aAAa,CACd,CAAA;YAED,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAA;YAExC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACvC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,iDAAiD;YACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,MAAM,KAAK,CAAC,YAAY,CACtB;oBACE,OAAO,EAAE,EAAE,GAAG,WAAW,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE;oBACvD,KAAK,EAAE,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,EAAE;oBACpD,aAAa,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG;oBACxC,MAAM,EAAE,WAAW;iBACpB,EACD,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CACrD,CAAA;YACH,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAA;YAExC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACtC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QACrD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,yCAAyC;YACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,MAAM,KAAK,CAAC,YAAY,CACtB;oBACE,OAAO,EAAE,EAAE,GAAG,WAAW,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE;oBACvD,KAAK,EAAE,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,EAAE;oBACpD,aAAa,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG;oBACxC,MAAM,EAAE,WAAW;iBACpB,EACD,aAAa,CACd,CAAA;YACH,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAA;YAExC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACxB,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAA;YAC9D,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,sBAAsB;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,MAAM,KAAK,CAAC,YAAY,CACtB;oBACE,OAAO,EAAE,EAAE,GAAG,WAAW,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE;oBACvD,KAAK,EAAE,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,EAAE;oBACpD,aAAa,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG;oBACxC,MAAM,EAAE,WAAW;iBACpB,EACD,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAC7C,CAAA;YACH,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAA;YAExC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACxB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAA;YACzD,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;YAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,MAAM,KAAK,CAAC,YAAY,CACtB;oBACE,OAAO,EAAE,EAAE,GAAG,WAAW,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE;oBACvD,KAAK,EAAE,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,EAAE;oBACpD,aAAa,EAAE,GAAG;oBAClB,MAAM,EAAE,WAAW;iBACpB,EACD,aAAa,CACd,CAAA;YACH,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAA;YAExC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAA;QAC5D,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAA;YAElC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACrC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACzC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC3D,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;YACpD,MAAM,KAAK,CAAC,YAAY,CACtB,EAAE,GAAG,WAAW,EAAE,KAAK,EAAE,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAC/D,cAAc,CACf,CAAA;YAED,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAA;YAElC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAA;YAClE,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAA;QACrE,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;YAC9C,MAAM,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;YAEpD,kFAAkF;YAClF,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,EAAE,CAAA;YACzC,MAAM,cAAc,GAAG,cAAc,CAAC,gBAAgB,CAAC,gBAAgB,CAAA;YAEvE,6BAA6B;YAC7B,MAAM,KAAK,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAA;YACzD,MAAM,KAAK,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAA;YAEzD,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAA;YAElC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAA;YAC1E,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAA;QAC7E,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,yCAAyC;YACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,MAAM,KAAK,CAAC,YAAY,CACtB;oBACE,OAAO,EAAE,EAAE,GAAG,WAAW,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE;oBACvD,KAAK,EAAE,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,EAAE;oBACpD,aAAa,EAAE,GAAG;oBAClB,MAAM,EAAE,WAAW;iBACpB,EACD,aAAa,CACd,CAAA;YACH,CAAC;YAED,MAAM,KAAK,CAAC,WAAW,EAAE,CAAA;YAEzB,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAA;YAElC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAA;QAC7E,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,IAAI,MAA+B,CAAA;IACnC,MAAM,UAAU,GAAG,GAAG,CAAA;IAEtB,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAI,uBAAuB,CAAC,UAAU,CAAC,CAAA;IAClD,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,gBAAgB,GAAG,MAAM,CAAC,mBAAmB,EAAE,CAAA;YACrD,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAClD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAC7C,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACvC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACtD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,CAAA;YAC7C,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAElB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YAEvB,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QAC1D,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,CAAA;YAC7C,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAElB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACvB,MAAM,CAAC,oBAAoB,EAAE,CAAA,CAAC,eAAe;YAE7C,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACvB,MAAM,SAAS,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAAA;YAE/C,gCAAgC;YAChC,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QACtC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,CAAA;YAC7C,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAElB,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACvC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACvB,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACvC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACvB,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACzC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,CAAA;YAC7C,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAElB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACvB,MAAM,WAAW,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAAA;YAEjD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACjB,MAAM,UAAU,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAAA;YAEhD,MAAM,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAA;QAC9C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACjB,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC/C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,CAAA;YAC7C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAEnB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACvB,MAAM,WAAW,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAAA;YACjD,MAAM,aAAa,GAAG,MAAM,CAAC,cAAc,EAAE,CAAA;YAE7C,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE,CAAA;YAErC,MAAM,SAAS,GAAG,IAAI,uBAAuB,CAAC,UAAU,CAAC,CAAA;YACzD,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;YAEjC,MAAM,CAAC,SAAS,CAAC,oBAAoB,EAAE,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;YACpE,MAAM,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QACxD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,CAAA;YAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,UAAU,CAAA;YAC9B,CAAC;YAED,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YAEvB,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE,CAAA;YAErC,MAAM,SAAS,GAAG,IAAI,uBAAuB,CAAC,UAAU,CAAC,CAAA;YACzD,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;YAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YAC5E,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,CAAA;YAC7C,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAElB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACvB,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YAExD,MAAM,CAAC,KAAK,EAAE,CAAA;YAEd,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAC7C,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACzC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACxC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACvC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC1C,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;QAC1C,MAAM,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;QAC9C,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,oEAAoE;QACpE,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QACjD,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAC/C,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;IACzE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC3C,MAAM,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACjD,MAAM,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzD,MAAM,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACrD,MAAM,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC3D,MAAM,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;QAC3D,MAAM,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAA;IACjE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;IACxD,IAAI,KAAmB,CAAA;IAEvB,MAAM,gBAAgB,GAAiC;QACrD,eAAe,EAAE,CAAC,kBAAkB,CAAC;QACrC,UAAU,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC;QACnC,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC;KAC9B,CAAA;IAED,MAAM,gBAAgB,GAAY;QAChC,OAAO,EAAE,gBAAgB;QACzB,KAAK,EAAE,EAAE,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,SAAS,EAAE;QAChE,aAAa,EAAE,IAAI;QACnB,MAAM,EAAE,WAAW;KACpB,CAAA;IAED,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,KAAK,GAAG,MAAM,kBAAkB,CAAC;YAC/B,eAAe,EAAE,KAAK;YACtB,GAAG,EAAE;gBACH,sBAAsB,EAAE,IAAI;gBAC5B,WAAW,EAAE,GAAG;aACjB;SACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,CAAC,KAAK,EAAE,CAAA;IACf,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,8BAA8B;QAC9B,MAAM,KAAK,CAAC,YAAY,CAAC,gBAAgB,EAAE;YACzC,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,GAAG;SACZ,CAAC,CAAA;QAEF,kDAAkD;QAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAC,mBAAmB,CAAC;gBAC9B,OAAO,EAAE,gBAAgB;gBACzB,OAAO,EAAE,uBAAuB;aACjC,CAAC,CAAA;QACJ,CAAC;QAED,0BAA0B;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAC,YAAY,CACtB;gBACE,OAAO,EAAE;oBACP,eAAe,EAAE,CAAC,aAAa,CAAC;oBAChC,UAAU,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC;oBAC7B,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;iBAC3B;gBACD,KAAK,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE;gBACzD,aAAa,EAAE,GAAG;gBAClB,MAAM,EAAE,WAAW;aACpB,EACD;gBACE,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,GAAG;aACZ,CACF,CAAA;QACH,CAAC;QAED,cAAc;QACd,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAA;QAExC,yCAAyC;QACzC,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,mBAAmB,CAAC;YAChD,OAAO,EAAE,gBAAgB;YACzB,OAAO,EAAE,uBAAuB;YAChC,aAAa,EAAE,IAAI;SACpB,CAAC,CAAA;QAEF,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QAC3C,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAA;IAC9D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,iCAAiC;QACjC,MAAM,KAAK,CAAC,YAAY,CACtB;YACE,OAAO,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE;YAChC,KAAK,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE;YACpC,aAAa,EAAE,GAAG;YAClB,MAAM,EAAE,QAAQ;SACjB,EACD;YACE,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,CAAC,GAAG;YACZ,UAAU,EAAE,GAAG;SAChB,CACF,CAAA;QAED,sCAAsC;QACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAC,YAAY,CACtB;gBACE,OAAO,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;gBACxD,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE;gBAChC,aAAa,EAAE,GAAG;gBAClB,MAAM,EAAE,WAAW;aACpB,EACD,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,CAChC,CAAA;QACH,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAA;QAExC,wCAAwC;QACxC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,kCAAkC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAC,YAAY,CACtB;gBACE,OAAO,EAAE,EAAE,GAAG,gBAAgB,EAAE,QAAQ,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE;gBAC9D,KAAK,EAAE,EAAE,OAAO,EAAE,mBAAmB,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE;gBAC/D,aAAa,EAAE,GAAG;gBAClB,MAAM,EAAE,WAAW;aACpB,EACD,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,CAChC,CAAA;QACH,CAAC;QAED,oCAAoC;QACpC,MAAM,iBAAiB,GAAa,EAAE,CAAA;QAEtC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YACvC,8BAA8B;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,MAAM,KAAK,CAAC,YAAY,CACtB;oBACE,OAAO,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,SAAS,KAAK,IAAI,CAAC,EAAE,CAAC,EAAE;oBACnE,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,KAAK,UAAU,CAAC,EAAE,EAAE;oBAC/C,aAAa,EAAE,GAAG;oBAClB,MAAM,EAAE,QAAQ;iBACjB,EACD,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,CAChC,CAAA;YACH,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAA;YACxC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACxB,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;YACjD,CAAC;QACH,CAAC;QAED,6DAA6D;QAC7D,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAA;QAC1C,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * SMI-1520: ReasoningBank Integration Tests
3
+ *
4
+ * Tests for the ReasoningBankIntegration class that bridges
5
+ * Skillsmith's learning loop with V3's intelligence module.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=ReasoningBankIntegration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReasoningBankIntegration.test.d.ts","sourceRoot":"","sources":["../../../tests/learning/ReasoningBankIntegration.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}