@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,908 @@
1
+ /**
2
+ * Enterprise Agent Supervisor - Field Standards
3
+ * Task #33: Standardize Condition Naming and Field References
4
+ *
5
+ * This module defines standard field names for rule conditions to ensure
6
+ * consistency across all rule files. Use these constants when defining
7
+ * rule conditions instead of string literals.
8
+ */
9
+ // ============================================================================
10
+ // STANDARD FIELD PATHS - Use these constants in rule conditions
11
+ // ============================================================================
12
+ /**
13
+ * Action-related fields
14
+ * These fields describe the action being evaluated
15
+ */
16
+ export const ActionFields = {
17
+ /** The name/identifier of the action (e.g., 'deploy', 'export', 'webhook') */
18
+ NAME: 'action.name',
19
+ /** The category of action (data_access, data_modification, etc.) */
20
+ CATEGORY: 'action.category',
21
+ /** Action parameters object */
22
+ PARAMETERS: 'action.parameters',
23
+ /** Action metadata */
24
+ METADATA: 'action.metadata',
25
+ /** Description of the action */
26
+ DESCRIPTION: 'action.description',
27
+ // Legacy aliases (for backward compatibility during migration)
28
+ /** @deprecated Use ActionFields.NAME instead */
29
+ LEGACY_ACTION_NAME: 'actionName',
30
+ /** @deprecated Use ActionFields.CATEGORY instead */
31
+ LEGACY_ACTION_CATEGORY: 'actionCategory',
32
+ };
33
+ /**
34
+ * Environment fields
35
+ * Fields describing the execution environment
36
+ */
37
+ export const EnvironmentFields = {
38
+ /** The deployment environment (development, staging, production) */
39
+ ENVIRONMENT: 'context.environment',
40
+ /** The platform/framework (flask, azure-functions, etc.) */
41
+ PLATFORM: 'context.platform',
42
+ /** The framework in use */
43
+ FRAMEWORK: 'context.framework',
44
+ // Legacy aliases
45
+ /** @deprecated Use EnvironmentFields.ENVIRONMENT instead */
46
+ LEGACY_ENVIRONMENT: 'environment',
47
+ /** @deprecated Use EnvironmentFields.PLATFORM instead */
48
+ LEGACY_PLATFORM: 'platform',
49
+ /** @deprecated Use EnvironmentFields.FRAMEWORK instead */
50
+ LEGACY_FRAMEWORK: 'framework',
51
+ };
52
+ /**
53
+ * User and authentication fields
54
+ * Fields related to the user or agent performing the action
55
+ */
56
+ export const UserFields = {
57
+ /** User's unique identifier */
58
+ USER_ID: 'context.userId',
59
+ /** User's role (admin, data_officer, etc.) */
60
+ USER_ROLE: 'context.userRole',
61
+ /** Agent's unique identifier */
62
+ AGENT_ID: 'context.agentId',
63
+ /** Agent's type classification */
64
+ AGENT_TYPE: 'context.agentType',
65
+ /** Session identifier */
66
+ SESSION_ID: 'context.sessionId',
67
+ /** Organization identifier */
68
+ ORG_ID: 'context.organizationId',
69
+ /** Department within organization */
70
+ DEPARTMENT: 'context.department',
71
+ // Legacy aliases
72
+ /** @deprecated Use UserFields.USER_ID instead */
73
+ LEGACY_USER_ID: 'userId',
74
+ /** @deprecated Use UserFields.USER_ROLE instead */
75
+ LEGACY_USER_ROLE: 'userRole',
76
+ /** @deprecated Use UserFields.AGENT_ID instead */
77
+ LEGACY_AGENT_ID: 'agentId',
78
+ /** @deprecated Use UserFields.SESSION_ID instead */
79
+ LEGACY_SESSION_ID: 'sessionId',
80
+ };
81
+ /**
82
+ * Data classification and handling fields
83
+ * Fields describing the data being accessed or modified
84
+ */
85
+ export const DataFields = {
86
+ /** Data classification level (public, internal, confidential, restricted) */
87
+ CLASSIFICATION: 'data.classification',
88
+ /** Type of data (phi, cardholder, pan, cvv, pii, etc.) */
89
+ TYPE: 'data.type',
90
+ /** Whether data contains PII */
91
+ CONTAINS_PII: 'data.containsPii',
92
+ /** Number of records affected */
93
+ RECORD_COUNT: 'data.recordCount',
94
+ /** Size of data in bytes */
95
+ SIZE: 'data.size',
96
+ /** Data retention exceeded flag */
97
+ RETENTION_EXCEEDED: 'data.retentionExceeded',
98
+ /** Storage type (localStorage, sessionStorage, indexedDB) */
99
+ STORAGE_TYPE: 'data.storageType',
100
+ // Legacy aliases
101
+ /** @deprecated Use DataFields.CLASSIFICATION instead */
102
+ LEGACY_DATA_CLASSIFICATION: 'dataClassification',
103
+ /** @deprecated Use DataFields.TYPE instead */
104
+ LEGACY_DATA_TYPE: 'dataType',
105
+ /** @deprecated Use DataFields.CONTAINS_PII instead */
106
+ LEGACY_DATA_CONTAINS_PII: 'dataContainsPII',
107
+ /** @deprecated Use DataFields.RECORD_COUNT instead */
108
+ LEGACY_RECORD_COUNT: 'recordCount',
109
+ /** @deprecated Use DataFields.RETENTION_EXCEEDED instead */
110
+ LEGACY_DATA_RETENTION_EXCEEDED: 'dataRetentionExceeded',
111
+ /** @deprecated Use DataFields.STORAGE_TYPE instead */
112
+ LEGACY_STORAGE_TYPE: 'storageType',
113
+ };
114
+ /**
115
+ * Operation and request fields
116
+ * Fields describing the operation being performed
117
+ */
118
+ export const OperationFields = {
119
+ /** The operation type (read, write, delete, upload, etc.) */
120
+ OPERATION: 'operation.type',
121
+ /** HTTP method for API calls */
122
+ HTTP_METHOD: 'operation.httpMethod',
123
+ /** Protocol being used (https, websocket, etc.) */
124
+ PROTOCOL: 'operation.protocol',
125
+ /** File path for file system operations */
126
+ FILE_PATH: 'operation.filePath',
127
+ /** Query string for data access */
128
+ QUERY: 'operation.query',
129
+ /** Request type */
130
+ REQUEST_TYPE: 'operation.requestType',
131
+ /** Target role for authorization operations */
132
+ TARGET_ROLE: 'operation.targetRole',
133
+ /** Destination region for data transfers */
134
+ DESTINATION_REGION: 'operation.destinationRegion',
135
+ // Legacy aliases
136
+ /** @deprecated Use OperationFields.OPERATION instead */
137
+ LEGACY_OPERATION: 'operation',
138
+ /** @deprecated Use OperationFields.HTTP_METHOD instead */
139
+ LEGACY_HTTP_METHOD: 'httpMethod',
140
+ /** @deprecated Use OperationFields.PROTOCOL instead */
141
+ LEGACY_PROTOCOL: 'protocol',
142
+ /** @deprecated Use OperationFields.FILE_PATH instead */
143
+ LEGACY_FILE_PATH: 'filePath',
144
+ /** @deprecated Use OperationFields.QUERY instead */
145
+ LEGACY_QUERY: 'query',
146
+ /** @deprecated Use OperationFields.REQUEST_TYPE instead */
147
+ LEGACY_REQUEST_TYPE: 'requestType',
148
+ /** @deprecated Use OperationFields.TARGET_ROLE instead */
149
+ LEGACY_TARGET_ROLE: 'targetRole',
150
+ /** @deprecated Use OperationFields.DESTINATION_REGION instead */
151
+ LEGACY_DESTINATION_REGION: 'destinationRegion',
152
+ };
153
+ /**
154
+ * Security and authentication fields
155
+ * Fields related to security state and verification
156
+ */
157
+ export const SecurityFields = {
158
+ /** Authentication token present */
159
+ AUTH_TOKEN: 'security.authToken',
160
+ /** Whether the request is authenticated */
161
+ AUTHENTICATED: 'security.authenticated',
162
+ /** Whether code has been validated */
163
+ CODE_VALIDATED: 'security.codeValidated',
164
+ /** Whether request is sandboxed */
165
+ SANDBOXED: 'security.sandboxed',
166
+ /** Whether host is whitelisted */
167
+ HOST_WHITELISTED: 'security.hostWhitelisted',
168
+ /** Whether encryption is enabled */
169
+ ENCRYPTION_ENABLED: 'security.encryptionEnabled',
170
+ /** Session anomaly score (0-1) */
171
+ SESSION_ANOMALY_SCORE: 'security.sessionAnomalyScore',
172
+ /** Webhook signature validation status */
173
+ SIGNATURE_VALIDATED: 'security.signatureValidated',
174
+ /** Input validation status */
175
+ INPUT_VALIDATED: 'security.inputValidated',
176
+ /** File validation status */
177
+ FILE_VALIDATED: 'security.fileValidated',
178
+ /** Whether TLS is enabled */
179
+ TLS_ENABLED: 'security.tlsEnabled',
180
+ // Legacy aliases
181
+ /** @deprecated Use SecurityFields.AUTH_TOKEN instead */
182
+ LEGACY_AUTH_TOKEN: 'authToken',
183
+ /** @deprecated Use SecurityFields.AUTHENTICATED instead */
184
+ LEGACY_AUTHENTICATED: 'authenticated',
185
+ /** @deprecated Use SecurityFields.CODE_VALIDATED instead */
186
+ LEGACY_CODE_VALIDATED: 'codeValidated',
187
+ /** @deprecated Use SecurityFields.SANDBOXED instead */
188
+ LEGACY_SANDBOXED: 'sandboxed',
189
+ /** @deprecated Use SecurityFields.HOST_WHITELISTED instead */
190
+ LEGACY_HOST_WHITELISTED: 'hostWhitelisted',
191
+ /** @deprecated Use SecurityFields.ENCRYPTION_ENABLED instead */
192
+ LEGACY_ENCRYPTION_ENABLED: 'encryptionEnabled',
193
+ /** @deprecated Use SecurityFields.SESSION_ANOMALY_SCORE instead */
194
+ LEGACY_SESSION_ANOMALY_SCORE: 'sessionAnomalyScore',
195
+ /** @deprecated Use SecurityFields.SIGNATURE_VALIDATED instead */
196
+ LEGACY_SIGNATURE_VALIDATED: 'signatureValidated',
197
+ /** @deprecated Use SecurityFields.INPUT_VALIDATED instead */
198
+ LEGACY_INPUT_VALIDATION: 'inputValidation',
199
+ /** @deprecated Use SecurityFields.FILE_VALIDATED instead */
200
+ LEGACY_FILE_VALIDATION: 'fileValidation',
201
+ /** @deprecated Use SecurityFields.TLS_ENABLED instead */
202
+ LEGACY_TLS_ENABLED: 'tlsEnabled',
203
+ };
204
+ /**
205
+ * Compliance and consent fields
206
+ * Fields related to regulatory compliance
207
+ */
208
+ export const ComplianceFields = {
209
+ /** Verification completed status */
210
+ VERIFICATION_COMPLETED: 'compliance.verificationCompleted',
211
+ /** Processing basis (consent, legitimate_interest, etc.) */
212
+ PROCESSING_BASIS: 'compliance.processingBasis',
213
+ /** Consent validity status */
214
+ CONSENT_VALID: 'compliance.consentValid',
215
+ /** Whether data is masked */
216
+ DATA_MASKED: 'compliance.dataMasked',
217
+ /** Business justification provided */
218
+ BUSINESS_JUSTIFICATION: 'compliance.businessJustification',
219
+ /** Number of fields requested */
220
+ FIELDS_REQUESTED: 'compliance.fieldsRequested',
221
+ /** Initiator ID for segregation of duties */
222
+ INITIATOR_ID: 'compliance.initiatorId',
223
+ /** Whether account requirements are validated */
224
+ ACCOUNT_REQUIREMENTS_VALIDATED: 'compliance.accountRequirementsValidated',
225
+ /** SCA enabled for EU payments */
226
+ SCA_ENABLED: 'compliance.scaEnabled',
227
+ /** Customer region */
228
+ CUSTOMER_REGION: 'compliance.customerRegion',
229
+ // Legacy aliases
230
+ /** @deprecated Use ComplianceFields.VERIFICATION_COMPLETED instead */
231
+ LEGACY_VERIFICATION_COMPLETED: 'verificationCompleted',
232
+ /** @deprecated Use ComplianceFields.PROCESSING_BASIS instead */
233
+ LEGACY_PROCESSING_BASIS: 'processingBasis',
234
+ /** @deprecated Use ComplianceFields.CONSENT_VALID instead */
235
+ LEGACY_CONSENT_VALID: 'consentValid',
236
+ /** @deprecated Use ComplianceFields.DATA_MASKED instead */
237
+ LEGACY_MASKED: 'masked',
238
+ /** @deprecated Use ComplianceFields.BUSINESS_JUSTIFICATION instead */
239
+ LEGACY_BUSINESS_JUSTIFICATION: 'businessJustification',
240
+ /** @deprecated Use ComplianceFields.FIELDS_REQUESTED instead */
241
+ LEGACY_FIELDS_REQUESTED: 'fieldsRequested',
242
+ /** @deprecated Use ComplianceFields.INITIATOR_ID instead */
243
+ LEGACY_INITIATOR_ID: 'initiatorId',
244
+ /** @deprecated Use ComplianceFields.ACCOUNT_REQUIREMENTS_VALIDATED instead */
245
+ LEGACY_ACCOUNT_REQUIREMENTS_VALIDATED: 'accountRequirementsValidated',
246
+ /** @deprecated Use ComplianceFields.SCA_ENABLED instead */
247
+ LEGACY_SCA_ENABLED: 'scaEnabled',
248
+ /** @deprecated Use ComplianceFields.CUSTOMER_REGION instead */
249
+ LEGACY_CUSTOMER_REGION: 'customerRegion',
250
+ };
251
+ /**
252
+ * Operational and system fields
253
+ * Fields related to system operations and limits
254
+ */
255
+ export const OperationalFields = {
256
+ /** Estimated cost of operation */
257
+ ESTIMATED_COST: 'operational.estimatedCost',
258
+ /** Resource cost in dollars */
259
+ RESOURCE_COST: 'operational.resourceCost',
260
+ /** Estimated memory usage in MB */
261
+ ESTIMATED_MEMORY_MB: 'operational.estimatedMemoryMb',
262
+ /** Token count for LLM operations */
263
+ TOKEN_COUNT: 'operational.tokenCount',
264
+ /** Daily spend amount */
265
+ DAILY_SPEND: 'operational.dailySpend',
266
+ /** Budget override approved */
267
+ BUDGET_OVERRIDE_APPROVED: 'operational.budgetOverrideApproved',
268
+ /** Deployment window status */
269
+ DEPLOYMENT_WINDOW_OPEN: 'operational.deploymentWindowOpen',
270
+ /** Rollback plan defined */
271
+ ROLLBACK_PLAN_DEFINED: 'operational.rollbackPlanDefined',
272
+ /** Change freeze active */
273
+ CHANGE_FREEZE_ACTIVE: 'operational.changeFreezeActive',
274
+ /** Maintenance window active */
275
+ MAINTENANCE_WINDOW_ACTIVE: 'operational.maintenanceWindowActive',
276
+ /** Backup verified */
277
+ BACKUP_VERIFIED: 'operational.backupVerified',
278
+ /** Incident severity */
279
+ INCIDENT_SEVERITY: 'operational.incidentSeverity',
280
+ /** Session action count */
281
+ SESSION_ACTION_COUNT: 'operational.sessionActionCount',
282
+ /** Retry count */
283
+ RETRY_COUNT: 'operational.retryCount',
284
+ /** Action pattern (loop detection) */
285
+ ACTION_PATTERN: 'operational.actionPattern',
286
+ /** Concurrent count */
287
+ CONCURRENT_COUNT: 'operational.concurrentCount',
288
+ /** Operation type */
289
+ OPERATION_TYPE: 'operational.operationType',
290
+ /** Timeout configuration in ms */
291
+ TIMEOUT_MS: 'operational.timeoutMs',
292
+ // Legacy aliases
293
+ /** @deprecated Use OperationalFields.ESTIMATED_COST instead */
294
+ LEGACY_ESTIMATED_COST: 'estimatedCost',
295
+ /** @deprecated Use OperationalFields.RESOURCE_COST instead */
296
+ LEGACY_RESOURCE_COST: 'resourceCost',
297
+ /** @deprecated Use OperationalFields.ESTIMATED_MEMORY_MB instead */
298
+ LEGACY_ESTIMATED_MEMORY_MB: 'estimatedMemoryMb',
299
+ /** @deprecated Use OperationalFields.TOKEN_COUNT instead */
300
+ LEGACY_TOKEN_COUNT: 'tokenCount',
301
+ /** @deprecated Use OperationalFields.DAILY_SPEND instead */
302
+ LEGACY_DAILY_SPEND: 'dailySpend',
303
+ /** @deprecated Use OperationalFields.DEPLOYMENT_WINDOW_OPEN instead */
304
+ LEGACY_DEPLOYMENT_WINDOW_OPEN: 'deploymentWindowOpen',
305
+ /** @deprecated Use OperationalFields.ROLLBACK_PLAN_DEFINED instead */
306
+ LEGACY_ROLLBACK_PLAN_DEFINED: 'rollbackPlanDefined',
307
+ /** @deprecated Use OperationalFields.CHANGE_FREEZE_ACTIVE instead */
308
+ LEGACY_CHANGE_FREEZE_ACTIVE: 'changeFreezeActive',
309
+ /** @deprecated Use OperationalFields.MAINTENANCE_WINDOW_ACTIVE instead */
310
+ LEGACY_MAINTENANCE_WINDOW_ACTIVE: 'maintenanceWindowActive',
311
+ /** @deprecated Use OperationalFields.BACKUP_VERIFIED instead */
312
+ LEGACY_BACKUP_VERIFIED: 'backupVerified',
313
+ /** @deprecated Use OperationalFields.INCIDENT_SEVERITY instead */
314
+ LEGACY_INCIDENT_SEVERITY: 'incidentSeverity',
315
+ /** @deprecated Use OperationalFields.SESSION_ACTION_COUNT instead */
316
+ LEGACY_SESSION_ACTION_COUNT: 'sessionActionCount',
317
+ /** @deprecated Use OperationalFields.RETRY_COUNT instead */
318
+ LEGACY_RETRY_COUNT: 'retryCount',
319
+ /** @deprecated Use OperationalFields.ACTION_PATTERN instead */
320
+ LEGACY_ACTION_PATTERN: 'actionPattern',
321
+ /** @deprecated Use OperationalFields.CONCURRENT_COUNT instead */
322
+ LEGACY_CONCURRENT_COUNT: 'concurrentCount',
323
+ /** @deprecated Use OperationalFields.TIMEOUT_MS instead */
324
+ LEGACY_TIMEOUT: 'timeout',
325
+ };
326
+ /**
327
+ * Testing and QA fields
328
+ * Fields specific to testing operations
329
+ */
330
+ export const TestingFields = {
331
+ /** Whether the operation is a test */
332
+ IS_TEST: 'testing.isTest',
333
+ /** Test type (unit, integration, e2e) */
334
+ TEST_TYPE: 'testing.testType',
335
+ /** Test isolation status */
336
+ TEST_ISOLATION: 'testing.testIsolation',
337
+ /** Test cleanup status */
338
+ HAS_CLEANUP: 'testing.hasCleanup',
339
+ /** Execution time in ms */
340
+ EXECUTION_TIME_MS: 'testing.executionTimeMs',
341
+ /** Uses random wait (anti-pattern) */
342
+ USES_RANDOM_WAIT: 'testing.usesRandomWait',
343
+ /** Runs in parallel */
344
+ RUNS_IN_PARALLEL: 'testing.runsInParallel',
345
+ /** Parallel safe */
346
+ PARALLEL_SAFE: 'testing.parallelSafe',
347
+ /** Screenshot retention days */
348
+ SCREENSHOT_RETENTION_DAYS: 'testing.screenshotRetentionDays',
349
+ // Legacy aliases
350
+ /** @deprecated Use TestingFields.IS_TEST instead */
351
+ LEGACY_IS_TEST: 'isTest',
352
+ /** @deprecated Use TestingFields.TEST_TYPE instead */
353
+ LEGACY_TEST_TYPE: 'testType',
354
+ /** @deprecated Use TestingFields.TEST_ISOLATION instead */
355
+ LEGACY_TEST_ISOLATION: 'testIsolation',
356
+ /** @deprecated Use TestingFields.HAS_CLEANUP instead */
357
+ LEGACY_HAS_CLEANUP: 'hasCleanup',
358
+ /** @deprecated Use TestingFields.EXECUTION_TIME_MS instead */
359
+ LEGACY_EXECUTION_TIME_MS: 'executionTimeMs',
360
+ /** @deprecated Use TestingFields.USES_RANDOM_WAIT instead */
361
+ LEGACY_USES_RANDOM_WAIT: 'usesRandomWait',
362
+ /** @deprecated Use TestingFields.RUNS_IN_PARALLEL instead */
363
+ LEGACY_RUNS_IN_PARALLEL: 'runsInParallel',
364
+ /** @deprecated Use TestingFields.PARALLEL_SAFE instead */
365
+ LEGACY_PARALLEL_SAFE: 'parallelSafe',
366
+ };
367
+ /**
368
+ * API and external service fields
369
+ * Fields related to API calls and external integrations
370
+ */
371
+ export const ApiFields = {
372
+ /** API version */
373
+ API_VERSION: 'api.version',
374
+ /** Rate limit headers included */
375
+ RATE_LIMIT_HEADERS_INCLUDED: 'api.rateLimitHeadersIncluded',
376
+ /** Idempotency key */
377
+ IDEMPOTENCY_KEY: 'api.idempotencyKey',
378
+ /** Circuit breaker enabled */
379
+ CIRCUIT_BREAKER_ENABLED: 'api.circuitBreakerEnabled',
380
+ /** Retry policy defined */
381
+ RETRY_POLICY: 'api.retryPolicy',
382
+ /** Whether operation is idempotent */
383
+ IS_IDEMPOTENT: 'api.isIdempotent',
384
+ /** Provider name (stripe, azure-openai, etc.) */
385
+ PROVIDER: 'api.provider',
386
+ /** Respects rate limits */
387
+ RESPECTS_RATE_LIMITS: 'api.respectsRateLimits',
388
+ // Legacy aliases
389
+ /** @deprecated Use ApiFields.API_VERSION instead */
390
+ LEGACY_API_VERSION: 'apiVersion',
391
+ /** @deprecated Use ApiFields.RATE_LIMIT_HEADERS_INCLUDED instead */
392
+ LEGACY_RATE_LIMIT_HEADERS_INCLUDED: 'rateLimitHeadersIncluded',
393
+ /** @deprecated Use ApiFields.IDEMPOTENCY_KEY instead */
394
+ LEGACY_IDEMPOTENCY_KEY: 'idempotencyKey',
395
+ /** @deprecated Use ApiFields.CIRCUIT_BREAKER_ENABLED instead */
396
+ LEGACY_CIRCUIT_BREAKER_ENABLED: 'circuitBreakerEnabled',
397
+ /** @deprecated Use ApiFields.RETRY_POLICY instead */
398
+ LEGACY_RETRY_POLICY: 'retryPolicy',
399
+ /** @deprecated Use ApiFields.IS_IDEMPOTENT instead */
400
+ LEGACY_IS_IDEMPOTENT: 'isIdempotent',
401
+ /** @deprecated Use ApiFields.PROVIDER instead */
402
+ LEGACY_PROVIDER: 'provider',
403
+ /** @deprecated Use ApiFields.RESPECTS_RATE_LIMITS instead */
404
+ LEGACY_RESPECTS_RATE_LIMITS: 'respectsRateLimits',
405
+ };
406
+ /**
407
+ * UX and communication fields
408
+ * Fields related to user experience
409
+ */
410
+ export const UxFields = {
411
+ /** Response length in characters */
412
+ RESPONSE_LENGTH: 'ux.responseLength',
413
+ /** User type (technical, non_technical) */
414
+ USER_TYPE: 'ux.userType',
415
+ /** Technical term count */
416
+ TECHNICAL_TERM_COUNT: 'ux.technicalTermCount',
417
+ /** Recovery steps included */
418
+ INCLUDES_RECOVERY_STEPS: 'ux.includesRecoverySteps',
419
+ /** Confirmation required */
420
+ CONFIRMATION_REQUIRED: 'ux.confirmationRequired',
421
+ /** Estimated duration in ms */
422
+ ESTIMATED_DURATION_MS: 'ux.estimatedDurationMs',
423
+ /** Progress callback enabled */
424
+ PROGRESS_CALLBACK_ENABLED: 'ux.progressCallbackEnabled',
425
+ /** Undo supported */
426
+ UNDO_SUPPORTED: 'ux.undoSupported',
427
+ /** User initiated */
428
+ USER_INITIATED: 'ux.userInitiated',
429
+ /** Notifications in last hour */
430
+ NOTIFICATIONS_LAST_HOUR: 'ux.notificationsLastHour',
431
+ /** Prompts in last minute */
432
+ PROMPTS_LAST_MINUTE: 'ux.promptsLastMinute',
433
+ /** Loading indicator enabled */
434
+ LOADING_INDICATOR_ENABLED: 'ux.loadingIndicatorEnabled',
435
+ /** Timeout warning enabled */
436
+ TIMEOUT_WARNING_ENABLED: 'ux.timeoutWarningEnabled',
437
+ /** Alt text exists */
438
+ ALT_TEXT: 'ux.altText',
439
+ /** Contrast ratio met */
440
+ CONTRAST_RATIO_MET: 'ux.contrastRatioMet',
441
+ /** Keyboard accessible */
442
+ KEYBOARD_ACCESSIBLE: 'ux.keyboardAccessible',
443
+ /** Result count */
444
+ RESULT_COUNT: 'ux.resultCount',
445
+ /** Empty state message */
446
+ EMPTY_STATE_MESSAGE: 'ux.emptyStateMessage',
447
+ /** Is async operation */
448
+ IS_ASYNC: 'ux.isAsync',
449
+ /** Has timeout */
450
+ HAS_TIMEOUT: 'ux.hasTimeout',
451
+ /** Content type */
452
+ CONTENT_TYPE: 'ux.contentType',
453
+ /** Has color content */
454
+ HAS_COLOR_CONTENT: 'ux.hasColorContent',
455
+ // Legacy aliases
456
+ /** @deprecated Use UxFields.RESPONSE_LENGTH instead */
457
+ LEGACY_RESPONSE_LENGTH: 'responseLength',
458
+ /** @deprecated Use UxFields.USER_TYPE instead */
459
+ LEGACY_USER_TYPE: 'userType',
460
+ /** @deprecated Use UxFields.TECHNICAL_TERM_COUNT instead */
461
+ LEGACY_TECHNICAL_TERM_COUNT: 'technicalTermCount',
462
+ /** @deprecated Use UxFields.INCLUDES_RECOVERY_STEPS instead */
463
+ LEGACY_INCLUDES_RECOVERY_STEPS: 'includesRecoverySteps',
464
+ /** @deprecated Use UxFields.CONFIRMATION_REQUIRED instead */
465
+ LEGACY_CONFIRMATION_REQUIRED: 'confirmationRequired',
466
+ /** @deprecated Use UxFields.ESTIMATED_DURATION_MS instead */
467
+ LEGACY_ESTIMATED_DURATION_MS: 'estimatedDurationMs',
468
+ /** @deprecated Use UxFields.PROGRESS_CALLBACK_ENABLED instead */
469
+ LEGACY_PROGRESS_CALLBACK_ENABLED: 'progressCallbackEnabled',
470
+ /** @deprecated Use UxFields.UNDO_SUPPORTED instead */
471
+ LEGACY_UNDO_SUPPORTED: 'undoSupported',
472
+ /** @deprecated Use UxFields.USER_INITIATED instead */
473
+ LEGACY_USER_INITIATED: 'userInitiated',
474
+ /** @deprecated Use UxFields.NOTIFICATIONS_LAST_HOUR instead */
475
+ LEGACY_NOTIFICATIONS_LAST_HOUR: 'notificationsLastHour',
476
+ /** @deprecated Use UxFields.IS_ASYNC instead */
477
+ LEGACY_IS_ASYNC: 'isAsync',
478
+ /** @deprecated Use UxFields.CONTENT_TYPE instead */
479
+ LEGACY_CONTENT_TYPE: 'contentType',
480
+ };
481
+ /**
482
+ * WebSocket and real-time fields
483
+ */
484
+ export const WebSocketFields = {
485
+ /** WebSocket protocol */
486
+ PROTOCOL: 'websocket.protocol',
487
+ /** Message rate limit enabled */
488
+ MESSAGE_RATE_LIMIT_ENABLED: 'websocket.messageRateLimitEnabled',
489
+ /** Message type (text, binary) */
490
+ MESSAGE_TYPE: 'websocket.messageType',
491
+ /** Max message size */
492
+ MAX_MESSAGE_SIZE: 'websocket.maxMessageSize',
493
+ /** Heartbeat enabled */
494
+ HEARTBEAT_ENABLED: 'websocket.heartbeatEnabled',
495
+ /** Concurrent connections */
496
+ CONCURRENT_CONNECTIONS: 'websocket.concurrentConnections',
497
+ /** Message validation enabled */
498
+ MESSAGE_VALIDATION: 'websocket.messageValidation',
499
+ // Legacy aliases
500
+ /** @deprecated Use WebSocketFields.MESSAGE_RATE_LIMIT_ENABLED instead */
501
+ LEGACY_MESSAGE_RATE_LIMIT_ENABLED: 'messageRateLimitEnabled',
502
+ /** @deprecated Use WebSocketFields.MAX_MESSAGE_SIZE instead */
503
+ LEGACY_MAX_MESSAGE_SIZE: 'maxMessageSize',
504
+ /** @deprecated Use WebSocketFields.HEARTBEAT_ENABLED instead */
505
+ LEGACY_HEARTBEAT_ENABLED: 'heartbeatEnabled',
506
+ /** @deprecated Use WebSocketFields.CONCURRENT_CONNECTIONS instead */
507
+ LEGACY_CONCURRENT_CONNECTIONS: 'concurrentConnections',
508
+ /** @deprecated Use WebSocketFields.MESSAGE_VALIDATION instead */
509
+ LEGACY_MESSAGE_VALIDATION: 'messageValidation',
510
+ };
511
+ /**
512
+ * ML/AI specific fields
513
+ */
514
+ export const MlAiFields = {
515
+ /** OOM handling configured */
516
+ OOM_HANDLING: 'mlai.oomHandling',
517
+ /** Unload strategy defined */
518
+ UNLOAD_STRATEGY: 'mlai.unloadStrategy',
519
+ /** Inference batch size */
520
+ BATCH_SIZE: 'mlai.batchSize',
521
+ /** Content safety filter enabled */
522
+ CONTENT_SAFETY_FILTER: 'mlai.contentSafetyFilter',
523
+ /** GPU memory usage (0-1) */
524
+ GPU_MEMORY_USAGE: 'mlai.gpuMemoryUsage',
525
+ /** Model version */
526
+ MODEL_VERSION: 'mlai.modelVersion',
527
+ // Legacy aliases
528
+ /** @deprecated Use MlAiFields.OOM_HANDLING instead */
529
+ LEGACY_OOM_HANDLING: 'oomHandling',
530
+ /** @deprecated Use MlAiFields.UNLOAD_STRATEGY instead */
531
+ LEGACY_UNLOAD_STRATEGY: 'unloadStrategy',
532
+ /** @deprecated Use MlAiFields.BATCH_SIZE instead */
533
+ LEGACY_BATCH_SIZE: 'batchSize',
534
+ /** @deprecated Use MlAiFields.CONTENT_SAFETY_FILTER instead */
535
+ LEGACY_CONTENT_SAFETY_FILTER: 'contentSafetyFilter',
536
+ /** @deprecated Use MlAiFields.GPU_MEMORY_USAGE instead */
537
+ LEGACY_GPU_MEMORY_USAGE: 'gpuMemoryUsage',
538
+ /** @deprecated Use MlAiFields.MODEL_VERSION instead */
539
+ LEGACY_MODEL_VERSION: 'modelVersion',
540
+ };
541
+ /**
542
+ * Framework-specific fields (Flask, Azure, etc.)
543
+ */
544
+ export const FrameworkFields = {
545
+ // Flask
546
+ /** Flask debug mode enabled */
547
+ FLASK_DEBUG_ENABLED: 'flask.debugEnabled',
548
+ /** CORS origins setting */
549
+ CORS_ORIGINS: 'flask.corsOrigins',
550
+ /** Max content length */
551
+ MAX_CONTENT_LENGTH: 'flask.maxContentLength',
552
+ /** Secret key strength */
553
+ SECRET_KEY_STRENGTH: 'flask.secretKeyStrength',
554
+ /** Jinja auto escape enabled */
555
+ JINJA_AUTO_ESCAPE: 'flask.jinjaAutoEscape',
556
+ /** HTTPS enforced */
557
+ HTTPS_ENFORCED: 'flask.httpsEnforced',
558
+ /** Session cookie secure */
559
+ SESSION_COOKIE_SECURE: 'flask.sessionCookieSecure',
560
+ // Azure
561
+ /** Azure database type (cosmos-db) */
562
+ DATABASE: 'azure.database',
563
+ /** RU usage percent */
564
+ RU_USAGE_PERCENT: 'azure.ruUsagePercent',
565
+ /** Uses connection string */
566
+ USES_CONNECTION_STRING: 'azure.usesConnectionString',
567
+ /** App Insights enabled */
568
+ APP_INSIGHTS_ENABLED: 'azure.appInsightsEnabled',
569
+ /** Partition key optimized */
570
+ PARTITION_KEY_OPTIMIZED: 'azure.partitionKeyOptimized',
571
+ /** CORS configured */
572
+ CORS_CONFIGURED: 'azure.corsConfigured',
573
+ // Legacy aliases
574
+ /** @deprecated Use FrameworkFields.FLASK_DEBUG_ENABLED instead */
575
+ LEGACY_FLASK_DEBUG_ENABLED: 'flaskDebugEnabled',
576
+ /** @deprecated Use FrameworkFields.CORS_ORIGINS instead */
577
+ LEGACY_CORS_ORIGINS: 'corsOrigins',
578
+ /** @deprecated Use FrameworkFields.MAX_CONTENT_LENGTH instead */
579
+ LEGACY_MAX_CONTENT_LENGTH: 'maxContentLength',
580
+ /** @deprecated Use FrameworkFields.SECRET_KEY_STRENGTH instead */
581
+ LEGACY_SECRET_KEY_STRENGTH: 'secretKeyStrength',
582
+ /** @deprecated Use FrameworkFields.JINJA_AUTO_ESCAPE instead */
583
+ LEGACY_JINJA_AUTO_ESCAPE: 'jinjaAutoEscape',
584
+ /** @deprecated Use FrameworkFields.HTTPS_ENFORCED instead */
585
+ LEGACY_HTTPS_ENFORCED: 'httpsEnforced',
586
+ /** @deprecated Use FrameworkFields.SESSION_COOKIE_SECURE instead */
587
+ LEGACY_SESSION_COOKIE_SECURE: 'sessionCookieSecure',
588
+ /** @deprecated Use FrameworkFields.DATABASE instead */
589
+ LEGACY_DATABASE: 'database',
590
+ /** @deprecated Use FrameworkFields.RU_USAGE_PERCENT instead */
591
+ LEGACY_RU_USAGE_PERCENT: 'ruUsagePercent',
592
+ /** @deprecated Use FrameworkFields.USES_CONNECTION_STRING instead */
593
+ LEGACY_USES_CONNECTION_STRING: 'usesConnectionString',
594
+ /** @deprecated Use FrameworkFields.APP_INSIGHTS_ENABLED instead */
595
+ LEGACY_APP_INSIGHTS_ENABLED: 'appInsightsEnabled',
596
+ /** @deprecated Use FrameworkFields.PARTITION_KEY_OPTIMIZED instead */
597
+ LEGACY_PARTITION_KEY_OPTIMIZED: 'partitionKeyOptimized',
598
+ /** @deprecated Use FrameworkFields.CORS_CONFIGURED instead */
599
+ LEGACY_CORS_CONFIGURED: 'corsConfigured',
600
+ };
601
+ // ============================================================================
602
+ // LEGACY FIELD MAPPINGS
603
+ // ============================================================================
604
+ /**
605
+ * Mapping from legacy field names to standard field paths
606
+ * Used for migration and backward compatibility
607
+ */
608
+ export const LegacyFieldMappings = {
609
+ // Action fields
610
+ 'actionName': ActionFields.NAME,
611
+ 'actionCategory': ActionFields.CATEGORY,
612
+ // Environment fields
613
+ 'environment': EnvironmentFields.ENVIRONMENT,
614
+ 'platform': EnvironmentFields.PLATFORM,
615
+ 'framework': EnvironmentFields.FRAMEWORK,
616
+ // User fields
617
+ 'userId': UserFields.USER_ID,
618
+ 'userRole': UserFields.USER_ROLE,
619
+ 'agentId': UserFields.AGENT_ID,
620
+ 'sessionId': UserFields.SESSION_ID,
621
+ // Data fields
622
+ 'dataClassification': DataFields.CLASSIFICATION,
623
+ 'dataType': DataFields.TYPE,
624
+ 'dataContainsPII': DataFields.CONTAINS_PII,
625
+ 'recordCount': DataFields.RECORD_COUNT,
626
+ 'dataRetentionExceeded': DataFields.RETENTION_EXCEEDED,
627
+ 'storageType': DataFields.STORAGE_TYPE,
628
+ // Operation fields
629
+ 'operation': OperationFields.OPERATION,
630
+ 'httpMethod': OperationFields.HTTP_METHOD,
631
+ 'protocol': OperationFields.PROTOCOL,
632
+ 'filePath': OperationFields.FILE_PATH,
633
+ 'query': OperationFields.QUERY,
634
+ 'requestType': OperationFields.REQUEST_TYPE,
635
+ 'targetRole': OperationFields.TARGET_ROLE,
636
+ 'destinationRegion': OperationFields.DESTINATION_REGION,
637
+ // Security fields
638
+ 'authToken': SecurityFields.AUTH_TOKEN,
639
+ 'authenticated': SecurityFields.AUTHENTICATED,
640
+ 'codeValidated': SecurityFields.CODE_VALIDATED,
641
+ 'sandboxed': SecurityFields.SANDBOXED,
642
+ 'hostWhitelisted': SecurityFields.HOST_WHITELISTED,
643
+ 'encryptionEnabled': SecurityFields.ENCRYPTION_ENABLED,
644
+ 'sessionAnomalyScore': SecurityFields.SESSION_ANOMALY_SCORE,
645
+ 'signatureValidated': SecurityFields.SIGNATURE_VALIDATED,
646
+ 'inputValidation': SecurityFields.INPUT_VALIDATED,
647
+ 'fileValidation': SecurityFields.FILE_VALIDATED,
648
+ 'tlsEnabled': SecurityFields.TLS_ENABLED,
649
+ // Compliance fields
650
+ 'verificationCompleted': ComplianceFields.VERIFICATION_COMPLETED,
651
+ 'processingBasis': ComplianceFields.PROCESSING_BASIS,
652
+ 'consentValid': ComplianceFields.CONSENT_VALID,
653
+ 'masked': ComplianceFields.DATA_MASKED,
654
+ 'businessJustification': ComplianceFields.BUSINESS_JUSTIFICATION,
655
+ 'fieldsRequested': ComplianceFields.FIELDS_REQUESTED,
656
+ 'initiatorId': ComplianceFields.INITIATOR_ID,
657
+ 'accountRequirementsValidated': ComplianceFields.ACCOUNT_REQUIREMENTS_VALIDATED,
658
+ 'scaEnabled': ComplianceFields.SCA_ENABLED,
659
+ 'customerRegion': ComplianceFields.CUSTOMER_REGION,
660
+ // Operational fields
661
+ 'estimatedCost': OperationalFields.ESTIMATED_COST,
662
+ 'resourceCost': OperationalFields.RESOURCE_COST,
663
+ 'estimatedMemoryMb': OperationalFields.ESTIMATED_MEMORY_MB,
664
+ 'tokenCount': OperationalFields.TOKEN_COUNT,
665
+ 'dailySpend': OperationalFields.DAILY_SPEND,
666
+ 'deploymentWindowOpen': OperationalFields.DEPLOYMENT_WINDOW_OPEN,
667
+ 'rollbackPlanDefined': OperationalFields.ROLLBACK_PLAN_DEFINED,
668
+ 'changeFreezeActive': OperationalFields.CHANGE_FREEZE_ACTIVE,
669
+ 'maintenanceWindowActive': OperationalFields.MAINTENANCE_WINDOW_ACTIVE,
670
+ 'backupVerified': OperationalFields.BACKUP_VERIFIED,
671
+ 'incidentSeverity': OperationalFields.INCIDENT_SEVERITY,
672
+ 'sessionActionCount': OperationalFields.SESSION_ACTION_COUNT,
673
+ 'retryCount': OperationalFields.RETRY_COUNT,
674
+ 'actionPattern': OperationalFields.ACTION_PATTERN,
675
+ 'concurrentCount': OperationalFields.CONCURRENT_COUNT,
676
+ 'timeout': OperationalFields.TIMEOUT_MS,
677
+ // Testing fields
678
+ 'isTest': TestingFields.IS_TEST,
679
+ 'testType': TestingFields.TEST_TYPE,
680
+ 'testIsolation': TestingFields.TEST_ISOLATION,
681
+ 'hasCleanup': TestingFields.HAS_CLEANUP,
682
+ 'executionTimeMs': TestingFields.EXECUTION_TIME_MS,
683
+ 'usesRandomWait': TestingFields.USES_RANDOM_WAIT,
684
+ 'runsInParallel': TestingFields.RUNS_IN_PARALLEL,
685
+ 'parallelSafe': TestingFields.PARALLEL_SAFE,
686
+ // API fields
687
+ 'apiVersion': ApiFields.API_VERSION,
688
+ 'rateLimitHeadersIncluded': ApiFields.RATE_LIMIT_HEADERS_INCLUDED,
689
+ 'idempotencyKey': ApiFields.IDEMPOTENCY_KEY,
690
+ 'circuitBreakerEnabled': ApiFields.CIRCUIT_BREAKER_ENABLED,
691
+ 'retryPolicy': ApiFields.RETRY_POLICY,
692
+ 'isIdempotent': ApiFields.IS_IDEMPOTENT,
693
+ 'provider': ApiFields.PROVIDER,
694
+ 'respectsRateLimits': ApiFields.RESPECTS_RATE_LIMITS,
695
+ // UX fields
696
+ 'responseLength': UxFields.RESPONSE_LENGTH,
697
+ 'userType': UxFields.USER_TYPE,
698
+ 'technicalTermCount': UxFields.TECHNICAL_TERM_COUNT,
699
+ 'includesRecoverySteps': UxFields.INCLUDES_RECOVERY_STEPS,
700
+ 'confirmationRequired': UxFields.CONFIRMATION_REQUIRED,
701
+ 'estimatedDurationMs': UxFields.ESTIMATED_DURATION_MS,
702
+ 'progressCallbackEnabled': UxFields.PROGRESS_CALLBACK_ENABLED,
703
+ 'undoSupported': UxFields.UNDO_SUPPORTED,
704
+ 'userInitiated': UxFields.USER_INITIATED,
705
+ 'notificationsLastHour': UxFields.NOTIFICATIONS_LAST_HOUR,
706
+ 'isAsync': UxFields.IS_ASYNC,
707
+ 'contentType': UxFields.CONTENT_TYPE,
708
+ // WebSocket fields
709
+ 'messageRateLimitEnabled': WebSocketFields.MESSAGE_RATE_LIMIT_ENABLED,
710
+ 'maxMessageSize': WebSocketFields.MAX_MESSAGE_SIZE,
711
+ 'heartbeatEnabled': WebSocketFields.HEARTBEAT_ENABLED,
712
+ 'concurrentConnections': WebSocketFields.CONCURRENT_CONNECTIONS,
713
+ 'messageValidation': WebSocketFields.MESSAGE_VALIDATION,
714
+ // ML/AI fields
715
+ 'oomHandling': MlAiFields.OOM_HANDLING,
716
+ 'unloadStrategy': MlAiFields.UNLOAD_STRATEGY,
717
+ 'batchSize': MlAiFields.BATCH_SIZE,
718
+ 'contentSafetyFilter': MlAiFields.CONTENT_SAFETY_FILTER,
719
+ 'gpuMemoryUsage': MlAiFields.GPU_MEMORY_USAGE,
720
+ 'modelVersion': MlAiFields.MODEL_VERSION,
721
+ // Framework fields
722
+ 'flaskDebugEnabled': FrameworkFields.FLASK_DEBUG_ENABLED,
723
+ 'corsOrigins': FrameworkFields.CORS_ORIGINS,
724
+ 'maxContentLength': FrameworkFields.MAX_CONTENT_LENGTH,
725
+ 'secretKeyStrength': FrameworkFields.SECRET_KEY_STRENGTH,
726
+ 'jinjaAutoEscape': FrameworkFields.JINJA_AUTO_ESCAPE,
727
+ 'httpsEnforced': FrameworkFields.HTTPS_ENFORCED,
728
+ 'sessionCookieSecure': FrameworkFields.SESSION_COOKIE_SECURE,
729
+ 'database': FrameworkFields.DATABASE,
730
+ 'ruUsagePercent': FrameworkFields.RU_USAGE_PERCENT,
731
+ 'usesConnectionString': FrameworkFields.USES_CONNECTION_STRING,
732
+ 'appInsightsEnabled': FrameworkFields.APP_INSIGHTS_ENABLED,
733
+ 'partitionKeyOptimized': FrameworkFields.PARTITION_KEY_OPTIMIZED,
734
+ 'corsConfigured': FrameworkFields.CORS_CONFIGURED,
735
+ };
736
+ // ============================================================================
737
+ // VALIDATION UTILITIES
738
+ // ============================================================================
739
+ /**
740
+ * Set of all known legacy field names for validation
741
+ */
742
+ const knownLegacyFields = new Set(Object.keys(LegacyFieldMappings));
743
+ /**
744
+ * Set of all standard field paths
745
+ */
746
+ const standardFields = new Set();
747
+ // Populate standard fields from all field constants
748
+ [
749
+ ActionFields, EnvironmentFields, UserFields, DataFields, OperationFields,
750
+ SecurityFields, ComplianceFields, OperationalFields, TestingFields,
751
+ ApiFields, UxFields, WebSocketFields, MlAiFields, FrameworkFields
752
+ ].forEach(fieldSet => {
753
+ Object.values(fieldSet).forEach(value => {
754
+ if (!value.startsWith('LEGACY_')) {
755
+ standardFields.add(value);
756
+ }
757
+ });
758
+ });
759
+ /**
760
+ * Validate a field name and provide migration guidance
761
+ *
762
+ * @param field - The field name to validate
763
+ * @returns Validation result with migration guidance
764
+ */
765
+ export function validateFieldName(field) {
766
+ // Check if it's a standard field path
767
+ if (standardFields.has(field)) {
768
+ return { valid: true, isLegacy: false };
769
+ }
770
+ // Check if it's a known legacy field
771
+ if (knownLegacyFields.has(field)) {
772
+ const standardPath = LegacyFieldMappings[field];
773
+ return {
774
+ valid: true,
775
+ isLegacy: true,
776
+ standardPath,
777
+ warning: `Field '${field}' is using legacy naming. Consider migrating to '${standardPath}'`
778
+ };
779
+ }
780
+ // CSS-specific fields are handled separately and are valid
781
+ if (field.startsWith('css') || field.startsWith('has') || field.startsWith('is') || field.startsWith('uses')) {
782
+ // These are domain-specific fields that may not have standard paths
783
+ return {
784
+ valid: true,
785
+ isLegacy: false,
786
+ suggestion: `Field '${field}' appears to be domain-specific. Consider adding to field-standards.ts if used across multiple rules.`
787
+ };
788
+ }
789
+ // Unknown field - provide suggestions
790
+ const possibleMatches = findSimilarFields(field);
791
+ return {
792
+ valid: false,
793
+ isLegacy: false,
794
+ warning: `Unknown field '${field}'`,
795
+ suggestion: possibleMatches.length > 0
796
+ ? `Did you mean: ${possibleMatches.join(', ')}?`
797
+ : 'Consider adding this field to field-standards.ts'
798
+ };
799
+ }
800
+ /**
801
+ * Find similar field names using Levenshtein distance
802
+ */
803
+ function findSimilarFields(field, maxDistance = 3) {
804
+ const similar = [];
805
+ const allFields = [...knownLegacyFields, ...standardFields];
806
+ for (const knownField of allFields) {
807
+ const distance = levenshteinDistance(field.toLowerCase(), knownField.toLowerCase());
808
+ if (distance <= maxDistance) {
809
+ similar.push(knownField);
810
+ }
811
+ }
812
+ return similar.slice(0, 3);
813
+ }
814
+ /**
815
+ * Calculate Levenshtein distance between two strings
816
+ */
817
+ function levenshteinDistance(a, b) {
818
+ if (a.length === 0)
819
+ return b.length;
820
+ if (b.length === 0)
821
+ return a.length;
822
+ const matrix = [];
823
+ for (let i = 0; i <= b.length; i++) {
824
+ matrix[i] = [i];
825
+ }
826
+ for (let j = 0; j <= a.length; j++) {
827
+ matrix[0][j] = j;
828
+ }
829
+ for (let i = 1; i <= b.length; i++) {
830
+ for (let j = 1; j <= a.length; j++) {
831
+ if (b.charAt(i - 1) === a.charAt(j - 1)) {
832
+ matrix[i][j] = matrix[i - 1][j - 1];
833
+ }
834
+ else {
835
+ matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution
836
+ matrix[i][j - 1] + 1, // insertion
837
+ matrix[i - 1][j] + 1 // deletion
838
+ );
839
+ }
840
+ }
841
+ }
842
+ return matrix[b.length][a.length];
843
+ }
844
+ /**
845
+ * Validate all fields in a rule's conditions
846
+ *
847
+ * @param conditions - Array of rule conditions to validate
848
+ * @returns Array of validation results for each condition
849
+ */
850
+ export function validateRuleConditions(conditions) {
851
+ return conditions.map(condition => validateFieldName(condition.field));
852
+ }
853
+ /**
854
+ * Get all legacy field warnings for a set of rules
855
+ *
856
+ * @param rules - Array of rules to check
857
+ * @returns Array of warnings about legacy field usage
858
+ */
859
+ export function getLegacyFieldWarnings(rules) {
860
+ const warnings = [];
861
+ for (const rule of rules) {
862
+ for (const condition of rule.conditions) {
863
+ const result = validateFieldName(condition.field);
864
+ if (result.isLegacy && result.standardPath && result.warning) {
865
+ warnings.push({
866
+ ruleId: rule.id,
867
+ field: condition.field,
868
+ warning: result.warning,
869
+ standardPath: result.standardPath
870
+ });
871
+ }
872
+ }
873
+ }
874
+ return warnings;
875
+ }
876
+ /**
877
+ * Convert a legacy field name to its standard path
878
+ *
879
+ * @param legacyField - The legacy field name
880
+ * @returns The standard field path, or the original if not found
881
+ */
882
+ export function toStandardFieldPath(legacyField) {
883
+ return LegacyFieldMappings[legacyField] || legacyField;
884
+ }
885
+ // ============================================================================
886
+ // EXPORT CONVENIENCE OBJECT
887
+ // ============================================================================
888
+ /**
889
+ * All field constants organized by category
890
+ */
891
+ export const Fields = {
892
+ Action: ActionFields,
893
+ Environment: EnvironmentFields,
894
+ User: UserFields,
895
+ Data: DataFields,
896
+ Operation: OperationFields,
897
+ Security: SecurityFields,
898
+ Compliance: ComplianceFields,
899
+ Operational: OperationalFields,
900
+ Testing: TestingFields,
901
+ Api: ApiFields,
902
+ Ux: UxFields,
903
+ WebSocket: WebSocketFields,
904
+ MlAi: MlAiFields,
905
+ Framework: FrameworkFields,
906
+ };
907
+ export default Fields;
908
+ //# sourceMappingURL=field-standards.js.map