@weave_protocol/mund 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/dist/analyzers/code-analyzer.d.ts +24 -0
  2. package/dist/analyzers/code-analyzer.d.ts.map +1 -0
  3. package/dist/analyzers/code-analyzer.js +73 -0
  4. package/dist/analyzers/code-analyzer.js.map +1 -0
  5. package/dist/analyzers/exfiltration-detector.d.ts +40 -0
  6. package/dist/analyzers/exfiltration-detector.d.ts.map +1 -0
  7. package/dist/analyzers/exfiltration-detector.js +220 -0
  8. package/dist/analyzers/exfiltration-detector.js.map +1 -0
  9. package/dist/analyzers/index.d.ts +26 -0
  10. package/dist/analyzers/index.d.ts.map +1 -0
  11. package/dist/analyzers/index.js +61 -0
  12. package/dist/analyzers/index.js.map +1 -0
  13. package/dist/analyzers/injection-detector.d.ts +36 -0
  14. package/dist/analyzers/injection-detector.d.ts.map +1 -0
  15. package/dist/analyzers/injection-detector.js +165 -0
  16. package/dist/analyzers/injection-detector.js.map +1 -0
  17. package/dist/analyzers/pii-detector.d.ts +44 -0
  18. package/dist/analyzers/pii-detector.d.ts.map +1 -0
  19. package/dist/analyzers/pii-detector.js +190 -0
  20. package/dist/analyzers/pii-detector.js.map +1 -0
  21. package/dist/analyzers/secret-scanner.d.ts +32 -0
  22. package/dist/analyzers/secret-scanner.d.ts.map +1 -0
  23. package/dist/analyzers/secret-scanner.js +119 -0
  24. package/dist/analyzers/secret-scanner.js.map +1 -0
  25. package/dist/constants.d.ts +18 -0
  26. package/dist/constants.d.ts.map +1 -0
  27. package/dist/constants.js +580 -0
  28. package/dist/constants.js.map +1 -0
  29. package/dist/index.d.ts +9 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +242 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/notifications/email.d.ts +18 -0
  34. package/dist/notifications/email.d.ts.map +1 -0
  35. package/dist/notifications/email.js +192 -0
  36. package/dist/notifications/email.js.map +1 -0
  37. package/dist/notifications/index.d.ts +51 -0
  38. package/dist/notifications/index.d.ts.map +1 -0
  39. package/dist/notifications/index.js +107 -0
  40. package/dist/notifications/index.js.map +1 -0
  41. package/dist/notifications/slack.d.ts +17 -0
  42. package/dist/notifications/slack.d.ts.map +1 -0
  43. package/dist/notifications/slack.js +128 -0
  44. package/dist/notifications/slack.js.map +1 -0
  45. package/dist/notifications/teams.d.ts +17 -0
  46. package/dist/notifications/teams.d.ts.map +1 -0
  47. package/dist/notifications/teams.js +136 -0
  48. package/dist/notifications/teams.js.map +1 -0
  49. package/dist/notifications/webhook.d.ts +15 -0
  50. package/dist/notifications/webhook.d.ts.map +1 -0
  51. package/dist/notifications/webhook.js +67 -0
  52. package/dist/notifications/webhook.js.map +1 -0
  53. package/dist/storage/index.d.ts +11 -0
  54. package/dist/storage/index.d.ts.map +1 -0
  55. package/dist/storage/index.js +26 -0
  56. package/dist/storage/index.js.map +1 -0
  57. package/dist/storage/memory.d.ts +35 -0
  58. package/dist/storage/memory.d.ts.map +1 -0
  59. package/dist/storage/memory.js +144 -0
  60. package/dist/storage/memory.js.map +1 -0
  61. package/dist/tools/configuration.d.ts +8 -0
  62. package/dist/tools/configuration.d.ts.map +1 -0
  63. package/dist/tools/configuration.js +399 -0
  64. package/dist/tools/configuration.js.map +1 -0
  65. package/dist/tools/index.d.ts +15 -0
  66. package/dist/tools/index.d.ts.map +1 -0
  67. package/dist/tools/index.js +16 -0
  68. package/dist/tools/index.js.map +1 -0
  69. package/dist/tools/monitoring.d.ts +10 -0
  70. package/dist/tools/monitoring.d.ts.map +1 -0
  71. package/dist/tools/monitoring.js +476 -0
  72. package/dist/tools/monitoring.js.map +1 -0
  73. package/dist/types.d.ts +207 -0
  74. package/dist/types.d.ts.map +1 -0
  75. package/dist/types.js +6 -0
  76. package/dist/types.js.map +1 -0
  77. package/package.json +62 -0
  78. package/rules/default.yaml +189 -0
  79. package/src/analyzers/code-analyzer.ts +88 -0
  80. package/src/analyzers/exfiltration-detector.ts +257 -0
  81. package/src/analyzers/index.ts +74 -0
  82. package/src/analyzers/injection-detector.ts +191 -0
  83. package/src/analyzers/pii-detector.ts +220 -0
  84. package/src/analyzers/secret-scanner.ts +142 -0
  85. package/src/constants.ts +603 -0
  86. package/src/index.ts +285 -0
  87. package/src/notifications/email.ts +211 -0
  88. package/src/notifications/index.ts +136 -0
  89. package/src/notifications/slack.ts +170 -0
  90. package/src/notifications/teams.ts +200 -0
  91. package/src/notifications/webhook.ts +80 -0
  92. package/src/storage/index.ts +29 -0
  93. package/src/storage/memory.ts +181 -0
  94. package/src/tools/configuration.ts +478 -0
  95. package/src/tools/index.ts +29 -0
  96. package/src/tools/monitoring.ts +559 -0
  97. package/src/types.ts +300 -0
  98. package/tsconfig.json +24 -0
@@ -0,0 +1,476 @@
1
+ /**
2
+ * Mund - The Guardian Protocol
3
+ * Monitoring Tools - MCP tools for security monitoring
4
+ */
5
+ import { z } from 'zod';
6
+ import { v4 as uuidv4 } from 'uuid';
7
+ import { createHash } from 'crypto';
8
+ import { MAX_SNIPPET_LENGTH, DEFAULT_EVENTS_LIMIT, MAX_EVENTS_PER_QUERY } from '../constants.js';
9
+ // ============================================================================
10
+ // Input Schemas
11
+ // ============================================================================
12
+ const ScanContentInputSchema = z.object({
13
+ content: z.string()
14
+ .min(1, 'Content is required')
15
+ .max(1000000, 'Content exceeds maximum length')
16
+ .describe('The text/code content to scan for security issues'),
17
+ content_type: z.enum(['text', 'code', 'json', 'yaml'])
18
+ .default('text')
19
+ .describe('Type of content being scanned'),
20
+ tool_name: z.string().optional().describe('Name of the tool that generated this content'),
21
+ agent_id: z.string().optional().describe('ID of the agent making this request'),
22
+ session_id: z.string().optional().describe('Current session ID')
23
+ }).strict();
24
+ const CheckUrlInputSchema = z.object({
25
+ url: z.string()
26
+ .url('Invalid URL format')
27
+ .describe('URL to check for safety'),
28
+ tool_name: z.string().optional().describe('Name of the tool attempting to access this URL'),
29
+ agent_id: z.string().optional().describe('ID of the agent making this request')
30
+ }).strict();
31
+ const ValidateCommandInputSchema = z.object({
32
+ command: z.string()
33
+ .min(1, 'Command is required')
34
+ .describe('Shell command to validate'),
35
+ tool_name: z.string().optional().describe('Name of the tool executing this command'),
36
+ agent_id: z.string().optional().describe('ID of the agent making this request')
37
+ }).strict();
38
+ const GetEventsInputSchema = z.object({
39
+ limit: z.number().int().min(1).max(MAX_EVENTS_PER_QUERY).default(DEFAULT_EVENTS_LIMIT)
40
+ .describe('Maximum number of events to return'),
41
+ offset: z.number().int().min(0).default(0)
42
+ .describe('Number of events to skip for pagination'),
43
+ severity: z.enum(['critical', 'high', 'medium', 'low', 'info']).optional()
44
+ .describe('Filter by severity level'),
45
+ type: z.enum(['secret', 'pii', 'code_pattern', 'injection', 'exfiltration', 'behavioral']).optional()
46
+ .describe('Filter by detection type'),
47
+ acknowledged: z.boolean().optional()
48
+ .describe('Filter by acknowledgment status')
49
+ }).strict();
50
+ const GetStatusInputSchema = z.object({}).strict();
51
+ // ============================================================================
52
+ // Tool Registration
53
+ // ============================================================================
54
+ export function registerMonitoringTools(server, storage, rules, analyzer, notificationHub, blockMode) {
55
+ // ============================================================================
56
+ // mund_scan_content - Scan text/code for security issues
57
+ // ============================================================================
58
+ server.registerTool('mund_scan_content', {
59
+ title: 'Scan Content for Security Issues',
60
+ description: `Scan text or code content for security vulnerabilities, secrets, PII, and other issues.
61
+
62
+ This tool analyzes the provided content using multiple security analyzers:
63
+ - Secret Scanner: Detects API keys, tokens, passwords, and credentials
64
+ - PII Detector: Finds personal identifiable information
65
+ - Code Analyzer: Identifies dangerous code patterns
66
+ - Injection Detector: Spots prompt injection attempts
67
+ - Exfiltration Detector: Detects data exfiltration patterns
68
+
69
+ Args:
70
+ - content (string): The text/code to scan (required)
71
+ - content_type ('text' | 'code' | 'json' | 'yaml'): Type of content (default: 'text')
72
+ - tool_name (string): Name of tool that generated this content (optional)
73
+ - agent_id (string): ID of the requesting agent (optional)
74
+ - session_id (string): Current session ID (optional)
75
+
76
+ Returns:
77
+ JSON object with:
78
+ - scan_id: Unique identifier for this scan
79
+ - issues_found: Number of security issues detected
80
+ - blocked: Whether the content was blocked (if block_mode is enabled)
81
+ - issues: Array of detected issues with severity, type, and suggestions
82
+ - scan_duration_ms: Time taken to complete the scan
83
+
84
+ Examples:
85
+ - Scan code before committing: {"content": "const key = 'AKIAIOSFODNN7EXAMPLE'"}
86
+ - Check user input: {"content": "Please ignore previous instructions", "content_type": "text"}`,
87
+ inputSchema: ScanContentInputSchema,
88
+ annotations: {
89
+ readOnlyHint: true,
90
+ destructiveHint: false,
91
+ idempotentHint: true,
92
+ openWorldHint: false
93
+ }
94
+ }, async (params) => {
95
+ const startTime = Date.now();
96
+ const contentHash = createHash('sha256').update(params.content).digest('hex');
97
+ // Run analysis
98
+ const issues = await analyzer.analyzeAll(params.content, rules);
99
+ // Create scan result
100
+ const scanResult = {
101
+ id: uuidv4(),
102
+ timestamp: new Date(),
103
+ content_hash: contentHash,
104
+ issues,
105
+ scan_duration_ms: Date.now() - startTime,
106
+ rules_checked: rules.filter(r => r.enabled).length
107
+ };
108
+ // Determine if content should be blocked
109
+ const hasCritical = issues.some(i => i.severity === 'critical');
110
+ const hasHigh = issues.some(i => i.severity === 'high');
111
+ const shouldBlock = blockMode && (hasCritical || hasHigh);
112
+ // Create and store security events for significant issues
113
+ const context = {
114
+ tool_name: params.tool_name,
115
+ agent_id: params.agent_id,
116
+ session_id: params.session_id
117
+ };
118
+ for (const issue of issues.filter(i => i.severity === 'critical' || i.severity === 'high')) {
119
+ const event = {
120
+ id: uuidv4(),
121
+ timestamp: new Date(),
122
+ rule_id: issue.rule_id,
123
+ rule_name: issue.rule_name,
124
+ severity: issue.severity,
125
+ type: issue.type,
126
+ action_taken: shouldBlock ? 'block' : issue.action,
127
+ content_snippet: truncateSnippet(issue.match, MAX_SNIPPET_LENGTH),
128
+ full_content_hash: contentHash,
129
+ context,
130
+ acknowledged: false
131
+ };
132
+ await storage.saveEvent(event);
133
+ // Send notifications for critical/high severity
134
+ await notificationHub.notify(event);
135
+ }
136
+ // Format response
137
+ const response = {
138
+ scan_id: scanResult.id,
139
+ issues_found: issues.length,
140
+ blocked: shouldBlock,
141
+ issues: issues.map(i => ({
142
+ rule_id: i.rule_id,
143
+ rule_name: i.rule_name,
144
+ severity: i.severity,
145
+ type: i.type,
146
+ match: i.match,
147
+ location: i.location,
148
+ suggestion: i.suggestion
149
+ })),
150
+ scan_duration_ms: scanResult.scan_duration_ms,
151
+ rules_checked: scanResult.rules_checked
152
+ };
153
+ return {
154
+ content: [{ type: 'text', text: JSON.stringify(response, null, 2) }],
155
+ structuredContent: response
156
+ };
157
+ });
158
+ // ============================================================================
159
+ // mund_check_url - Validate URL safety
160
+ // ============================================================================
161
+ server.registerTool('mund_check_url', {
162
+ title: 'Check URL Safety',
163
+ description: `Check if a URL is safe to access.
164
+
165
+ Validates URLs against known dangerous patterns including:
166
+ - Data exfiltration services (webhook.site, requestbin, etc.)
167
+ - IP-based URLs (often used to bypass domain filtering)
168
+ - Suspicious TLDs (.tk, .ml, etc.)
169
+ - Data URLs (can contain arbitrary content)
170
+
171
+ Args:
172
+ - url (string): The URL to check (required)
173
+ - tool_name (string): Name of tool attempting access (optional)
174
+ - agent_id (string): ID of requesting agent (optional)
175
+
176
+ Returns:
177
+ JSON object with:
178
+ - url: The checked URL
179
+ - safe: Boolean indicating if URL is safe
180
+ - risk_level: 'safe' | 'suspicious' | 'dangerous'
181
+ - warnings: Array of warning messages if any
182
+ - blocked: Whether access was blocked`,
183
+ inputSchema: CheckUrlInputSchema,
184
+ annotations: {
185
+ readOnlyHint: true,
186
+ destructiveHint: false,
187
+ idempotentHint: true,
188
+ openWorldHint: false
189
+ }
190
+ }, async (params) => {
191
+ const warnings = [];
192
+ let riskLevel = 'safe';
193
+ // Check against dangerous URL patterns
194
+ const { DANGEROUS_URL_PATTERNS } = await import('../constants.js');
195
+ for (const pattern of DANGEROUS_URL_PATTERNS) {
196
+ if (pattern.test(params.url)) {
197
+ riskLevel = 'dangerous';
198
+ warnings.push('URL matches known dangerous pattern');
199
+ break;
200
+ }
201
+ }
202
+ // Check for IP-based URLs
203
+ if (/^https?:\/\/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/.test(params.url)) {
204
+ if (riskLevel === 'safe')
205
+ riskLevel = 'suspicious';
206
+ warnings.push('IP-based URL detected');
207
+ }
208
+ // Check for data URLs
209
+ if (params.url.startsWith('data:')) {
210
+ riskLevel = 'dangerous';
211
+ warnings.push('Data URL can contain arbitrary content');
212
+ }
213
+ // Check for suspicious ports
214
+ try {
215
+ const urlObj = new URL(params.url);
216
+ const port = urlObj.port;
217
+ if (port && !['80', '443', '8080', '8443'].includes(port)) {
218
+ if (riskLevel === 'safe')
219
+ riskLevel = 'suspicious';
220
+ warnings.push(`Unusual port: ${port}`);
221
+ }
222
+ }
223
+ catch {
224
+ riskLevel = 'dangerous';
225
+ warnings.push('Invalid URL format');
226
+ }
227
+ const isSafe = riskLevel === 'safe';
228
+ const shouldBlock = blockMode && riskLevel === 'dangerous';
229
+ // Log event if dangerous
230
+ if (riskLevel === 'dangerous') {
231
+ const event = {
232
+ id: uuidv4(),
233
+ timestamp: new Date(),
234
+ rule_id: 'url_check',
235
+ rule_name: 'Dangerous URL Detected',
236
+ severity: 'high',
237
+ type: 'exfiltration',
238
+ action_taken: shouldBlock ? 'block' : 'alert',
239
+ content_snippet: truncateSnippet(params.url, MAX_SNIPPET_LENGTH),
240
+ full_content_hash: createHash('sha256').update(params.url).digest('hex'),
241
+ context: { tool_name: params.tool_name, agent_id: params.agent_id },
242
+ acknowledged: false
243
+ };
244
+ await storage.saveEvent(event);
245
+ await notificationHub.notify(event);
246
+ }
247
+ const response = {
248
+ url: params.url,
249
+ safe: isSafe,
250
+ risk_level: riskLevel,
251
+ warnings,
252
+ blocked: shouldBlock
253
+ };
254
+ return {
255
+ content: [{ type: 'text', text: JSON.stringify(response, null, 2) }],
256
+ structuredContent: response
257
+ };
258
+ });
259
+ // ============================================================================
260
+ // mund_validate_command - Check shell command safety
261
+ // ============================================================================
262
+ server.registerTool('mund_validate_command', {
263
+ title: 'Validate Shell Command',
264
+ description: `Validate a shell command for safety before execution.
265
+
266
+ Checks for dangerous patterns including:
267
+ - Destructive commands (rm -rf, format, etc.)
268
+ - Privilege escalation (sudo, chmod 777, etc.)
269
+ - Network exfiltration (curl to suspicious URLs, etc.)
270
+ - Code injection (eval, exec with variables, etc.)
271
+
272
+ Args:
273
+ - command (string): Shell command to validate (required)
274
+ - tool_name (string): Name of tool executing command (optional)
275
+ - agent_id (string): ID of requesting agent (optional)
276
+
277
+ Returns:
278
+ JSON object with:
279
+ - command: The validated command
280
+ - safe: Boolean indicating if command is safe
281
+ - risk_level: 'safe' | 'suspicious' | 'dangerous'
282
+ - warnings: Array of warning messages
283
+ - blocked: Whether execution was blocked`,
284
+ inputSchema: ValidateCommandInputSchema,
285
+ annotations: {
286
+ readOnlyHint: true,
287
+ destructiveHint: false,
288
+ idempotentHint: true,
289
+ openWorldHint: false
290
+ }
291
+ }, async (params) => {
292
+ const warnings = [];
293
+ let riskLevel = 'safe';
294
+ // Dangerous command patterns
295
+ const dangerousPatterns = [
296
+ { pattern: /rm\s+-[rf]{1,2}\s+[\/~]/, message: 'Recursive deletion of root/home directory' },
297
+ { pattern: /mkfs\./, message: 'Filesystem format command' },
298
+ { pattern: /dd\s+if=.*of=\/dev\//, message: 'Direct disk write' },
299
+ { pattern: />\s*\/dev\/sd[a-z]/, message: 'Direct device write' },
300
+ { pattern: /chmod\s+777/, message: 'Overly permissive chmod' },
301
+ { pattern: /curl.*\|\s*(ba)?sh/, message: 'Piping curl to shell' },
302
+ { pattern: /wget.*\|\s*(ba)?sh/, message: 'Piping wget to shell' },
303
+ { pattern: /eval\s+"?\$/, message: 'Eval with variable' },
304
+ { pattern: /:(){ :|:& };:/, message: 'Fork bomb detected' },
305
+ ];
306
+ for (const { pattern, message } of dangerousPatterns) {
307
+ if (pattern.test(params.command)) {
308
+ riskLevel = 'dangerous';
309
+ warnings.push(message);
310
+ }
311
+ }
312
+ // Suspicious patterns
313
+ const suspiciousPatterns = [
314
+ { pattern: /sudo\s/, message: 'Sudo usage' },
315
+ { pattern: />\s*\/etc\//, message: 'Writing to /etc' },
316
+ { pattern: /curl|wget/, message: 'Network download command' },
317
+ { pattern: /nc\s+-/, message: 'Netcat usage' },
318
+ { pattern: /base64\s+-d/, message: 'Base64 decoding' },
319
+ ];
320
+ for (const { pattern, message } of suspiciousPatterns) {
321
+ if (pattern.test(params.command) && riskLevel === 'safe') {
322
+ riskLevel = 'suspicious';
323
+ warnings.push(message);
324
+ }
325
+ }
326
+ const isSafe = riskLevel === 'safe';
327
+ const shouldBlock = blockMode && riskLevel === 'dangerous';
328
+ // Log event if dangerous
329
+ if (riskLevel === 'dangerous') {
330
+ const event = {
331
+ id: uuidv4(),
332
+ timestamp: new Date(),
333
+ rule_id: 'command_check',
334
+ rule_name: 'Dangerous Command Detected',
335
+ severity: 'high',
336
+ type: 'code_pattern',
337
+ action_taken: shouldBlock ? 'block' : 'alert',
338
+ content_snippet: truncateSnippet(params.command, MAX_SNIPPET_LENGTH),
339
+ full_content_hash: createHash('sha256').update(params.command).digest('hex'),
340
+ context: { tool_name: params.tool_name, agent_id: params.agent_id },
341
+ acknowledged: false
342
+ };
343
+ await storage.saveEvent(event);
344
+ await notificationHub.notify(event);
345
+ }
346
+ const response = {
347
+ command: params.command,
348
+ safe: isSafe,
349
+ risk_level: riskLevel,
350
+ warnings,
351
+ blocked: shouldBlock
352
+ };
353
+ return {
354
+ content: [{ type: 'text', text: JSON.stringify(response, null, 2) }],
355
+ structuredContent: response
356
+ };
357
+ });
358
+ // ============================================================================
359
+ // mund_get_events - Retrieve recent security events
360
+ // ============================================================================
361
+ server.registerTool('mund_get_events', {
362
+ title: 'Get Security Events',
363
+ description: `Retrieve recent security events from the Mund monitoring system.
364
+
365
+ Supports filtering and pagination for efficient event retrieval.
366
+
367
+ Args:
368
+ - limit (number): Maximum events to return, 1-1000 (default: 50)
369
+ - offset (number): Skip this many events for pagination (default: 0)
370
+ - severity ('critical' | 'high' | 'medium' | 'low' | 'info'): Filter by severity
371
+ - type: Filter by detection type
372
+ - acknowledged (boolean): Filter by acknowledgment status
373
+
374
+ Returns:
375
+ JSON object with:
376
+ - total: Total matching events
377
+ - count: Events in this response
378
+ - offset: Current offset
379
+ - has_more: Whether more events exist
380
+ - events: Array of security events`,
381
+ inputSchema: GetEventsInputSchema,
382
+ annotations: {
383
+ readOnlyHint: true,
384
+ destructiveHint: false,
385
+ idempotentHint: true,
386
+ openWorldHint: false
387
+ }
388
+ }, async (params) => {
389
+ const query = {
390
+ limit: params.limit,
391
+ offset: params.offset,
392
+ severity: params.severity,
393
+ type: params.type,
394
+ acknowledged: params.acknowledged
395
+ };
396
+ const [events, total] = await Promise.all([
397
+ storage.getEvents(query),
398
+ storage.countEvents(query)
399
+ ]);
400
+ const response = {
401
+ total,
402
+ count: events.length,
403
+ offset: params.offset,
404
+ has_more: total > params.offset + events.length,
405
+ events: events.map(e => ({
406
+ id: e.id,
407
+ timestamp: e.timestamp.toISOString(),
408
+ rule_id: e.rule_id,
409
+ rule_name: e.rule_name,
410
+ severity: e.severity,
411
+ type: e.type,
412
+ action_taken: e.action_taken,
413
+ content_snippet: e.content_snippet,
414
+ context: e.context,
415
+ acknowledged: e.acknowledged,
416
+ acknowledged_by: e.acknowledged_by,
417
+ acknowledged_at: e.acknowledged_at?.toISOString()
418
+ }))
419
+ };
420
+ return {
421
+ content: [{ type: 'text', text: JSON.stringify(response, null, 2) }],
422
+ structuredContent: response
423
+ };
424
+ });
425
+ // ============================================================================
426
+ // mund_get_status - Get current monitoring status
427
+ // ============================================================================
428
+ server.registerTool('mund_get_status', {
429
+ title: 'Get Monitoring Status',
430
+ description: `Get the current status of the Mund monitoring system.
431
+
432
+ Returns information about:
433
+ - Active analyzers and their status
434
+ - Number of rules loaded
435
+ - Configured notification channels
436
+ - Block mode status
437
+ - Recent event statistics`,
438
+ inputSchema: GetStatusInputSchema,
439
+ annotations: {
440
+ readOnlyHint: true,
441
+ destructiveHint: false,
442
+ idempotentHint: true,
443
+ openWorldHint: false
444
+ }
445
+ }, async () => {
446
+ const eventCounts = {
447
+ total: await storage.countEvents({}),
448
+ unacknowledged: await storage.countEvents({ acknowledged: false }),
449
+ critical: await storage.countEvents({ severity: 'critical' }),
450
+ high: await storage.countEvents({ severity: 'high' })
451
+ };
452
+ const response = {
453
+ status: 'active',
454
+ version: '0.1.0',
455
+ block_mode: blockMode,
456
+ analyzers: analyzer.getAnalyzerNames(),
457
+ rules_loaded: rules.filter(r => r.enabled).length,
458
+ notifiers: notificationHub.getNotifierNames(),
459
+ event_counts: eventCounts,
460
+ timestamp: new Date().toISOString()
461
+ };
462
+ return {
463
+ content: [{ type: 'text', text: JSON.stringify(response, null, 2) }],
464
+ structuredContent: response
465
+ };
466
+ });
467
+ }
468
+ // ============================================================================
469
+ // Helper Functions
470
+ // ============================================================================
471
+ function truncateSnippet(text, maxLength) {
472
+ if (text.length <= maxLength)
473
+ return text;
474
+ return text.substring(0, maxLength - 3) + '...';
475
+ }
476
+ //# sourceMappingURL=monitoring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitoring.js","sourceRoot":"","sources":["../../src/tools/monitoring.ts"],"names":[],"mappings":"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"}