@agent-relay/resiliency 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 (49) hide show
  1. package/dist/context-persistence.d.ts +140 -0
  2. package/dist/context-persistence.d.ts.map +1 -0
  3. package/dist/context-persistence.js +397 -0
  4. package/dist/context-persistence.js.map +1 -0
  5. package/dist/crash-insights.d.ts +156 -0
  6. package/dist/crash-insights.d.ts.map +1 -0
  7. package/dist/crash-insights.js +492 -0
  8. package/dist/crash-insights.js.map +1 -0
  9. package/dist/gossip-health.d.ts +137 -0
  10. package/dist/gossip-health.d.ts.map +1 -0
  11. package/dist/gossip-health.js +241 -0
  12. package/dist/gossip-health.js.map +1 -0
  13. package/dist/health-monitor.d.ts +97 -0
  14. package/dist/health-monitor.d.ts.map +1 -0
  15. package/dist/health-monitor.js +291 -0
  16. package/dist/health-monitor.js.map +1 -0
  17. package/dist/index.d.ts +68 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +68 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/leader-watchdog.d.ts +109 -0
  22. package/dist/leader-watchdog.d.ts.map +1 -0
  23. package/dist/leader-watchdog.js +189 -0
  24. package/dist/leader-watchdog.js.map +1 -0
  25. package/dist/logger.d.ts +114 -0
  26. package/dist/logger.d.ts.map +1 -0
  27. package/dist/logger.js +250 -0
  28. package/dist/logger.js.map +1 -0
  29. package/dist/memory-monitor.d.ts +172 -0
  30. package/dist/memory-monitor.d.ts.map +1 -0
  31. package/dist/memory-monitor.js +599 -0
  32. package/dist/memory-monitor.js.map +1 -0
  33. package/dist/metrics.d.ts +115 -0
  34. package/dist/metrics.d.ts.map +1 -0
  35. package/dist/metrics.js +239 -0
  36. package/dist/metrics.js.map +1 -0
  37. package/dist/provider-context.d.ts +100 -0
  38. package/dist/provider-context.d.ts.map +1 -0
  39. package/dist/provider-context.js +362 -0
  40. package/dist/provider-context.js.map +1 -0
  41. package/dist/stateless-lead.d.ts +149 -0
  42. package/dist/stateless-lead.d.ts.map +1 -0
  43. package/dist/stateless-lead.js +308 -0
  44. package/dist/stateless-lead.js.map +1 -0
  45. package/dist/supervisor.d.ts +147 -0
  46. package/dist/supervisor.d.ts.map +1 -0
  47. package/dist/supervisor.js +459 -0
  48. package/dist/supervisor.js.map +1 -0
  49. package/package.json +28 -0
@@ -0,0 +1,599 @@
1
+ /**
2
+ * Agent Memory Monitor
3
+ *
4
+ * Comprehensive memory monitoring for agent processes:
5
+ * - Detailed memory metrics (RSS, heap, external)
6
+ * - Memory trend analysis (growing/stable/shrinking)
7
+ * - High watermark tracking
8
+ * - Configurable thresholds for proactive alerting
9
+ * - Memory history for trend analysis
10
+ * - Crash prevention through memory pressure detection
11
+ */
12
+ import { EventEmitter } from 'events';
13
+ import { execSync } from 'child_process';
14
+ import * as os from 'os';
15
+ const DEFAULT_THRESHOLDS = {
16
+ warningBytes: 512 * 1024 * 1024, // 512MB
17
+ criticalBytes: 1024 * 1024 * 1024, // 1GB
18
+ oomImminentBytes: 1.5 * 1024 * 1024 * 1024, // 1.5GB
19
+ trendGrowthRateWarning: 100 * 1024 * 1024, // 100MB per minute (was 10MB - too sensitive)
20
+ historyRetentionMinutes: 60, // Keep 1 hour of history
21
+ historyMaxSamples: 360, // Max 360 samples (every 10s for 1 hour)
22
+ };
23
+ const DEFAULT_CONFIG = {
24
+ checkIntervalMs: 10000, // Every 10 seconds
25
+ thresholds: DEFAULT_THRESHOLDS,
26
+ enableTrendAnalysis: true,
27
+ enableProactiveAlerts: true,
28
+ };
29
+ export class AgentMemoryMonitor extends EventEmitter {
30
+ agents = new Map();
31
+ pids = new Map(); // name -> pid
32
+ intervalId;
33
+ config;
34
+ isRunning = false;
35
+ alertCooldowns = new Map(); // Prevent alert spam
36
+ constructor(config = {}) {
37
+ super();
38
+ this.config = {
39
+ ...DEFAULT_CONFIG,
40
+ ...config,
41
+ thresholds: {
42
+ ...DEFAULT_THRESHOLDS,
43
+ ...config.thresholds,
44
+ },
45
+ };
46
+ }
47
+ /**
48
+ * Register an agent for memory monitoring
49
+ */
50
+ register(name, pid) {
51
+ const now = new Date();
52
+ const initialSnapshot = {
53
+ timestamp: now,
54
+ rssBytes: 0,
55
+ heapUsedBytes: 0,
56
+ heapTotalBytes: 0,
57
+ externalBytes: 0,
58
+ cpuPercent: 0,
59
+ };
60
+ this.agents.set(name, {
61
+ name,
62
+ pid,
63
+ current: initialSnapshot,
64
+ highWatermark: 0,
65
+ lowWatermark: Infinity,
66
+ averageRss: 0,
67
+ trend: 'unknown',
68
+ trendRatePerMinute: 0,
69
+ alertLevel: 'normal',
70
+ memoryHistory: [],
71
+ startedAt: now,
72
+ uptimeMs: 0,
73
+ });
74
+ this.pids.set(name, pid);
75
+ this.emit('registered', { name, pid });
76
+ this.log('info', `Registered agent for memory monitoring: ${name} (PID: ${pid})`);
77
+ // Immediate first sample
78
+ if (this.isRunning) {
79
+ this.sampleAgent(name).catch(() => { });
80
+ }
81
+ }
82
+ /**
83
+ * Update PID for an agent (after restart)
84
+ */
85
+ updatePid(name, newPid) {
86
+ const metrics = this.agents.get(name);
87
+ if (metrics) {
88
+ metrics.pid = newPid;
89
+ // Reset metrics but keep history for trend continuity
90
+ metrics.highWatermark = 0;
91
+ metrics.lowWatermark = Infinity;
92
+ metrics.alertLevel = 'normal';
93
+ metrics.startedAt = new Date();
94
+ }
95
+ this.pids.set(name, newPid);
96
+ this.log('info', `Updated PID for ${name}: ${newPid}`);
97
+ }
98
+ /**
99
+ * Unregister an agent
100
+ */
101
+ unregister(name) {
102
+ const metrics = this.agents.get(name);
103
+ this.agents.delete(name);
104
+ this.pids.delete(name);
105
+ this.alertCooldowns.delete(name);
106
+ if (metrics) {
107
+ this.emit('unregistered', { name, finalMetrics: metrics });
108
+ }
109
+ this.log('info', `Unregistered agent: ${name}`);
110
+ }
111
+ /**
112
+ * Start memory monitoring
113
+ */
114
+ start() {
115
+ if (this.isRunning)
116
+ return;
117
+ this.isRunning = true;
118
+ this.log('info', 'Memory monitor started', {
119
+ checkInterval: this.config.checkIntervalMs,
120
+ thresholds: this.config.thresholds,
121
+ });
122
+ this.intervalId = setInterval(() => {
123
+ this.sampleAll().catch((err) => {
124
+ this.log('error', 'Failed to sample agents', { error: String(err) });
125
+ });
126
+ }, this.config.checkIntervalMs);
127
+ // Initial sample
128
+ this.sampleAll().catch(() => { });
129
+ }
130
+ /**
131
+ * Stop memory monitoring
132
+ */
133
+ stop() {
134
+ if (this.intervalId) {
135
+ clearInterval(this.intervalId);
136
+ this.intervalId = undefined;
137
+ }
138
+ this.isRunning = false;
139
+ this.log('info', 'Memory monitor stopped');
140
+ }
141
+ /**
142
+ * Get memory metrics for all agents
143
+ */
144
+ getAll() {
145
+ return Array.from(this.agents.values()).map((m) => ({
146
+ ...m,
147
+ uptimeMs: Date.now() - m.startedAt.getTime(),
148
+ }));
149
+ }
150
+ /**
151
+ * Get memory metrics for a specific agent
152
+ */
153
+ get(name) {
154
+ const metrics = this.agents.get(name);
155
+ if (metrics) {
156
+ return {
157
+ ...metrics,
158
+ uptimeMs: Date.now() - metrics.startedAt.getTime(),
159
+ };
160
+ }
161
+ return undefined;
162
+ }
163
+ /**
164
+ * Get crash context for an agent (for crash analysis)
165
+ */
166
+ getCrashContext(name) {
167
+ const metrics = this.agents.get(name);
168
+ const now = new Date();
169
+ if (!metrics) {
170
+ return {
171
+ agentName: name,
172
+ pid: this.pids.get(name) || 0,
173
+ crashTime: now,
174
+ lastKnownMemory: null,
175
+ peakMemory: 0,
176
+ averageMemory: 0,
177
+ memoryTrend: 'unknown',
178
+ recentHistory: [],
179
+ likelyCause: 'unknown',
180
+ analysisNotes: ['No memory data available - agent was not being monitored'],
181
+ };
182
+ }
183
+ const recentHistory = metrics.memoryHistory.slice(-30); // Last 30 samples
184
+ const analysisNotes = [];
185
+ let likelyCause = 'unknown';
186
+ // Analyze crash cause
187
+ const lastMemory = metrics.current.rssBytes;
188
+ const { thresholds } = this.config;
189
+ if (lastMemory >= thresholds.oomImminentBytes) {
190
+ likelyCause = 'oom';
191
+ analysisNotes.push(`Memory was at OOM-imminent level: ${formatBytes(lastMemory)}`);
192
+ }
193
+ else if (metrics.trend === 'growing' && metrics.trendRatePerMinute > thresholds.trendGrowthRateWarning) {
194
+ likelyCause = 'memory_leak';
195
+ analysisNotes.push(`Memory was growing at ${formatBytes(metrics.trendRatePerMinute)}/min`);
196
+ }
197
+ else if (recentHistory.length >= 2) {
198
+ const prevMemory = recentHistory[recentHistory.length - 2]?.rssBytes || 0;
199
+ const spike = lastMemory - prevMemory;
200
+ if (spike > 100 * 1024 * 1024) {
201
+ // 100MB spike
202
+ likelyCause = 'sudden_spike';
203
+ analysisNotes.push(`Sudden memory spike of ${formatBytes(spike)} detected`);
204
+ }
205
+ }
206
+ // Add general analysis notes
207
+ analysisNotes.push(`Peak memory: ${formatBytes(metrics.highWatermark)}`);
208
+ analysisNotes.push(`Average memory: ${formatBytes(metrics.averageRss)}`);
209
+ analysisNotes.push(`Memory trend: ${metrics.trend} (${formatBytes(metrics.trendRatePerMinute)}/min)`);
210
+ analysisNotes.push(`Alert level at crash: ${metrics.alertLevel}`);
211
+ return {
212
+ agentName: name,
213
+ pid: metrics.pid,
214
+ crashTime: now,
215
+ lastKnownMemory: metrics.current,
216
+ peakMemory: metrics.highWatermark,
217
+ averageMemory: metrics.averageRss,
218
+ memoryTrend: metrics.trend,
219
+ recentHistory,
220
+ likelyCause,
221
+ analysisNotes,
222
+ };
223
+ }
224
+ /**
225
+ * Get system-wide memory summary
226
+ */
227
+ getSystemSummary() {
228
+ const allMetrics = this.getAll();
229
+ const byAlertLevel = {
230
+ normal: 0,
231
+ warning: 0,
232
+ critical: 0,
233
+ oom_imminent: 0,
234
+ };
235
+ for (const m of allMetrics) {
236
+ byAlertLevel[m.alertLevel] = (byAlertLevel[m.alertLevel] || 0) + 1;
237
+ }
238
+ const totalMemory = allMetrics.reduce((sum, m) => sum + m.current.rssBytes, 0);
239
+ const topConsumers = allMetrics
240
+ .sort((a, b) => b.current.rssBytes - a.current.rssBytes)
241
+ .slice(0, 5)
242
+ .map((m) => ({ name: m.name, rssBytes: m.current.rssBytes }));
243
+ return {
244
+ totalAgents: allMetrics.length,
245
+ totalMemoryBytes: totalMemory,
246
+ agentsByAlertLevel: byAlertLevel,
247
+ topMemoryConsumers: topConsumers,
248
+ systemMemory: this.getSystemMemory(),
249
+ };
250
+ }
251
+ /**
252
+ * Sample memory for all registered agents
253
+ */
254
+ async sampleAll() {
255
+ const promises = Array.from(this.agents.keys()).map((name) => this.sampleAgent(name).catch((err) => {
256
+ this.log('warn', `Failed to sample ${name}`, { error: String(err) });
257
+ }));
258
+ await Promise.all(promises);
259
+ }
260
+ /**
261
+ * Sample memory for a single agent
262
+ */
263
+ async sampleAgent(name) {
264
+ const metrics = this.agents.get(name);
265
+ if (!metrics)
266
+ return;
267
+ const pid = metrics.pid;
268
+ // Check if process is still alive
269
+ if (!this.isProcessAlive(pid)) {
270
+ this.log('warn', `Process ${pid} for ${name} is not alive`);
271
+ return;
272
+ }
273
+ try {
274
+ const snapshot = await this.getProcessMemory(pid);
275
+ this.updateMetrics(name, snapshot);
276
+ }
277
+ catch (error) {
278
+ this.log('warn', `Failed to get memory for ${name}`, { error: String(error) });
279
+ }
280
+ }
281
+ /**
282
+ * Update metrics with new snapshot
283
+ */
284
+ updateMetrics(name, snapshot) {
285
+ const metrics = this.agents.get(name);
286
+ if (!metrics)
287
+ return;
288
+ const { thresholds } = this.config;
289
+ const _previousRss = metrics.current.rssBytes;
290
+ const previousAlertLevel = metrics.alertLevel;
291
+ // Update current snapshot
292
+ metrics.current = snapshot;
293
+ metrics.uptimeMs = Date.now() - metrics.startedAt.getTime();
294
+ // Update watermarks
295
+ if (snapshot.rssBytes > metrics.highWatermark) {
296
+ metrics.highWatermark = snapshot.rssBytes;
297
+ }
298
+ if (snapshot.rssBytes < metrics.lowWatermark && snapshot.rssBytes > 0) {
299
+ metrics.lowWatermark = snapshot.rssBytes;
300
+ }
301
+ // Add to history
302
+ metrics.memoryHistory.push(snapshot);
303
+ // Trim history
304
+ const maxAge = Date.now() - thresholds.historyRetentionMinutes * 60 * 1000;
305
+ metrics.memoryHistory = metrics.memoryHistory
306
+ .filter((s) => s.timestamp.getTime() > maxAge)
307
+ .slice(-thresholds.historyMaxSamples);
308
+ // Calculate rolling average
309
+ if (metrics.memoryHistory.length > 0) {
310
+ const sum = metrics.memoryHistory.reduce((acc, s) => acc + s.rssBytes, 0);
311
+ metrics.averageRss = sum / metrics.memoryHistory.length;
312
+ }
313
+ // Analyze trend
314
+ if (this.config.enableTrendAnalysis && metrics.memoryHistory.length >= 6) {
315
+ this.analyzeTrend(metrics);
316
+ }
317
+ // Update alert level
318
+ if (snapshot.rssBytes >= thresholds.oomImminentBytes) {
319
+ metrics.alertLevel = 'oom_imminent';
320
+ }
321
+ else if (snapshot.rssBytes >= thresholds.criticalBytes) {
322
+ metrics.alertLevel = 'critical';
323
+ }
324
+ else if (snapshot.rssBytes >= thresholds.warningBytes) {
325
+ metrics.alertLevel = 'warning';
326
+ }
327
+ else {
328
+ metrics.alertLevel = 'normal';
329
+ }
330
+ // Emit events
331
+ this.emit('sample', { name, snapshot, metrics });
332
+ // Check for alerts
333
+ if (this.config.enableProactiveAlerts) {
334
+ this.checkAlerts(name, metrics, previousAlertLevel);
335
+ }
336
+ }
337
+ /**
338
+ * Analyze memory trend
339
+ */
340
+ analyzeTrend(metrics) {
341
+ const history = metrics.memoryHistory;
342
+ if (history.length < 6) {
343
+ metrics.trend = 'unknown';
344
+ return;
345
+ }
346
+ // Use last 6 samples for trend (1 minute at 10s intervals)
347
+ const recent = history.slice(-6);
348
+ const oldest = recent[0];
349
+ const newest = recent[recent.length - 1];
350
+ const timeDeltaMs = newest.timestamp.getTime() - oldest.timestamp.getTime();
351
+ const memoryDelta = newest.rssBytes - oldest.rssBytes;
352
+ // Calculate rate per minute
353
+ const ratePerMinute = timeDeltaMs > 0 ? (memoryDelta / timeDeltaMs) * 60000 : 0;
354
+ metrics.trendRatePerMinute = ratePerMinute;
355
+ // Determine trend (threshold: 10MB/min change - was 1MB which was too sensitive)
356
+ const threshold = 10 * 1024 * 1024; // 10MB
357
+ if (ratePerMinute > threshold) {
358
+ metrics.trend = 'growing';
359
+ }
360
+ else if (ratePerMinute < -threshold) {
361
+ metrics.trend = 'shrinking';
362
+ }
363
+ else {
364
+ metrics.trend = 'stable';
365
+ }
366
+ }
367
+ /**
368
+ * Check and emit alerts
369
+ */
370
+ checkAlerts(name, metrics, previousLevel) {
371
+ const { thresholds } = this.config;
372
+ const now = new Date();
373
+ // Check cooldown (don't spam alerts)
374
+ const lastAlert = this.alertCooldowns.get(name);
375
+ const cooldownMs = 60000; // 1 minute cooldown
376
+ if (lastAlert && now.getTime() - lastAlert.getTime() < cooldownMs) {
377
+ return;
378
+ }
379
+ let alert = null;
380
+ // Check for level transitions
381
+ if (metrics.alertLevel !== previousLevel) {
382
+ if (metrics.alertLevel === 'oom_imminent') {
383
+ alert = {
384
+ type: 'oom_imminent',
385
+ agentName: name,
386
+ pid: metrics.pid,
387
+ currentRss: metrics.current.rssBytes,
388
+ threshold: thresholds.oomImminentBytes,
389
+ message: `Agent ${name} is about to run out of memory!`,
390
+ recommendation: 'Consider restarting the agent or killing heavy operations',
391
+ timestamp: now,
392
+ };
393
+ }
394
+ else if (metrics.alertLevel === 'critical') {
395
+ alert = {
396
+ type: 'critical',
397
+ agentName: name,
398
+ pid: metrics.pid,
399
+ currentRss: metrics.current.rssBytes,
400
+ threshold: thresholds.criticalBytes,
401
+ message: `Agent ${name} memory usage is critical`,
402
+ recommendation: 'Monitor closely, may need intervention soon',
403
+ timestamp: now,
404
+ };
405
+ }
406
+ else if (metrics.alertLevel === 'warning') {
407
+ alert = {
408
+ type: 'warning',
409
+ agentName: name,
410
+ pid: metrics.pid,
411
+ currentRss: metrics.current.rssBytes,
412
+ threshold: thresholds.warningBytes,
413
+ message: `Agent ${name} memory usage is elevated`,
414
+ recommendation: 'Keep monitoring, consider investigation if trend continues',
415
+ timestamp: now,
416
+ };
417
+ }
418
+ else if (previousLevel !== 'normal' && metrics.alertLevel === 'normal') {
419
+ alert = {
420
+ type: 'recovered',
421
+ agentName: name,
422
+ pid: metrics.pid,
423
+ currentRss: metrics.current.rssBytes,
424
+ threshold: thresholds.warningBytes,
425
+ message: `Agent ${name} memory usage returned to normal`,
426
+ recommendation: 'No action needed',
427
+ timestamp: now,
428
+ };
429
+ }
430
+ }
431
+ // Check for rapid growth trend (only if memory is already significant - 100MB+)
432
+ // Don't alert on rapid growth if total memory is still low
433
+ const minMemoryForTrendAlert = 100 * 1024 * 1024; // 100MB
434
+ if (metrics.trend === 'growing' &&
435
+ metrics.trendRatePerMinute > thresholds.trendGrowthRateWarning &&
436
+ metrics.current.rssBytes >= minMemoryForTrendAlert &&
437
+ !alert) {
438
+ alert = {
439
+ type: 'trend_warning',
440
+ agentName: name,
441
+ pid: metrics.pid,
442
+ currentRss: metrics.current.rssBytes,
443
+ threshold: thresholds.trendGrowthRateWarning,
444
+ message: `Agent ${name} memory is growing rapidly: ${formatBytes(metrics.trendRatePerMinute)}/min`,
445
+ recommendation: 'Investigate for potential memory leak',
446
+ timestamp: now,
447
+ };
448
+ }
449
+ if (alert) {
450
+ metrics.lastAlertAt = now;
451
+ this.alertCooldowns.set(name, now);
452
+ this.emit('alert', alert);
453
+ this.log(alert.type === 'recovered' ? 'info' : 'warn', alert.message, {
454
+ agent: name,
455
+ type: alert.type,
456
+ rss: formatBytes(alert.currentRss),
457
+ });
458
+ }
459
+ }
460
+ /**
461
+ * Get memory for a process using ps
462
+ */
463
+ async getProcessMemory(pid) {
464
+ try {
465
+ // ps command for detailed memory: rss, vsz, and CPU
466
+ const output = execSync(`ps -o rss=,vsz=,pcpu= -p ${pid}`, {
467
+ encoding: 'utf8',
468
+ timeout: 5000,
469
+ }).trim();
470
+ const parts = output.split(/\s+/);
471
+ const rssKb = parseInt(parts[0] || '0', 10);
472
+ const _vszKb = parseInt(parts[1] || '0', 10);
473
+ const cpu = parseFloat(parts[2] || '0');
474
+ // Try to get more detailed memory from /proc on Linux
475
+ let heapUsed = 0;
476
+ const heapTotal = 0;
477
+ const external = 0;
478
+ try {
479
+ const smaps = execSync(`cat /proc/${pid}/smaps_rollup 2>/dev/null || echo ""`, {
480
+ encoding: 'utf8',
481
+ timeout: 2000,
482
+ });
483
+ const rssMatch = smaps.match(/Rss:\s+(\d+)\s+kB/);
484
+ if (rssMatch) {
485
+ // Use smaps for more accurate RSS
486
+ }
487
+ // For heap estimation on Linux
488
+ const heapMatch = smaps.match(/Private_Dirty:\s+(\d+)\s+kB/);
489
+ if (heapMatch) {
490
+ heapUsed = parseInt(heapMatch[1], 10) * 1024;
491
+ }
492
+ }
493
+ catch {
494
+ // Not on Linux or no access to /proc
495
+ }
496
+ return {
497
+ timestamp: new Date(),
498
+ rssBytes: rssKb * 1024,
499
+ heapUsedBytes: heapUsed || rssKb * 1024 * 0.6, // Estimate heap as 60% of RSS
500
+ heapTotalBytes: heapTotal || rssKb * 1024 * 0.8,
501
+ externalBytes: external,
502
+ cpuPercent: cpu,
503
+ };
504
+ }
505
+ catch {
506
+ return {
507
+ timestamp: new Date(),
508
+ rssBytes: 0,
509
+ heapUsedBytes: 0,
510
+ heapTotalBytes: 0,
511
+ externalBytes: 0,
512
+ cpuPercent: 0,
513
+ };
514
+ }
515
+ }
516
+ /**
517
+ * Get system memory info
518
+ */
519
+ getSystemMemory() {
520
+ try {
521
+ const meminfo = execSync('cat /proc/meminfo', { encoding: 'utf8' });
522
+ const total = parseInt(meminfo.match(/MemTotal:\s+(\d+)/)?.[1] || '0', 10) * 1024;
523
+ const free = parseInt(meminfo.match(/MemFree:\s+(\d+)/)?.[1] || '0', 10) * 1024;
524
+ const available = parseInt(meminfo.match(/MemAvailable:\s+(\d+)/)?.[1] || '0', 10) * 1024;
525
+ return { total, free, available };
526
+ }
527
+ catch {
528
+ // Fallback for non-Linux
529
+ return {
530
+ total: os.totalmem(),
531
+ free: os.freemem(),
532
+ available: os.freemem(),
533
+ };
534
+ }
535
+ }
536
+ /**
537
+ * Check if a process is alive
538
+ */
539
+ isProcessAlive(pid) {
540
+ try {
541
+ process.kill(pid, 0);
542
+ return true;
543
+ }
544
+ catch {
545
+ return false;
546
+ }
547
+ }
548
+ /**
549
+ * Structured logging
550
+ */
551
+ log(level, message, context) {
552
+ const entry = {
553
+ timestamp: new Date().toISOString(),
554
+ level,
555
+ component: 'memory-monitor',
556
+ message,
557
+ ...context,
558
+ };
559
+ this.emit('log', entry);
560
+ const prefix = `[memory-monitor]`;
561
+ switch (level) {
562
+ case 'info':
563
+ // Only log info messages in debug mode to reduce noise
564
+ if (process.env.DEBUG_SPAWN === '1') {
565
+ console.log(prefix, message, context ? JSON.stringify(context) : '');
566
+ }
567
+ break;
568
+ case 'warn':
569
+ console.warn(prefix, message, context ? JSON.stringify(context) : '');
570
+ break;
571
+ case 'error':
572
+ console.error(prefix, message, context ? JSON.stringify(context) : '');
573
+ break;
574
+ }
575
+ }
576
+ }
577
+ /**
578
+ * Format bytes for human-readable display
579
+ */
580
+ function formatBytes(bytes) {
581
+ if (bytes === 0)
582
+ return '0 B';
583
+ const k = 1024;
584
+ const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
585
+ const i = Math.floor(Math.log(Math.abs(bytes)) / Math.log(k));
586
+ const value = bytes / Math.pow(k, i);
587
+ return `${value.toFixed(2)} ${sizes[i]}`;
588
+ }
589
+ // Export utility
590
+ export { formatBytes };
591
+ // Singleton instance
592
+ let _memoryMonitor = null;
593
+ export function getMemoryMonitor(config) {
594
+ if (!_memoryMonitor) {
595
+ _memoryMonitor = new AgentMemoryMonitor(config);
596
+ }
597
+ return _memoryMonitor;
598
+ }
599
+ //# sourceMappingURL=memory-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-monitor.js","sourceRoot":"","sources":["../src/memory-monitor.ts"],"names":[],"mappings":"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"}