@trentapps/manager-protocol 1.1.3 → 1.2.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 (142) hide show
  1. package/README.md +28 -0
  2. package/dist/analyzers/CSSAnalyzer.d.ts +180 -8
  3. package/dist/analyzers/CSSAnalyzer.d.ts.map +1 -1
  4. package/dist/analyzers/CSSAnalyzer.js +561 -105
  5. package/dist/analyzers/CSSAnalyzer.js.map +1 -1
  6. package/dist/config/dashboard.d.ts +55 -0
  7. package/dist/config/dashboard.d.ts.map +1 -0
  8. package/dist/config/dashboard.js +103 -0
  9. package/dist/config/dashboard.js.map +1 -0
  10. package/dist/config/index.d.ts +7 -0
  11. package/dist/config/index.d.ts.map +1 -0
  12. package/dist/config/index.js +7 -0
  13. package/dist/config/index.js.map +1 -0
  14. package/dist/dashboard/httpDashboard.d.ts +100 -0
  15. package/dist/dashboard/httpDashboard.d.ts.map +1 -0
  16. package/dist/dashboard/httpDashboard.js +1276 -0
  17. package/dist/dashboard/httpDashboard.js.map +1 -0
  18. package/dist/dashboard/index.d.ts +6 -0
  19. package/dist/dashboard/index.d.ts.map +1 -0
  20. package/dist/dashboard/index.js +7 -0
  21. package/dist/dashboard/index.js.map +1 -0
  22. package/dist/engine/AuditLogger.d.ts +370 -2
  23. package/dist/engine/AuditLogger.d.ts.map +1 -1
  24. package/dist/engine/AuditLogger.js +1064 -24
  25. package/dist/engine/AuditLogger.js.map +1 -1
  26. package/dist/engine/GitHubClient.d.ts +183 -0
  27. package/dist/engine/GitHubClient.d.ts.map +1 -0
  28. package/dist/engine/GitHubClient.js +411 -0
  29. package/dist/engine/GitHubClient.js.map +1 -0
  30. package/dist/engine/RateLimiter.d.ts +5 -3
  31. package/dist/engine/RateLimiter.d.ts.map +1 -1
  32. package/dist/engine/RateLimiter.js +49 -72
  33. package/dist/engine/RateLimiter.js.map +1 -1
  34. package/dist/engine/RuleDependencyAnalyzer.d.ts +73 -0
  35. package/dist/engine/RuleDependencyAnalyzer.d.ts.map +1 -0
  36. package/dist/engine/RuleDependencyAnalyzer.js +475 -0
  37. package/dist/engine/RuleDependencyAnalyzer.js.map +1 -0
  38. package/dist/engine/RulesEngine.d.ts +102 -3
  39. package/dist/engine/RulesEngine.d.ts.map +1 -1
  40. package/dist/engine/RulesEngine.js +326 -21
  41. package/dist/engine/RulesEngine.js.map +1 -1
  42. package/dist/engine/TaskManager.d.ts +10 -14
  43. package/dist/engine/TaskManager.d.ts.map +1 -1
  44. package/dist/engine/TaskManager.js +169 -197
  45. package/dist/engine/TaskManager.js.map +1 -1
  46. package/dist/engine/index.d.ts +3 -0
  47. package/dist/engine/index.d.ts.map +1 -1
  48. package/dist/engine/index.js +5 -0
  49. package/dist/engine/index.js.map +1 -1
  50. package/dist/rules/azure.d.ts.map +1 -1
  51. package/dist/rules/azure.js +12 -14
  52. package/dist/rules/azure.js.map +1 -1
  53. package/dist/rules/compliance.d.ts.map +1 -1
  54. package/dist/rules/compliance.js +23 -41
  55. package/dist/rules/compliance.js.map +1 -1
  56. package/dist/rules/condition-optimizer.d.ts +151 -0
  57. package/dist/rules/condition-optimizer.d.ts.map +1 -0
  58. package/dist/rules/condition-optimizer.js +479 -0
  59. package/dist/rules/condition-optimizer.js.map +1 -0
  60. package/dist/rules/css.d.ts.map +1 -1
  61. package/dist/rules/css.js +538 -0
  62. package/dist/rules/css.js.map +1 -1
  63. package/dist/rules/field-standards.d.ts +1172 -0
  64. package/dist/rules/field-standards.d.ts.map +1 -0
  65. package/dist/rules/field-standards.js +908 -0
  66. package/dist/rules/field-standards.js.map +1 -0
  67. package/dist/rules/flask.d.ts.map +1 -1
  68. package/dist/rules/flask.js +18 -31
  69. package/dist/rules/flask.js.map +1 -1
  70. package/dist/rules/index.d.ts +220 -0
  71. package/dist/rules/index.d.ts.map +1 -1
  72. package/dist/rules/index.js +155 -0
  73. package/dist/rules/index.js.map +1 -1
  74. package/dist/rules/ml-ai.d.ts.map +1 -1
  75. package/dist/rules/ml-ai.js +11 -13
  76. package/dist/rules/ml-ai.js.map +1 -1
  77. package/dist/rules/patterns.d.ts +568 -0
  78. package/dist/rules/patterns.d.ts.map +1 -0
  79. package/dist/rules/patterns.js +1359 -0
  80. package/dist/rules/patterns.js.map +1 -0
  81. package/dist/rules/security.d.ts.map +1 -1
  82. package/dist/rules/security.js +580 -19
  83. package/dist/rules/security.js.map +1 -1
  84. package/dist/rules/shared-patterns.d.ts +268 -0
  85. package/dist/rules/shared-patterns.d.ts.map +1 -0
  86. package/dist/rules/shared-patterns.js +556 -0
  87. package/dist/rules/shared-patterns.js.map +1 -0
  88. package/dist/rules/storage.d.ts +8 -2
  89. package/dist/rules/storage.d.ts.map +1 -1
  90. package/dist/rules/storage.js +541 -3
  91. package/dist/rules/storage.js.map +1 -1
  92. package/dist/rules/stripe.d.ts.map +1 -1
  93. package/dist/rules/stripe.js +19 -26
  94. package/dist/rules/stripe.js.map +1 -1
  95. package/dist/rules/websocket.d.ts.map +1 -1
  96. package/dist/rules/websocket.js +32 -40
  97. package/dist/rules/websocket.js.map +1 -1
  98. package/dist/supervisor/AgentSupervisor.d.ts +52 -0
  99. package/dist/supervisor/AgentSupervisor.d.ts.map +1 -1
  100. package/dist/supervisor/AgentSupervisor.js +120 -1
  101. package/dist/supervisor/AgentSupervisor.js.map +1 -1
  102. package/dist/supervisor/ManagedServerRegistry.d.ts +139 -2
  103. package/dist/supervisor/ManagedServerRegistry.d.ts.map +1 -1
  104. package/dist/supervisor/ManagedServerRegistry.js +590 -6
  105. package/dist/supervisor/ManagedServerRegistry.js.map +1 -1
  106. package/dist/supervisor/ProjectTracker.d.ts +2 -1
  107. package/dist/supervisor/ProjectTracker.d.ts.map +1 -1
  108. package/dist/supervisor/ProjectTracker.js +5 -9
  109. package/dist/supervisor/ProjectTracker.js.map +1 -1
  110. package/dist/testing/index.d.ts +11 -0
  111. package/dist/testing/index.d.ts.map +1 -0
  112. package/dist/testing/index.js +12 -0
  113. package/dist/testing/index.js.map +1 -0
  114. package/dist/testing/rule-tester.d.ts +217 -0
  115. package/dist/testing/rule-tester.d.ts.map +1 -0
  116. package/dist/testing/rule-tester.examples.d.ts +57 -0
  117. package/dist/testing/rule-tester.examples.d.ts.map +1 -0
  118. package/dist/testing/rule-tester.examples.js +375 -0
  119. package/dist/testing/rule-tester.examples.js.map +1 -0
  120. package/dist/testing/rule-tester.js +381 -0
  121. package/dist/testing/rule-tester.js.map +1 -0
  122. package/dist/testing/rule-validator.d.ts +141 -0
  123. package/dist/testing/rule-validator.d.ts.map +1 -0
  124. package/dist/testing/rule-validator.js +640 -0
  125. package/dist/testing/rule-validator.js.map +1 -0
  126. package/dist/types/index.d.ts +265 -4
  127. package/dist/types/index.d.ts.map +1 -1
  128. package/dist/types/index.js +57 -2
  129. package/dist/types/index.js.map +1 -1
  130. package/dist/utils/index.d.ts +2 -0
  131. package/dist/utils/index.d.ts.map +1 -1
  132. package/dist/utils/index.js +2 -0
  133. package/dist/utils/index.js.map +1 -1
  134. package/dist/utils/rate-limiting.d.ts +268 -0
  135. package/dist/utils/rate-limiting.d.ts.map +1 -0
  136. package/dist/utils/rate-limiting.js +403 -0
  137. package/dist/utils/rate-limiting.js.map +1 -0
  138. package/dist/utils/shared.d.ts +306 -0
  139. package/dist/utils/shared.d.ts.map +1 -0
  140. package/dist/utils/shared.js +464 -0
  141. package/dist/utils/shared.js.map +1 -0
  142. package/package.json +2 -1
@@ -0,0 +1,479 @@
1
+ /**
2
+ * Enterprise Agent Supervisor - Condition Optimizer
3
+ * Task #34: Optimize Inefficient Condition Logic
4
+ *
5
+ * Provides utilities for optimizing rule conditions:
6
+ * - Use `in` operator instead of multiple `equals`
7
+ * - Order conditions for short-circuit optimization
8
+ * - Identify and consolidate redundant conditions
9
+ */
10
+ // ============================================================================
11
+ // FIELD COST DEFINITIONS
12
+ // ============================================================================
13
+ /**
14
+ * Default field costs for short-circuit optimization
15
+ * Lower cost = faster to evaluate = should be first
16
+ */
17
+ export const DEFAULT_FIELD_COSTS = [
18
+ // Lowest cost - simple string/boolean comparisons on common fields
19
+ { field: 'actionCategory', cost: 1, reason: 'Always present, simple enum comparison' },
20
+ { field: 'environment', cost: 1, reason: 'Always present, simple string comparison' },
21
+ { field: 'actionName', cost: 2, reason: 'Always present, string comparison' },
22
+ { field: 'protocol', cost: 2, reason: 'Usually present, simple string comparison' },
23
+ // Low cost - boolean checks
24
+ { field: 'authenticated', cost: 3, reason: 'Boolean flag check' },
25
+ { field: 'sandboxed', cost: 3, reason: 'Boolean flag check' },
26
+ { field: 'encryptionEnabled', cost: 3, reason: 'Boolean flag check' },
27
+ // Medium cost - may require lookup
28
+ { field: 'userRole', cost: 5, reason: 'May require role lookup' },
29
+ { field: 'dataClassification', cost: 5, reason: 'May require data inspection' },
30
+ { field: 'dataType', cost: 6, reason: 'May require type inference' },
31
+ // Higher cost - numeric comparisons that may involve computation
32
+ { field: 'recordCount', cost: 7, reason: 'May require counting' },
33
+ { field: 'estimatedCost', cost: 8, reason: 'May require calculation' },
34
+ { field: 'tokenCount', cost: 8, reason: 'May require counting' },
35
+ { field: 'sessionActionCount', cost: 7, reason: 'May require lookup' },
36
+ // Highest cost - regex matching
37
+ { field: 'query', cost: 10, reason: 'Regex pattern matching' },
38
+ { field: 'command', cost: 10, reason: 'Regex pattern matching' },
39
+ { field: 'filePath', cost: 10, reason: 'Regex pattern matching' },
40
+ ];
41
+ /**
42
+ * Get the cost for a field (default cost for unknown fields)
43
+ */
44
+ function getFieldCost(field) {
45
+ const knownField = DEFAULT_FIELD_COSTS.find(f => f.field === field);
46
+ if (knownField)
47
+ return knownField.cost;
48
+ // Default costs based on field name patterns
49
+ if (field.includes('regex') || field.includes('pattern'))
50
+ return 10;
51
+ if (field.includes('count') || field.includes('size'))
52
+ return 7;
53
+ if (field.startsWith('is') || field.startsWith('has') || field.endsWith('Enabled'))
54
+ return 3;
55
+ return 5; // Default middle cost
56
+ }
57
+ /**
58
+ * Get the cost for an operator
59
+ */
60
+ function getOperatorCost(operator) {
61
+ switch (operator) {
62
+ case 'equals':
63
+ case 'not_equals':
64
+ return 1;
65
+ case 'exists':
66
+ case 'not_exists':
67
+ return 1;
68
+ case 'in':
69
+ case 'not_in':
70
+ return 2;
71
+ case 'contains':
72
+ case 'not_contains':
73
+ return 3;
74
+ case 'greater_than':
75
+ case 'less_than':
76
+ return 2;
77
+ case 'matches_regex':
78
+ return 8;
79
+ case 'custom':
80
+ return 10;
81
+ default:
82
+ return 5;
83
+ }
84
+ }
85
+ // ============================================================================
86
+ // OPTIMIZATION FUNCTIONS
87
+ // ============================================================================
88
+ /**
89
+ * Combine multiple `equals` conditions on the same field into a single `in` condition
90
+ *
91
+ * @example
92
+ * Before:
93
+ * { field: 'env', operator: 'equals', value: 'dev' }
94
+ * { field: 'env', operator: 'equals', value: 'staging' }
95
+ *
96
+ * After:
97
+ * { field: 'env', operator: 'in', value: ['dev', 'staging'] }
98
+ */
99
+ export function combineEqualsToIn(conditions) {
100
+ const changes = [];
101
+ const fieldEqualsMap = new Map();
102
+ const nonEqualsConditions = [];
103
+ // Group equals conditions by field
104
+ for (const condition of conditions) {
105
+ if (condition.operator === 'equals' && condition.value !== null && typeof condition.value !== 'boolean') {
106
+ const existing = fieldEqualsMap.get(condition.field) || [];
107
+ existing.push(condition);
108
+ fieldEqualsMap.set(condition.field, existing);
109
+ }
110
+ else {
111
+ nonEqualsConditions.push(condition);
112
+ }
113
+ }
114
+ // Convert fields with multiple equals to in
115
+ const optimizedConditions = [...nonEqualsConditions];
116
+ for (const [field, equalsConditions] of Array.from(fieldEqualsMap.entries())) {
117
+ if (equalsConditions.length > 1) {
118
+ // Combine into single `in` condition
119
+ const values = equalsConditions.map(c => c.value);
120
+ const newCondition = {
121
+ field,
122
+ operator: 'in',
123
+ value: values
124
+ };
125
+ optimizedConditions.push(newCondition);
126
+ changes.push({
127
+ type: 'combined_to_in',
128
+ description: `Combined ${equalsConditions.length} 'equals' conditions on '${field}' into single 'in' condition`,
129
+ originalConditions: equalsConditions,
130
+ newCondition
131
+ });
132
+ }
133
+ else {
134
+ // Keep single equals as-is
135
+ optimizedConditions.push(equalsConditions[0]);
136
+ }
137
+ }
138
+ return { conditions: optimizedConditions, changes };
139
+ }
140
+ /**
141
+ * Reorder conditions for optimal short-circuit evaluation
142
+ * Cheaper conditions first, more likely to fail conditions first
143
+ */
144
+ export function reorderForShortCircuit(conditions) {
145
+ const changes = [];
146
+ // Calculate total cost for each condition
147
+ const conditionsWithCost = conditions.map((condition, originalIndex) => ({
148
+ condition,
149
+ originalIndex,
150
+ cost: getFieldCost(condition.field) + getOperatorCost(condition.operator)
151
+ }));
152
+ // Sort by cost (ascending - cheapest first)
153
+ conditionsWithCost.sort((a, b) => a.cost - b.cost);
154
+ // Check if reordering changed anything
155
+ const wasReordered = conditionsWithCost.some((item, index) => item.originalIndex !== index);
156
+ if (wasReordered) {
157
+ changes.push({
158
+ type: 'reordered',
159
+ description: 'Reordered conditions for optimal short-circuit evaluation (cheapest first)',
160
+ originalConditions: conditions
161
+ });
162
+ }
163
+ return {
164
+ conditions: conditionsWithCost.map(item => item.condition),
165
+ changes
166
+ };
167
+ }
168
+ /**
169
+ * Remove redundant conditions
170
+ * - Duplicate conditions
171
+ * - Conditions that are subsets of others
172
+ */
173
+ export function removeRedundant(conditions) {
174
+ const changes = [];
175
+ const seen = new Set();
176
+ const unique = [];
177
+ for (const condition of conditions) {
178
+ // Create a canonical key for the condition
179
+ const key = JSON.stringify({
180
+ field: condition.field,
181
+ operator: condition.operator,
182
+ value: condition.value
183
+ });
184
+ if (!seen.has(key)) {
185
+ seen.add(key);
186
+ unique.push(condition);
187
+ }
188
+ else {
189
+ changes.push({
190
+ type: 'removed_redundant',
191
+ description: `Removed duplicate condition on '${condition.field}'`,
192
+ originalConditions: [condition]
193
+ });
194
+ }
195
+ }
196
+ // Check for subset conditions (e.g., equals inside in)
197
+ const result = [];
198
+ for (const condition of unique) {
199
+ let isSubset = false;
200
+ if (condition.operator === 'equals') {
201
+ // Check if there's an `in` condition on the same field that contains this value
202
+ const inCondition = unique.find(c => c.field === condition.field &&
203
+ c.operator === 'in' &&
204
+ Array.isArray(c.value) &&
205
+ c.value.includes(condition.value));
206
+ if (inCondition) {
207
+ isSubset = true;
208
+ changes.push({
209
+ type: 'removed_redundant',
210
+ description: `Removed '${condition.field} equals ${condition.value}' as it's covered by 'in' condition`,
211
+ originalConditions: [condition]
212
+ });
213
+ }
214
+ }
215
+ if (!isSubset) {
216
+ result.push(condition);
217
+ }
218
+ }
219
+ return { conditions: result, changes };
220
+ }
221
+ /**
222
+ * Simplify conditions where possible
223
+ * - Convert single-element `in` to `equals`
224
+ * - Convert `not_in` with single element to `not_equals`
225
+ */
226
+ export function simplifyConditions(conditions) {
227
+ const changes = [];
228
+ const simplified = [];
229
+ for (const condition of conditions) {
230
+ if (condition.operator === 'in' && Array.isArray(condition.value) && condition.value.length === 1) {
231
+ const newCondition = {
232
+ field: condition.field,
233
+ operator: 'equals',
234
+ value: condition.value[0]
235
+ };
236
+ simplified.push(newCondition);
237
+ changes.push({
238
+ type: 'simplified',
239
+ description: `Simplified single-element 'in' to 'equals' on '${condition.field}'`,
240
+ originalConditions: [condition],
241
+ newCondition
242
+ });
243
+ }
244
+ else if (condition.operator === 'not_in' && Array.isArray(condition.value) && condition.value.length === 1) {
245
+ const newCondition = {
246
+ field: condition.field,
247
+ operator: 'not_equals',
248
+ value: condition.value[0]
249
+ };
250
+ simplified.push(newCondition);
251
+ changes.push({
252
+ type: 'simplified',
253
+ description: `Simplified single-element 'not_in' to 'not_equals' on '${condition.field}'`,
254
+ originalConditions: [condition],
255
+ newCondition
256
+ });
257
+ }
258
+ else {
259
+ simplified.push(condition);
260
+ }
261
+ }
262
+ return { conditions: simplified, changes };
263
+ }
264
+ // ============================================================================
265
+ // MAIN OPTIMIZATION FUNCTION
266
+ // ============================================================================
267
+ /**
268
+ * Optimize rule conditions using all available strategies
269
+ */
270
+ export function optimizeConditions(conditions) {
271
+ if (!conditions || conditions.length === 0) {
272
+ return {
273
+ original: conditions,
274
+ optimized: conditions,
275
+ changes: [],
276
+ wasOptimized: false,
277
+ estimatedImprovement: 0
278
+ };
279
+ }
280
+ const allChanges = [];
281
+ let currentConditions = [...conditions];
282
+ // Step 1: Remove redundant conditions first
283
+ const redundantResult = removeRedundant(currentConditions);
284
+ currentConditions = redundantResult.conditions;
285
+ allChanges.push(...redundantResult.changes);
286
+ // Step 2: Combine equals to in
287
+ const combineResult = combineEqualsToIn(currentConditions);
288
+ currentConditions = combineResult.conditions;
289
+ allChanges.push(...combineResult.changes);
290
+ // Step 3: Simplify conditions
291
+ const simplifyResult = simplifyConditions(currentConditions);
292
+ currentConditions = simplifyResult.conditions;
293
+ allChanges.push(...simplifyResult.changes);
294
+ // Step 4: Reorder for short-circuit optimization
295
+ const reorderResult = reorderForShortCircuit(currentConditions);
296
+ currentConditions = reorderResult.conditions;
297
+ allChanges.push(...reorderResult.changes);
298
+ // Calculate estimated improvement
299
+ let improvement = 0;
300
+ if (allChanges.length > 0) {
301
+ // Each change type contributes to improvement
302
+ for (const change of allChanges) {
303
+ switch (change.type) {
304
+ case 'combined_to_in':
305
+ improvement += 0.1; // 10% per combination
306
+ break;
307
+ case 'removed_redundant':
308
+ improvement += 0.15; // 15% per redundant removal
309
+ break;
310
+ case 'reordered':
311
+ improvement += 0.05; // 5% for reordering
312
+ break;
313
+ case 'simplified':
314
+ improvement += 0.05; // 5% per simplification
315
+ break;
316
+ }
317
+ }
318
+ improvement = Math.min(improvement, 1); // Cap at 100%
319
+ }
320
+ return {
321
+ original: conditions,
322
+ optimized: currentConditions,
323
+ changes: allChanges,
324
+ wasOptimized: allChanges.length > 0,
325
+ estimatedImprovement: improvement
326
+ };
327
+ }
328
+ /**
329
+ * Optimize all conditions in a rule
330
+ */
331
+ export function optimizeRule(rule) {
332
+ const result = optimizeConditions(rule.conditions);
333
+ return {
334
+ rule: {
335
+ ...rule,
336
+ conditions: result.optimized
337
+ },
338
+ result
339
+ };
340
+ }
341
+ /**
342
+ * Optimize all rules and return summary
343
+ */
344
+ export function optimizeRules(rules) {
345
+ const optimizedRules = [];
346
+ const details = [];
347
+ let totalChanges = 0;
348
+ let optimizedCount = 0;
349
+ let totalImprovement = 0;
350
+ const changesByType = {
351
+ combined_to_in: 0,
352
+ reordered: 0,
353
+ removed_redundant: 0,
354
+ simplified: 0
355
+ };
356
+ for (const rule of rules) {
357
+ const { rule: optimizedRule, result } = optimizeRule(rule);
358
+ optimizedRules.push(optimizedRule);
359
+ if (result.wasOptimized) {
360
+ optimizedCount++;
361
+ totalImprovement += result.estimatedImprovement;
362
+ details.push({
363
+ ruleId: rule.id,
364
+ ruleName: rule.name,
365
+ result
366
+ });
367
+ for (const change of result.changes) {
368
+ totalChanges++;
369
+ changesByType[change.type] = (changesByType[change.type] || 0) + 1;
370
+ }
371
+ }
372
+ }
373
+ return {
374
+ rules: optimizedRules,
375
+ summary: {
376
+ totalRules: rules.length,
377
+ optimizedRules: optimizedCount,
378
+ totalChanges,
379
+ changesByType,
380
+ averageImprovement: optimizedCount > 0 ? totalImprovement / optimizedCount : 0
381
+ },
382
+ details
383
+ };
384
+ }
385
+ // ============================================================================
386
+ // ANALYSIS FUNCTIONS
387
+ // ============================================================================
388
+ /**
389
+ * Analyze rules for optimization opportunities without modifying them
390
+ */
391
+ export function analyzeRulesForOptimization(rules) {
392
+ const opportunities = [];
393
+ for (const rule of rules) {
394
+ const issues = [];
395
+ let potentialImprovement = 0;
396
+ // Check for multiple equals on same field
397
+ const fieldEqualsCount = new Map();
398
+ for (const condition of rule.conditions) {
399
+ if (condition.operator === 'equals') {
400
+ fieldEqualsCount.set(condition.field, (fieldEqualsCount.get(condition.field) || 0) + 1);
401
+ }
402
+ }
403
+ for (const [field, count] of Array.from(fieldEqualsCount.entries())) {
404
+ if (count > 1) {
405
+ issues.push(`${count} 'equals' conditions on '${field}' could be combined into single 'in'`);
406
+ potentialImprovement += 0.1;
407
+ }
408
+ }
409
+ // Check for single-element in conditions
410
+ for (const condition of rule.conditions) {
411
+ if (condition.operator === 'in' && Array.isArray(condition.value) && condition.value.length === 1) {
412
+ issues.push(`Single-element 'in' on '${condition.field}' could be simplified to 'equals'`);
413
+ potentialImprovement += 0.05;
414
+ }
415
+ }
416
+ // Check for suboptimal ordering (regex conditions before simple comparisons)
417
+ let hasRegexBeforeSimple = false;
418
+ let foundSimple = false;
419
+ for (let i = rule.conditions.length - 1; i >= 0; i--) {
420
+ const cond = rule.conditions[i];
421
+ if (cond.operator === 'equals' || cond.operator === 'in') {
422
+ foundSimple = true;
423
+ }
424
+ else if (cond.operator === 'matches_regex' && foundSimple) {
425
+ hasRegexBeforeSimple = true;
426
+ break;
427
+ }
428
+ }
429
+ if (hasRegexBeforeSimple) {
430
+ issues.push('Regex conditions before simple comparisons - reorder for short-circuit optimization');
431
+ potentialImprovement += 0.05;
432
+ }
433
+ // Check for duplicate conditions
434
+ const seen = new Set();
435
+ for (const condition of rule.conditions) {
436
+ const key = JSON.stringify({ field: condition.field, operator: condition.operator, value: condition.value });
437
+ if (seen.has(key)) {
438
+ issues.push(`Duplicate condition on '${condition.field}'`);
439
+ potentialImprovement += 0.15;
440
+ }
441
+ seen.add(key);
442
+ }
443
+ if (issues.length > 0) {
444
+ opportunities.push({
445
+ ruleId: rule.id,
446
+ ruleName: rule.name,
447
+ issues,
448
+ potentialImprovement: Math.min(potentialImprovement, 1)
449
+ });
450
+ }
451
+ }
452
+ return {
453
+ opportunities,
454
+ summary: {
455
+ totalOpportunities: opportunities.reduce((sum, o) => sum + o.issues.length, 0),
456
+ rulesWithIssues: opportunities.length
457
+ }
458
+ };
459
+ }
460
+ // ============================================================================
461
+ // EXPORTS
462
+ // ============================================================================
463
+ export default {
464
+ // Main optimization functions
465
+ optimizeConditions,
466
+ optimizeRule,
467
+ optimizeRules,
468
+ // Individual optimization strategies
469
+ combineEqualsToIn,
470
+ reorderForShortCircuit,
471
+ removeRedundant,
472
+ simplifyConditions,
473
+ // Analysis
474
+ analyzeRulesForOptimization,
475
+ // Cost definitions
476
+ DEFAULT_FIELD_COSTS,
477
+ getFieldCost
478
+ };
479
+ //# sourceMappingURL=condition-optimizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"condition-optimizer.js","sourceRoot":"","sources":["../../src/rules/condition-optimizer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"css.d.ts","sourceRoot":"","sources":["../../src/rules/css.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,eAAO,MAAM,QAAQ,EAAE,YAAY,EAytClC,CAAC;AAEF,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"css.d.ts","sourceRoot":"","sources":["../../src/rules/css.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,eAAO,MAAM,QAAQ,EAAE,YAAY,EA2vDlC,CAAC;AAEF,eAAe,QAAQ,CAAC"}