@trentapps/manager-protocol 1.1.3 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +164 -17
- package/dist/analyzers/CSSAnalyzer.d.ts +180 -8
- package/dist/analyzers/CSSAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/CSSAnalyzer.js +561 -105
- package/dist/analyzers/CSSAnalyzer.js.map +1 -1
- package/dist/config/dashboard.d.ts +55 -0
- package/dist/config/dashboard.d.ts.map +1 -0
- package/dist/config/dashboard.js +103 -0
- package/dist/config/dashboard.js.map +1 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +7 -0
- package/dist/config/index.js.map +1 -0
- package/dist/dashboard/httpDashboard.d.ts +100 -0
- package/dist/dashboard/httpDashboard.d.ts.map +1 -0
- package/dist/dashboard/httpDashboard.js +1276 -0
- package/dist/dashboard/httpDashboard.js.map +1 -0
- package/dist/dashboard/index.d.ts +6 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +7 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/engine/AuditLogger.d.ts +370 -2
- package/dist/engine/AuditLogger.d.ts.map +1 -1
- package/dist/engine/AuditLogger.js +1064 -24
- package/dist/engine/AuditLogger.js.map +1 -1
- package/dist/engine/GitHubClient.d.ts +183 -0
- package/dist/engine/GitHubClient.d.ts.map +1 -0
- package/dist/engine/GitHubClient.js +411 -0
- package/dist/engine/GitHubClient.js.map +1 -0
- package/dist/engine/RateLimiter.d.ts +5 -3
- package/dist/engine/RateLimiter.d.ts.map +1 -1
- package/dist/engine/RateLimiter.js +49 -72
- package/dist/engine/RateLimiter.js.map +1 -1
- package/dist/engine/RuleDependencyAnalyzer.d.ts +73 -0
- package/dist/engine/RuleDependencyAnalyzer.d.ts.map +1 -0
- package/dist/engine/RuleDependencyAnalyzer.js +475 -0
- package/dist/engine/RuleDependencyAnalyzer.js.map +1 -0
- package/dist/engine/RulesEngine.d.ts +102 -3
- package/dist/engine/RulesEngine.d.ts.map +1 -1
- package/dist/engine/RulesEngine.js +326 -21
- package/dist/engine/RulesEngine.js.map +1 -1
- package/dist/engine/TaskManager.d.ts +10 -14
- package/dist/engine/TaskManager.d.ts.map +1 -1
- package/dist/engine/TaskManager.js +169 -197
- package/dist/engine/TaskManager.js.map +1 -1
- package/dist/engine/index.d.ts +3 -0
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +5 -0
- package/dist/engine/index.js.map +1 -1
- package/dist/rules/azure.d.ts.map +1 -1
- package/dist/rules/azure.js +12 -14
- package/dist/rules/azure.js.map +1 -1
- package/dist/rules/compliance.d.ts.map +1 -1
- package/dist/rules/compliance.js +23 -41
- package/dist/rules/compliance.js.map +1 -1
- package/dist/rules/condition-optimizer.d.ts +151 -0
- package/dist/rules/condition-optimizer.d.ts.map +1 -0
- package/dist/rules/condition-optimizer.js +479 -0
- package/dist/rules/condition-optimizer.js.map +1 -0
- package/dist/rules/css.d.ts.map +1 -1
- package/dist/rules/css.js +538 -0
- package/dist/rules/css.js.map +1 -1
- package/dist/rules/field-standards.d.ts +1172 -0
- package/dist/rules/field-standards.d.ts.map +1 -0
- package/dist/rules/field-standards.js +908 -0
- package/dist/rules/field-standards.js.map +1 -0
- package/dist/rules/flask.d.ts.map +1 -1
- package/dist/rules/flask.js +18 -31
- package/dist/rules/flask.js.map +1 -1
- package/dist/rules/index.d.ts +220 -0
- package/dist/rules/index.d.ts.map +1 -1
- package/dist/rules/index.js +155 -0
- package/dist/rules/index.js.map +1 -1
- package/dist/rules/ml-ai.d.ts.map +1 -1
- package/dist/rules/ml-ai.js +11 -13
- package/dist/rules/ml-ai.js.map +1 -1
- package/dist/rules/patterns.d.ts +568 -0
- package/dist/rules/patterns.d.ts.map +1 -0
- package/dist/rules/patterns.js +1359 -0
- package/dist/rules/patterns.js.map +1 -0
- package/dist/rules/security.d.ts.map +1 -1
- package/dist/rules/security.js +580 -19
- package/dist/rules/security.js.map +1 -1
- package/dist/rules/shared-patterns.d.ts +268 -0
- package/dist/rules/shared-patterns.d.ts.map +1 -0
- package/dist/rules/shared-patterns.js +556 -0
- package/dist/rules/shared-patterns.js.map +1 -0
- package/dist/rules/storage.d.ts +8 -2
- package/dist/rules/storage.d.ts.map +1 -1
- package/dist/rules/storage.js +541 -3
- package/dist/rules/storage.js.map +1 -1
- package/dist/rules/stripe.d.ts.map +1 -1
- package/dist/rules/stripe.js +19 -26
- package/dist/rules/stripe.js.map +1 -1
- package/dist/rules/websocket.d.ts.map +1 -1
- package/dist/rules/websocket.js +32 -40
- package/dist/rules/websocket.js.map +1 -1
- package/dist/supervisor/AgentSupervisor.d.ts +52 -0
- package/dist/supervisor/AgentSupervisor.d.ts.map +1 -1
- package/dist/supervisor/AgentSupervisor.js +120 -1
- package/dist/supervisor/AgentSupervisor.js.map +1 -1
- package/dist/supervisor/ManagedServerRegistry.d.ts +139 -2
- package/dist/supervisor/ManagedServerRegistry.d.ts.map +1 -1
- package/dist/supervisor/ManagedServerRegistry.js +590 -6
- package/dist/supervisor/ManagedServerRegistry.js.map +1 -1
- package/dist/supervisor/ProjectTracker.d.ts +2 -1
- package/dist/supervisor/ProjectTracker.d.ts.map +1 -1
- package/dist/supervisor/ProjectTracker.js +5 -9
- package/dist/supervisor/ProjectTracker.js.map +1 -1
- package/dist/testing/index.d.ts +11 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +12 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/rule-tester.d.ts +217 -0
- package/dist/testing/rule-tester.d.ts.map +1 -0
- package/dist/testing/rule-tester.examples.d.ts +57 -0
- package/dist/testing/rule-tester.examples.d.ts.map +1 -0
- package/dist/testing/rule-tester.examples.js +375 -0
- package/dist/testing/rule-tester.examples.js.map +1 -0
- package/dist/testing/rule-tester.js +381 -0
- package/dist/testing/rule-tester.js.map +1 -0
- package/dist/testing/rule-validator.d.ts +141 -0
- package/dist/testing/rule-validator.d.ts.map +1 -0
- package/dist/testing/rule-validator.js +640 -0
- package/dist/testing/rule-validator.js.map +1 -0
- package/dist/types/index.d.ts +265 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +57 -2
- package/dist/types/index.js.map +1 -1
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/rate-limiting.d.ts +268 -0
- package/dist/utils/rate-limiting.d.ts.map +1 -0
- package/dist/utils/rate-limiting.js +403 -0
- package/dist/utils/rate-limiting.js.map +1 -0
- package/dist/utils/shared.d.ts +306 -0
- package/dist/utils/shared.d.ts.map +1 -0
- package/dist/utils/shared.js +464 -0
- package/dist/utils/shared.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1,464 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enterprise Agent Supervisor - Shared Utilities
|
|
3
|
+
*
|
|
4
|
+
* Common utility functions used across the codebase.
|
|
5
|
+
* Extracted from various modules to reduce duplication and ensure consistency.
|
|
6
|
+
*
|
|
7
|
+
* Tasks: #40, #41, #42, #48
|
|
8
|
+
*/
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// HASH UTILITIES (#42)
|
|
11
|
+
// ============================================================================
|
|
12
|
+
/**
|
|
13
|
+
* Simple string hash function for generating IDs.
|
|
14
|
+
* Uses a fast, non-cryptographic hash algorithm (djb2 variant).
|
|
15
|
+
*
|
|
16
|
+
* @param str - The string to hash
|
|
17
|
+
* @param options - Optional configuration
|
|
18
|
+
* @returns Hexadecimal hash string (default) or base36 string
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* hashString('hello world'); // Returns: 'a3e45bc1'
|
|
23
|
+
* hashString('hello world', { base: 36 }); // Returns: 'x7k2m'
|
|
24
|
+
* hashString('hello world', { length: 16 }); // Returns: '00000000a3e45bc1'
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export function hashString(str, options = {}) {
|
|
28
|
+
const { base = 16, length = 8 } = options;
|
|
29
|
+
let hash = 0;
|
|
30
|
+
for (let i = 0; i < str.length; i++) {
|
|
31
|
+
const char = str.charCodeAt(i);
|
|
32
|
+
hash = ((hash << 5) - hash) + char;
|
|
33
|
+
hash = hash & hash; // Convert to 32bit integer
|
|
34
|
+
}
|
|
35
|
+
const result = Math.abs(hash).toString(base);
|
|
36
|
+
return result.substring(0, length);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Common time window durations
|
|
40
|
+
*/
|
|
41
|
+
export const TimeWindows = {
|
|
42
|
+
/** 1 hour in milliseconds */
|
|
43
|
+
HOUR: 60 * 60 * 1000,
|
|
44
|
+
/** 24 hours in milliseconds */
|
|
45
|
+
DAY: 24 * 60 * 60 * 1000,
|
|
46
|
+
/** 7 days in milliseconds */
|
|
47
|
+
WEEK: 7 * 24 * 60 * 60 * 1000,
|
|
48
|
+
/** 30 days in milliseconds */
|
|
49
|
+
MONTH: 30 * 24 * 60 * 60 * 1000,
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Create a time window for filtering data.
|
|
53
|
+
*
|
|
54
|
+
* @param options - Time window options
|
|
55
|
+
* @returns TimeWindowResult with start/end times and contains() function
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```typescript
|
|
59
|
+
* // Last 24 hours
|
|
60
|
+
* const window = createTimeWindow();
|
|
61
|
+
*
|
|
62
|
+
* // Last hour
|
|
63
|
+
* const hourWindow = createTimeWindow({ durationMs: TimeWindows.HOUR });
|
|
64
|
+
*
|
|
65
|
+
* // Check if a timestamp is in the window
|
|
66
|
+
* if (window.contains(event.timestamp)) {
|
|
67
|
+
* // Event is within the time window
|
|
68
|
+
* }
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
export function createTimeWindow(options = {}) {
|
|
72
|
+
const { durationMs = TimeWindows.DAY, referenceTime = Date.now() } = options;
|
|
73
|
+
const endMs = referenceTime;
|
|
74
|
+
const startMs = endMs - durationMs;
|
|
75
|
+
return {
|
|
76
|
+
start: new Date(startMs).toISOString(),
|
|
77
|
+
end: new Date(endMs).toISOString(),
|
|
78
|
+
startMs,
|
|
79
|
+
endMs,
|
|
80
|
+
contains: (timestamp) => {
|
|
81
|
+
const ts = typeof timestamp === 'string'
|
|
82
|
+
? new Date(timestamp).getTime()
|
|
83
|
+
: timestamp instanceof Date
|
|
84
|
+
? timestamp.getTime()
|
|
85
|
+
: timestamp;
|
|
86
|
+
return ts >= startMs && ts <= endMs;
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Check if a window has expired based on start time and duration.
|
|
92
|
+
* Uses >= comparison for consistency (window expires AT the boundary).
|
|
93
|
+
*
|
|
94
|
+
* @param windowStart - Window start timestamp in milliseconds
|
|
95
|
+
* @param windowMs - Window duration in milliseconds
|
|
96
|
+
* @param now - Current time (defaults to Date.now())
|
|
97
|
+
* @returns true if the window has expired
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```typescript
|
|
101
|
+
* if (isWindowExpired(bucket.windowStart, config.windowMs)) {
|
|
102
|
+
* // Reset the window
|
|
103
|
+
* bucket.count = 0;
|
|
104
|
+
* bucket.windowStart = Date.now();
|
|
105
|
+
* }
|
|
106
|
+
* ```
|
|
107
|
+
*/
|
|
108
|
+
export function isWindowExpired(windowStart, windowMs, now = Date.now()) {
|
|
109
|
+
return now - windowStart >= windowMs;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Calculate the reset time for a window.
|
|
113
|
+
*
|
|
114
|
+
* @param windowStart - Window start timestamp in milliseconds
|
|
115
|
+
* @param windowMs - Window duration in milliseconds
|
|
116
|
+
* @returns Date object for when the window resets
|
|
117
|
+
*/
|
|
118
|
+
export function getWindowResetTime(windowStart, windowMs) {
|
|
119
|
+
return new Date(windowStart + windowMs);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Calculate aggregate metrics from an array of data items.
|
|
123
|
+
*
|
|
124
|
+
* @param items - Array of items to analyze
|
|
125
|
+
* @param valueExtractor - Function to extract numeric value from each item
|
|
126
|
+
* @param options - Configuration options
|
|
127
|
+
* @returns Aggregated metrics
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```typescript
|
|
131
|
+
* const activities = [
|
|
132
|
+
* { tokensUsed: 100, timestamp: '2024-01-01T00:00:00Z', outcome: 'success' },
|
|
133
|
+
* { tokensUsed: 200, timestamp: '2024-01-01T01:00:00Z', outcome: 'failure' },
|
|
134
|
+
* ];
|
|
135
|
+
*
|
|
136
|
+
* const metrics = calculateMetrics(
|
|
137
|
+
* activities,
|
|
138
|
+
* item => item.tokensUsed,
|
|
139
|
+
* {
|
|
140
|
+
* timestampField: 'timestamp',
|
|
141
|
+
* outcomeField: 'outcome',
|
|
142
|
+
* failureValue: 'failure'
|
|
143
|
+
* }
|
|
144
|
+
* );
|
|
145
|
+
* // Returns: { total: 300, count: 2, average: 150, min: 100, max: 200, ... }
|
|
146
|
+
* ```
|
|
147
|
+
*/
|
|
148
|
+
export function calculateMetrics(items, valueExtractor, options = {}) {
|
|
149
|
+
const { timestampField = 'timestamp', outcomeField = 'outcome', failureValue = 'failure', include24h = true } = options;
|
|
150
|
+
const now = Date.now();
|
|
151
|
+
const last24h = now - TimeWindows.DAY;
|
|
152
|
+
let total = 0;
|
|
153
|
+
let count = 0;
|
|
154
|
+
let min = Infinity;
|
|
155
|
+
let max = -Infinity;
|
|
156
|
+
let errorCount = 0;
|
|
157
|
+
let total24h = 0;
|
|
158
|
+
let count24h = 0;
|
|
159
|
+
let errors24h = 0;
|
|
160
|
+
for (const item of items) {
|
|
161
|
+
const value = valueExtractor(item);
|
|
162
|
+
const timestamp = item[timestampField];
|
|
163
|
+
const outcome = item[outcomeField];
|
|
164
|
+
const isRecent = include24h && timestamp
|
|
165
|
+
? new Date(timestamp).getTime() > last24h
|
|
166
|
+
: false;
|
|
167
|
+
// Count all items for error rate calculation
|
|
168
|
+
count++;
|
|
169
|
+
if (isRecent)
|
|
170
|
+
count24h++;
|
|
171
|
+
// Track failures
|
|
172
|
+
if (outcome === failureValue) {
|
|
173
|
+
errorCount++;
|
|
174
|
+
if (isRecent)
|
|
175
|
+
errors24h++;
|
|
176
|
+
}
|
|
177
|
+
// Aggregate numeric values (skip undefined)
|
|
178
|
+
if (value !== undefined && value !== null) {
|
|
179
|
+
total += value;
|
|
180
|
+
if (value < min)
|
|
181
|
+
min = value;
|
|
182
|
+
if (value > max)
|
|
183
|
+
max = value;
|
|
184
|
+
if (isRecent)
|
|
185
|
+
total24h += value;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// Handle edge cases
|
|
189
|
+
if (min === Infinity)
|
|
190
|
+
min = 0;
|
|
191
|
+
if (max === -Infinity)
|
|
192
|
+
max = 0;
|
|
193
|
+
const result = {
|
|
194
|
+
total,
|
|
195
|
+
count,
|
|
196
|
+
average: count > 0 ? total / count : 0,
|
|
197
|
+
min,
|
|
198
|
+
max,
|
|
199
|
+
errorCount,
|
|
200
|
+
errorRate: count > 0 ? errorCount / count : 0
|
|
201
|
+
};
|
|
202
|
+
if (include24h) {
|
|
203
|
+
result.last24h = {
|
|
204
|
+
total: total24h,
|
|
205
|
+
count: count24h,
|
|
206
|
+
errors: errors24h
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
return result;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Calculate grouped metrics (e.g., by category, by type).
|
|
213
|
+
*
|
|
214
|
+
* @param items - Array of items to analyze
|
|
215
|
+
* @param groupExtractor - Function to extract group key from each item
|
|
216
|
+
* @returns Map of group key to count
|
|
217
|
+
*
|
|
218
|
+
* @example
|
|
219
|
+
* ```typescript
|
|
220
|
+
* const events = [
|
|
221
|
+
* { eventType: 'action_evaluated' },
|
|
222
|
+
* { eventType: 'action_approved' },
|
|
223
|
+
* { eventType: 'action_evaluated' },
|
|
224
|
+
* ];
|
|
225
|
+
*
|
|
226
|
+
* const byType = calculateGroupedCounts(events, e => e.eventType);
|
|
227
|
+
* // Returns: { 'action_evaluated': 2, 'action_approved': 1 }
|
|
228
|
+
* ```
|
|
229
|
+
*/
|
|
230
|
+
export function calculateGroupedCounts(items, groupExtractor) {
|
|
231
|
+
const groups = {};
|
|
232
|
+
for (const item of items) {
|
|
233
|
+
const group = groupExtractor(item);
|
|
234
|
+
if (group !== undefined) {
|
|
235
|
+
groups[group] = (groups[group] || 0) + 1;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return groups;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Get top N items from a count record.
|
|
242
|
+
*
|
|
243
|
+
* @param counts - Record of key to count
|
|
244
|
+
* @param limit - Maximum number of items to return
|
|
245
|
+
* @returns Array of { key, count } sorted by count descending
|
|
246
|
+
*/
|
|
247
|
+
export function getTopCounts(counts, limit = 5) {
|
|
248
|
+
return Object.entries(counts)
|
|
249
|
+
.map(([key, count]) => ({ key, count }))
|
|
250
|
+
.sort((a, b) => b.count - a.count)
|
|
251
|
+
.slice(0, limit);
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Collection of common input validators.
|
|
255
|
+
*
|
|
256
|
+
* Each validator returns { valid: true } or { valid: false, error: 'message' }
|
|
257
|
+
*/
|
|
258
|
+
export const validators = {
|
|
259
|
+
/**
|
|
260
|
+
* Validate email format
|
|
261
|
+
*
|
|
262
|
+
* @example
|
|
263
|
+
* ```typescript
|
|
264
|
+
* validators.email('user@example.com'); // { valid: true }
|
|
265
|
+
* validators.email('invalid'); // { valid: false, error: '...' }
|
|
266
|
+
* ```
|
|
267
|
+
*/
|
|
268
|
+
email(value) {
|
|
269
|
+
if (!value || typeof value !== 'string') {
|
|
270
|
+
return { valid: false, error: 'Email is required' };
|
|
271
|
+
}
|
|
272
|
+
// RFC 5322 simplified regex
|
|
273
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
274
|
+
if (!emailRegex.test(value)) {
|
|
275
|
+
return { valid: false, error: 'Invalid email format' };
|
|
276
|
+
}
|
|
277
|
+
return { valid: true };
|
|
278
|
+
},
|
|
279
|
+
/**
|
|
280
|
+
* Validate URL format
|
|
281
|
+
*
|
|
282
|
+
* @example
|
|
283
|
+
* ```typescript
|
|
284
|
+
* validators.url('https://example.com'); // { valid: true }
|
|
285
|
+
* validators.url('not-a-url'); // { valid: false, error: '...' }
|
|
286
|
+
* ```
|
|
287
|
+
*/
|
|
288
|
+
url(value, options = {}) {
|
|
289
|
+
if (!value || typeof value !== 'string') {
|
|
290
|
+
return { valid: false, error: 'URL is required' };
|
|
291
|
+
}
|
|
292
|
+
try {
|
|
293
|
+
const url = new URL(value);
|
|
294
|
+
if (options.requireHttps && url.protocol !== 'https:') {
|
|
295
|
+
return { valid: false, error: 'URL must use HTTPS' };
|
|
296
|
+
}
|
|
297
|
+
return { valid: true };
|
|
298
|
+
}
|
|
299
|
+
catch {
|
|
300
|
+
return { valid: false, error: 'Invalid URL format' };
|
|
301
|
+
}
|
|
302
|
+
},
|
|
303
|
+
/**
|
|
304
|
+
* Validate file path (basic validation, no traversal attacks)
|
|
305
|
+
*
|
|
306
|
+
* @example
|
|
307
|
+
* ```typescript
|
|
308
|
+
* validators.path('/valid/path'); // { valid: true }
|
|
309
|
+
* validators.path('../traversal'); // { valid: false, error: '...' }
|
|
310
|
+
* ```
|
|
311
|
+
*/
|
|
312
|
+
path(value, options = {}) {
|
|
313
|
+
if (!value || typeof value !== 'string') {
|
|
314
|
+
return { valid: false, error: 'Path is required' };
|
|
315
|
+
}
|
|
316
|
+
// Check for path traversal attempts
|
|
317
|
+
if (value.includes('..')) {
|
|
318
|
+
return { valid: false, error: 'Path traversal not allowed' };
|
|
319
|
+
}
|
|
320
|
+
// Check for null bytes
|
|
321
|
+
if (value.includes('\0')) {
|
|
322
|
+
return { valid: false, error: 'Invalid characters in path' };
|
|
323
|
+
}
|
|
324
|
+
// Check if absolute path is required
|
|
325
|
+
if (!options.allowRelative && !value.startsWith('/')) {
|
|
326
|
+
return { valid: false, error: 'Path must be absolute' };
|
|
327
|
+
}
|
|
328
|
+
return { valid: true };
|
|
329
|
+
},
|
|
330
|
+
/**
|
|
331
|
+
* Validate that a string is non-empty
|
|
332
|
+
*/
|
|
333
|
+
nonEmpty(value, fieldName = 'Value') {
|
|
334
|
+
if (!value || typeof value !== 'string' || value.trim().length === 0) {
|
|
335
|
+
return { valid: false, error: `${fieldName} cannot be empty` };
|
|
336
|
+
}
|
|
337
|
+
return { valid: true };
|
|
338
|
+
},
|
|
339
|
+
/**
|
|
340
|
+
* Validate string length
|
|
341
|
+
*/
|
|
342
|
+
length(value, options = {}) {
|
|
343
|
+
const { min = 0, max = Infinity, fieldName = 'Value' } = options;
|
|
344
|
+
if (!value || typeof value !== 'string') {
|
|
345
|
+
return { valid: false, error: `${fieldName} is required` };
|
|
346
|
+
}
|
|
347
|
+
if (value.length < min) {
|
|
348
|
+
return { valid: false, error: `${fieldName} must be at least ${min} characters` };
|
|
349
|
+
}
|
|
350
|
+
if (value.length > max) {
|
|
351
|
+
return { valid: false, error: `${fieldName} must be at most ${max} characters` };
|
|
352
|
+
}
|
|
353
|
+
return { valid: true };
|
|
354
|
+
},
|
|
355
|
+
/**
|
|
356
|
+
* Validate number within range
|
|
357
|
+
*/
|
|
358
|
+
numberRange(value, options = {}) {
|
|
359
|
+
const { min = -Infinity, max = Infinity, fieldName = 'Value' } = options;
|
|
360
|
+
if (value === undefined || value === null || typeof value !== 'number' || isNaN(value)) {
|
|
361
|
+
return { valid: false, error: `${fieldName} must be a number` };
|
|
362
|
+
}
|
|
363
|
+
if (value < min) {
|
|
364
|
+
return { valid: false, error: `${fieldName} must be at least ${min}` };
|
|
365
|
+
}
|
|
366
|
+
if (value > max) {
|
|
367
|
+
return { valid: false, error: `${fieldName} must be at most ${max}` };
|
|
368
|
+
}
|
|
369
|
+
return { valid: true };
|
|
370
|
+
},
|
|
371
|
+
/**
|
|
372
|
+
* Validate port number
|
|
373
|
+
*/
|
|
374
|
+
port(value) {
|
|
375
|
+
return validators.numberRange(value, {
|
|
376
|
+
min: 1,
|
|
377
|
+
max: 65535,
|
|
378
|
+
fieldName: 'Port'
|
|
379
|
+
});
|
|
380
|
+
},
|
|
381
|
+
/**
|
|
382
|
+
* Validate identifier (alphanumeric with dashes/underscores)
|
|
383
|
+
*/
|
|
384
|
+
identifier(value, fieldName = 'Identifier') {
|
|
385
|
+
if (!value || typeof value !== 'string') {
|
|
386
|
+
return { valid: false, error: `${fieldName} is required` };
|
|
387
|
+
}
|
|
388
|
+
const idRegex = /^[a-zA-Z][a-zA-Z0-9_-]*$/;
|
|
389
|
+
if (!idRegex.test(value)) {
|
|
390
|
+
return {
|
|
391
|
+
valid: false,
|
|
392
|
+
error: `${fieldName} must start with a letter and contain only letters, numbers, dashes, and underscores`
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
return { valid: true };
|
|
396
|
+
},
|
|
397
|
+
/**
|
|
398
|
+
* Validate enum value
|
|
399
|
+
*/
|
|
400
|
+
enum(value, allowedValues, fieldName = 'Value') {
|
|
401
|
+
if (!allowedValues.includes(value)) {
|
|
402
|
+
return {
|
|
403
|
+
valid: false,
|
|
404
|
+
error: `${fieldName} must be one of: ${allowedValues.join(', ')}`
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
return { valid: true };
|
|
408
|
+
},
|
|
409
|
+
/**
|
|
410
|
+
* Validate ISO date string
|
|
411
|
+
*/
|
|
412
|
+
isoDate(value) {
|
|
413
|
+
if (!value || typeof value !== 'string') {
|
|
414
|
+
return { valid: false, error: 'Date is required' };
|
|
415
|
+
}
|
|
416
|
+
const date = new Date(value);
|
|
417
|
+
if (isNaN(date.getTime())) {
|
|
418
|
+
return { valid: false, error: 'Invalid date format' };
|
|
419
|
+
}
|
|
420
|
+
return { valid: true };
|
|
421
|
+
},
|
|
422
|
+
/**
|
|
423
|
+
* Validate GitHub repository format (owner/repo)
|
|
424
|
+
*/
|
|
425
|
+
githubRepo(value) {
|
|
426
|
+
if (!value || typeof value !== 'string') {
|
|
427
|
+
return { valid: false, error: 'Repository is required' };
|
|
428
|
+
}
|
|
429
|
+
const repoRegex = /^[a-zA-Z0-9._-]+\/[a-zA-Z0-9._-]+$/;
|
|
430
|
+
if (!repoRegex.test(value)) {
|
|
431
|
+
return { valid: false, error: 'Repository must be in format: owner/repo' };
|
|
432
|
+
}
|
|
433
|
+
return { valid: true };
|
|
434
|
+
},
|
|
435
|
+
/**
|
|
436
|
+
* Compose multiple validators (all must pass)
|
|
437
|
+
*/
|
|
438
|
+
all(...validations) {
|
|
439
|
+
for (const validation of validations) {
|
|
440
|
+
if (!validation.valid) {
|
|
441
|
+
return validation;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
return { valid: true };
|
|
445
|
+
}
|
|
446
|
+
};
|
|
447
|
+
/**
|
|
448
|
+
* Helper to run validation and throw on failure
|
|
449
|
+
*
|
|
450
|
+
* @example
|
|
451
|
+
* ```typescript
|
|
452
|
+
* assertValid(validators.email(userEmail), 'email');
|
|
453
|
+
* // Throws if invalid: "Validation failed for email: Invalid email format"
|
|
454
|
+
* ```
|
|
455
|
+
*/
|
|
456
|
+
export function assertValid(result, context) {
|
|
457
|
+
if (!result.valid) {
|
|
458
|
+
const message = context
|
|
459
|
+
? `Validation failed for ${context}: ${result.error}`
|
|
460
|
+
: `Validation failed: ${result.error}`;
|
|
461
|
+
throw new Error(message);
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/utils/shared.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trentapps/manager-protocol",
|
|
3
|
-
"version": "1.1
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"description": "Enterprise Agent Supervisor - Rules Engine MCP Server for AI Agent Governance",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
"license": "MIT",
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
38
|
+
"@octokit/rest": "^22.0.1",
|
|
38
39
|
"@types/better-sqlite3": "^7.6.13",
|
|
39
40
|
"better-sqlite3": "^12.5.0",
|
|
40
41
|
"uuid": "^9.0.1",
|
|
@@ -51,7 +52,7 @@
|
|
|
51
52
|
"prettier": "^3.1.1",
|
|
52
53
|
"tsx": "^4.6.2",
|
|
53
54
|
"typescript": "^5.3.2",
|
|
54
|
-
"vitest": "^
|
|
55
|
+
"vitest": "^4.0.17"
|
|
55
56
|
},
|
|
56
57
|
"engines": {
|
|
57
58
|
"node": ">=18.0.0"
|