stringray-ai 1.0.38 โ†’ 1.0.39

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 (113) hide show
  1. package/dist/plugin/architectural-integrity.d.ts +21 -0
  2. package/dist/plugin/architectural-integrity.d.ts.map +1 -0
  3. package/dist/plugin/architectural-integrity.js +81 -0
  4. package/dist/plugin/architectural-integrity.js.map +1 -0
  5. package/dist/plugin/boot-orchestrator.d.ts +100 -0
  6. package/dist/plugin/boot-orchestrator.d.ts.map +1 -0
  7. package/dist/plugin/boot-orchestrator.js +606 -0
  8. package/dist/plugin/boot-orchestrator.js.map +1 -0
  9. package/dist/plugin/codex-injector.d.ts +72 -0
  10. package/dist/plugin/codex-injector.d.ts.map +1 -0
  11. package/dist/plugin/codex-injector.js +387 -0
  12. package/dist/plugin/codex-injector.js.map +1 -0
  13. package/dist/plugin/delegation/index.d.ts +16 -0
  14. package/dist/plugin/delegation/index.d.ts.map +1 -0
  15. package/dist/plugin/delegation/index.js +13 -0
  16. package/dist/plugin/delegation/index.js.map +1 -0
  17. package/dist/plugin/delegation/session-coordinator.d.ts +121 -0
  18. package/dist/plugin/delegation/session-coordinator.d.ts.map +1 -0
  19. package/dist/plugin/delegation/session-coordinator.js +346 -0
  20. package/dist/plugin/delegation/session-coordinator.js.map +1 -0
  21. package/dist/plugin/index.d.ts +3 -0
  22. package/dist/plugin/index.d.ts.map +1 -0
  23. package/dist/plugin/index.js +3 -0
  24. package/dist/plugin/index.js.map +1 -0
  25. package/dist/plugin/monitoring/memory-monitor.d.ts +113 -0
  26. package/dist/plugin/monitoring/memory-monitor.d.ts.map +1 -0
  27. package/dist/plugin/monitoring/memory-monitor.js +283 -0
  28. package/dist/plugin/monitoring/memory-monitor.js.map +1 -0
  29. package/dist/plugin/postprocessor/PostProcessor.d.ts +90 -0
  30. package/dist/plugin/postprocessor/PostProcessor.d.ts.map +1 -0
  31. package/dist/plugin/postprocessor/PostProcessor.js +631 -0
  32. package/dist/plugin/postprocessor/PostProcessor.js.map +1 -0
  33. package/dist/plugin/postprocessor/analysis/FailureAnalysisEngine.d.ts +40 -0
  34. package/dist/plugin/postprocessor/analysis/FailureAnalysisEngine.d.ts.map +1 -0
  35. package/dist/plugin/postprocessor/analysis/FailureAnalysisEngine.js +244 -0
  36. package/dist/plugin/postprocessor/analysis/FailureAnalysisEngine.js.map +1 -0
  37. package/dist/plugin/postprocessor/autofix/AutoFixEngine.d.ts +50 -0
  38. package/dist/plugin/postprocessor/autofix/AutoFixEngine.d.ts.map +1 -0
  39. package/dist/plugin/postprocessor/autofix/AutoFixEngine.js +246 -0
  40. package/dist/plugin/postprocessor/autofix/AutoFixEngine.js.map +1 -0
  41. package/dist/plugin/postprocessor/autofix/FixValidator.d.ts +27 -0
  42. package/dist/plugin/postprocessor/autofix/FixValidator.d.ts.map +1 -0
  43. package/dist/plugin/postprocessor/autofix/FixValidator.js +158 -0
  44. package/dist/plugin/postprocessor/autofix/FixValidator.js.map +1 -0
  45. package/dist/plugin/postprocessor/config.d.ts +7 -0
  46. package/dist/plugin/postprocessor/config.d.ts.map +1 -0
  47. package/dist/plugin/postprocessor/config.js +66 -0
  48. package/dist/plugin/postprocessor/config.js.map +1 -0
  49. package/dist/plugin/postprocessor/escalation/EscalationEngine.d.ts +73 -0
  50. package/dist/plugin/postprocessor/escalation/EscalationEngine.d.ts.map +1 -0
  51. package/dist/plugin/postprocessor/escalation/EscalationEngine.js +249 -0
  52. package/dist/plugin/postprocessor/escalation/EscalationEngine.js.map +1 -0
  53. package/dist/plugin/postprocessor/monitoring/MonitoringEngine.d.ts +19 -0
  54. package/dist/plugin/postprocessor/monitoring/MonitoringEngine.d.ts.map +1 -0
  55. package/dist/plugin/postprocessor/monitoring/MonitoringEngine.js +120 -0
  56. package/dist/plugin/postprocessor/monitoring/MonitoringEngine.js.map +1 -0
  57. package/dist/plugin/postprocessor/redeploy/RedeployCoordinator.d.ts +92 -0
  58. package/dist/plugin/postprocessor/redeploy/RedeployCoordinator.d.ts.map +1 -0
  59. package/dist/plugin/postprocessor/redeploy/RedeployCoordinator.js +319 -0
  60. package/dist/plugin/postprocessor/redeploy/RedeployCoordinator.js.map +1 -0
  61. package/dist/plugin/postprocessor/success/SuccessHandler.d.ts +61 -0
  62. package/dist/plugin/postprocessor/success/SuccessHandler.d.ts.map +1 -0
  63. package/dist/plugin/postprocessor/success/SuccessHandler.js +148 -0
  64. package/dist/plugin/postprocessor/success/SuccessHandler.js.map +1 -0
  65. package/dist/plugin/postprocessor/triggers/APITrigger.d.ts +13 -0
  66. package/dist/plugin/postprocessor/triggers/APITrigger.d.ts.map +1 -0
  67. package/dist/plugin/postprocessor/triggers/APITrigger.js +20 -0
  68. package/dist/plugin/postprocessor/triggers/APITrigger.js.map +1 -0
  69. package/dist/plugin/postprocessor/triggers/GitHookTrigger.d.ts +17 -0
  70. package/dist/plugin/postprocessor/triggers/GitHookTrigger.d.ts.map +1 -0
  71. package/dist/plugin/postprocessor/triggers/GitHookTrigger.js +285 -0
  72. package/dist/plugin/postprocessor/triggers/GitHookTrigger.js.map +1 -0
  73. package/dist/plugin/postprocessor/triggers/WebhookTrigger.d.ts +13 -0
  74. package/dist/plugin/postprocessor/triggers/WebhookTrigger.d.ts.map +1 -0
  75. package/dist/plugin/postprocessor/triggers/WebhookTrigger.js +21 -0
  76. package/dist/plugin/postprocessor/triggers/WebhookTrigger.js.map +1 -0
  77. package/dist/plugin/postprocessor/types.d.ts +198 -0
  78. package/dist/plugin/postprocessor/types.d.ts.map +1 -0
  79. package/dist/plugin/postprocessor/types.js +5 -0
  80. package/dist/plugin/postprocessor/types.js.map +1 -0
  81. package/dist/plugin/security/security-auditor.d.ts +57 -0
  82. package/dist/plugin/security/security-auditor.d.ts.map +1 -0
  83. package/dist/plugin/security/security-auditor.js +583 -0
  84. package/dist/plugin/security/security-auditor.js.map +1 -0
  85. package/dist/plugin/security/security-hardener.d.ts +63 -0
  86. package/dist/plugin/security/security-hardener.d.ts.map +1 -0
  87. package/dist/plugin/security/security-hardener.js +181 -0
  88. package/dist/plugin/security/security-hardener.js.map +1 -0
  89. package/dist/plugin/security/security-headers.d.ts +52 -0
  90. package/dist/plugin/security/security-headers.d.ts.map +1 -0
  91. package/dist/plugin/security/security-headers.js +118 -0
  92. package/dist/plugin/security/security-headers.js.map +1 -0
  93. package/dist/plugin/session/session-cleanup-manager.d.ts +118 -0
  94. package/dist/plugin/session/session-cleanup-manager.d.ts.map +1 -0
  95. package/dist/plugin/session/session-cleanup-manager.js +324 -0
  96. package/dist/plugin/session/session-cleanup-manager.js.map +1 -0
  97. package/dist/plugin/session/session-monitor.d.ts +99 -0
  98. package/dist/plugin/session/session-monitor.d.ts.map +1 -0
  99. package/dist/plugin/session/session-monitor.js +363 -0
  100. package/dist/plugin/session/session-monitor.js.map +1 -0
  101. package/dist/plugin/session/session-state-manager.d.ts +142 -0
  102. package/dist/plugin/session/session-state-manager.d.ts.map +1 -0
  103. package/dist/plugin/session/session-state-manager.js +504 -0
  104. package/dist/plugin/session/session-state-manager.js.map +1 -0
  105. package/dist/plugin/strray-activation.d.ts +18 -0
  106. package/dist/plugin/strray-activation.d.ts.map +1 -0
  107. package/dist/plugin/strray-activation.js +114 -0
  108. package/dist/plugin/strray-activation.js.map +1 -0
  109. package/dist/plugin/validation/report-content-validator.d.ts +43 -0
  110. package/dist/plugin/validation/report-content-validator.d.ts.map +1 -0
  111. package/dist/plugin/validation/report-content-validator.js +219 -0
  112. package/dist/plugin/validation/report-content-validator.js.map +1 -0
  113. package/package.json +1 -1
@@ -0,0 +1,324 @@
1
+ /**
2
+ * StringRay Framework v1.0.0 - Session Cleanup Manager
3
+ *
4
+ * Manages automatic cleanup of sessions with TTL-based expiration,
5
+ * idle session detection, and manual cleanup utilities.
6
+ *
7
+ * @version 1.0.0
8
+ * @since 2026-01-07
9
+ */
10
+ export class SessionCleanupManager {
11
+ stateManager;
12
+ config;
13
+ cleanupInterval;
14
+ _sessionMetadata;
15
+ _metadataLoaded = false;
16
+ sessionMonitor;
17
+ constructor(stateManager, config = {}, sessionMonitor) {
18
+ this.stateManager = stateManager;
19
+ this.sessionMonitor = sessionMonitor;
20
+ this.config = {
21
+ ttlMs: 24 * 60 * 60 * 1000,
22
+ idleTimeoutMs: 2 * 60 * 60 * 1000,
23
+ maxSessions: 100,
24
+ cleanupIntervalMs: 5 * 60 * 1000,
25
+ enableAutoCleanup: true,
26
+ ...config,
27
+ };
28
+ this.initialize();
29
+ }
30
+ /**
31
+ * Lazy-loaded session metadata - loads from state manager on first access
32
+ */
33
+ get sessionMetadata() {
34
+ if (!this._metadataLoaded) {
35
+ this.loadSessionMetadata();
36
+ this._metadataLoaded = true;
37
+ }
38
+ return this._sessionMetadata;
39
+ }
40
+ set sessionMetadata(value) {
41
+ this._sessionMetadata = value;
42
+ this._metadataLoaded = true;
43
+ }
44
+ /**
45
+ * Initialize cleanup manager and start auto-cleanup if enabled
46
+ */
47
+ initialize() {
48
+ console.log("๐Ÿงน Session Cleanup Manager: Initializing...");
49
+ this.loadSessionMetadata();
50
+ if (this.config.enableAutoCleanup) {
51
+ this.startAutoCleanup();
52
+ }
53
+ console.log("โœ… Session Cleanup Manager: Initialized");
54
+ }
55
+ /**
56
+ * Register a new session for cleanup tracking
57
+ */
58
+ registerSession(sessionId, ttlMs) {
59
+ const metadata = {
60
+ sessionId,
61
+ createdAt: Date.now(),
62
+ lastActivity: Date.now(),
63
+ ttlMs: ttlMs || this.config.ttlMs,
64
+ isActive: true,
65
+ agentCount: 0,
66
+ memoryUsage: 0,
67
+ };
68
+ this.sessionMetadata.set(sessionId, metadata);
69
+ this.persistSessionMetadata(sessionId, metadata);
70
+ console.log(`๐Ÿ“‹ Session Cleanup Manager: Registered session ${sessionId} with TTL ${ttlMs || this.config.ttlMs}ms`);
71
+ }
72
+ updateActivity(sessionId) {
73
+ const metadata = this.sessionMetadata.get(sessionId);
74
+ if (metadata) {
75
+ metadata.lastActivity = Date.now();
76
+ this.persistSessionMetadata(sessionId, metadata);
77
+ }
78
+ }
79
+ updateMetadata(sessionId, updates) {
80
+ const metadata = this.sessionMetadata.get(sessionId);
81
+ if (metadata) {
82
+ Object.assign(metadata, updates);
83
+ this.persistSessionMetadata(sessionId, metadata);
84
+ }
85
+ }
86
+ /**
87
+ * Check if session should be cleaned up
88
+ */
89
+ shouldCleanup(sessionId) {
90
+ const metadata = this.sessionMetadata.get(sessionId);
91
+ if (!metadata)
92
+ return false;
93
+ const now = Date.now();
94
+ if (now - metadata.createdAt > metadata.ttlMs) {
95
+ return true;
96
+ }
97
+ if (now - metadata.lastActivity > this.config.idleTimeoutMs) {
98
+ return true;
99
+ }
100
+ return false;
101
+ }
102
+ /**
103
+ * Perform cleanup of expired/idle sessions
104
+ */
105
+ async performCleanup() {
106
+ const result = {
107
+ sessionsCleaned: 0,
108
+ sessionsExpired: 0,
109
+ sessionsIdle: 0,
110
+ errors: [],
111
+ };
112
+ const sessionsToCleanup = [];
113
+ for (const [sessionId, metadata] of this.sessionMetadata) {
114
+ if (!metadata.isActive)
115
+ continue;
116
+ const now = Date.now();
117
+ if (now - metadata.createdAt > metadata.ttlMs) {
118
+ sessionsToCleanup.push(sessionId);
119
+ result.sessionsExpired++;
120
+ }
121
+ else if (now - metadata.lastActivity > this.config.idleTimeoutMs) {
122
+ sessionsToCleanup.push(sessionId);
123
+ result.sessionsIdle++;
124
+ }
125
+ }
126
+ if (this.sessionMetadata.size > this.config.maxSessions) {
127
+ const sortedSessions = Array.from(this.sessionMetadata.entries())
128
+ .filter(([_, metadata]) => metadata.isActive)
129
+ .sort((a, b) => a[1].lastActivity - b[1].lastActivity);
130
+ const excessCount = sortedSessions.length - this.config.maxSessions;
131
+ for (let i = 0; i < excessCount && i < sortedSessions.length; i++) {
132
+ const session = sortedSessions[i];
133
+ if (session) {
134
+ sessionsToCleanup.push(session[0]);
135
+ }
136
+ }
137
+ }
138
+ for (const sessionId of sessionsToCleanup) {
139
+ try {
140
+ await this.cleanupSession(sessionId);
141
+ result.sessionsCleaned++;
142
+ }
143
+ catch (error) {
144
+ result.errors.push(`Failed to cleanup session ${sessionId}: ${error}`);
145
+ }
146
+ }
147
+ if (result.sessionsCleaned > 0) {
148
+ console.log(`๐Ÿงน Session Cleanup Manager: Cleaned up ${result.sessionsCleaned} sessions (${result.sessionsExpired} expired, ${result.sessionsIdle} idle)`);
149
+ }
150
+ return result;
151
+ }
152
+ /**
153
+ * Manually cleanup a specific session
154
+ */
155
+ async manualCleanup(sessionId, reason) {
156
+ try {
157
+ const metadata = this.sessionMetadata.get(sessionId);
158
+ if (metadata) {
159
+ metadata.cleanupReason = reason || "manual";
160
+ this.persistSessionMetadata(sessionId, metadata);
161
+ }
162
+ await this.cleanupSession(sessionId);
163
+ console.log(`๐Ÿงน Session Cleanup Manager: Manual cleanup completed for session ${sessionId}`);
164
+ return true;
165
+ }
166
+ catch (error) {
167
+ console.error(`โŒ Session Cleanup Manager: Manual cleanup failed for session ${sessionId}:`, error);
168
+ return false;
169
+ }
170
+ }
171
+ /**
172
+ * Cleanup all sessions (emergency cleanup)
173
+ */
174
+ async emergencyCleanup() {
175
+ const result = {
176
+ sessionsCleaned: 0,
177
+ sessionsExpired: 0,
178
+ sessionsIdle: 0,
179
+ errors: [],
180
+ };
181
+ for (const sessionId of this.sessionMetadata.keys()) {
182
+ try {
183
+ await this.cleanupSession(sessionId);
184
+ result.sessionsCleaned++;
185
+ }
186
+ catch (error) {
187
+ result.errors.push(`Failed to cleanup session ${sessionId}: ${error}`);
188
+ }
189
+ }
190
+ console.log(`๐Ÿšจ Session Cleanup Manager: Emergency cleanup completed - ${result.sessionsCleaned} sessions cleaned`);
191
+ return result;
192
+ }
193
+ /**
194
+ * Get cleanup statistics
195
+ */
196
+ getCleanupStats() {
197
+ const now = Date.now();
198
+ let expiredCount = 0;
199
+ let idleCount = 0;
200
+ for (const metadata of this.sessionMetadata.values()) {
201
+ if (!metadata.isActive)
202
+ continue;
203
+ if (now - metadata.createdAt > metadata.ttlMs) {
204
+ expiredCount++;
205
+ }
206
+ else if (now - metadata.lastActivity > this.config.idleTimeoutMs) {
207
+ idleCount++;
208
+ }
209
+ }
210
+ return {
211
+ totalSessions: this.sessionMetadata.size,
212
+ activeSessions: Array.from(this.sessionMetadata.values()).filter((m) => m.isActive).length,
213
+ expiredSessions: expiredCount,
214
+ idleSessions: idleCount,
215
+ nextCleanup: this.cleanupInterval
216
+ ? Date.now() + this.config.cleanupIntervalMs
217
+ : 0,
218
+ };
219
+ }
220
+ /**
221
+ * Get session metadata
222
+ */
223
+ getSessionMetadata(sessionId) {
224
+ return this.sessionMetadata.get(sessionId);
225
+ }
226
+ /**
227
+ * List all sessions with metadata
228
+ */
229
+ listSessions() {
230
+ return Array.from(this.sessionMetadata.values());
231
+ }
232
+ /**
233
+ * Start automatic cleanup interval
234
+ */
235
+ startAutoCleanup() {
236
+ this.cleanupInterval = setInterval(async () => {
237
+ try {
238
+ await this.performCleanup();
239
+ }
240
+ catch (error) {
241
+ console.error("โŒ Session Cleanup Manager: Auto-cleanup failed:", error);
242
+ }
243
+ }, this.config.cleanupIntervalMs);
244
+ console.log(`โฐ Session Cleanup Manager: Auto-cleanup started (interval: ${this.config.cleanupIntervalMs}ms)`);
245
+ }
246
+ /**
247
+ * Stop automatic cleanup
248
+ */
249
+ stopAutoCleanup() {
250
+ if (this.cleanupInterval) {
251
+ clearInterval(this.cleanupInterval);
252
+ this.cleanupInterval = undefined;
253
+ console.log("โน๏ธ Session Cleanup Manager: Auto-cleanup stopped");
254
+ }
255
+ }
256
+ /**
257
+ * Load session metadata from state manager (lazy loading)
258
+ */
259
+ loadSessionMetadata() {
260
+ try {
261
+ const storedMetadata = this.stateManager.get("cleanup:session_metadata");
262
+ this._sessionMetadata = new Map();
263
+ if (storedMetadata &&
264
+ typeof storedMetadata === "object" &&
265
+ !Array.isArray(storedMetadata)) {
266
+ for (const [sessionId, metadata] of Object.entries(storedMetadata)) {
267
+ if (metadata && typeof metadata === "object" && metadata.sessionId) {
268
+ this._sessionMetadata.set(sessionId, metadata);
269
+ }
270
+ }
271
+ console.log(`๐Ÿ“‹ Session Cleanup Manager: Lazy-loaded metadata for ${this._sessionMetadata.size} sessions`);
272
+ }
273
+ else if (storedMetadata) {
274
+ console.warn("โš ๏ธ Session Cleanup Manager: Corrupted session metadata detected, skipping load");
275
+ }
276
+ }
277
+ catch (error) {
278
+ console.error("โŒ Session Cleanup Manager: Failed to load session metadata:", error);
279
+ }
280
+ }
281
+ /**
282
+ * Persist session metadata to state manager
283
+ */
284
+ persistSessionMetadata(sessionId, metadata) {
285
+ const allMetadata = Object.fromEntries(this.sessionMetadata);
286
+ this.stateManager.set("cleanup:session_metadata", allMetadata);
287
+ }
288
+ /**
289
+ * Cleanup a specific session
290
+ */
291
+ async cleanupSession(sessionId) {
292
+ const metadata = this.sessionMetadata.get(sessionId);
293
+ if (!metadata)
294
+ return;
295
+ metadata.isActive = false;
296
+ this.persistSessionMetadata(sessionId, metadata);
297
+ // Skip session coordinator cleanup in test environment to avoid dependency issues
298
+ // const sessionCoordinator = this.stateManager.get(
299
+ // "delegation:session_coordinator",
300
+ // ) as SessionCoordinator;
301
+ // if (sessionCoordinator) {
302
+ // sessionCoordinator.cleanupSession(sessionId);
303
+ // }
304
+ // Notify session monitor to unregister the session
305
+ if (this.sessionMonitor) {
306
+ this.sessionMonitor.unregisterSession(sessionId);
307
+ }
308
+ this.stateManager.clear(`session:${sessionId}`);
309
+ this.sessionMetadata.delete(sessionId);
310
+ this.persistSessionMetadata(sessionId, metadata);
311
+ console.log(`๐Ÿงน Session Cleanup Manager: Cleaned up session ${sessionId}`);
312
+ }
313
+ /**
314
+ * Shutdown cleanup manager
315
+ */
316
+ shutdown() {
317
+ this.stopAutoCleanup();
318
+ console.log("๐Ÿ›‘ Session Cleanup Manager: Shutdown complete");
319
+ }
320
+ }
321
+ export const createSessionCleanupManager = (stateManager, config, sessionMonitor) => {
322
+ return new SessionCleanupManager(stateManager, config, sessionMonitor);
323
+ };
324
+ //# sourceMappingURL=session-cleanup-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-cleanup-manager.js","sourceRoot":"","sources":["../../../src/session/session-cleanup-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * StringRay Framework v1.0.0 - Session Monitor
3
+ *
4
+ * Provides real-time monitoring of sessions with health checks,
5
+ * performance tracking, and alerting capabilities.
6
+ *
7
+ * @version 1.0.0
8
+ * @since 2026-01-07
9
+ */
10
+ import { StringRayStateManager } from "../state/state-manager";
11
+ import { SessionCoordinator } from "../delegation/session-coordinator";
12
+ import { SessionCleanupManager } from "./session-cleanup-manager";
13
+ export interface SessionHealth {
14
+ sessionId: string;
15
+ status: "healthy" | "degraded" | "critical" | "unknown";
16
+ lastCheck: number;
17
+ responseTime: number;
18
+ errorCount: number;
19
+ activeAgents: number;
20
+ memoryUsage: number;
21
+ issues: string[];
22
+ }
23
+ export interface SessionMetrics {
24
+ sessionId: string;
25
+ timestamp: number;
26
+ totalInteractions: number;
27
+ successfulInteractions: number;
28
+ failedInteractions: number;
29
+ averageResponseTime: number;
30
+ conflictResolutionRate: number;
31
+ coordinationEfficiency: number;
32
+ memoryUsage: number;
33
+ agentCount: number;
34
+ }
35
+ export interface MonitorConfig {
36
+ healthCheckIntervalMs: number;
37
+ metricsCollectionIntervalMs: number;
38
+ alertThresholds: {
39
+ maxResponseTime: number;
40
+ maxErrorRate: number;
41
+ maxMemoryUsage: number;
42
+ minCoordinationEfficiency: number;
43
+ maxConflicts: number;
44
+ };
45
+ enableAlerts: boolean;
46
+ enableMetrics: boolean;
47
+ }
48
+ export interface Alert {
49
+ id: string;
50
+ sessionId: string;
51
+ type: "health" | "performance" | "resource" | "coordination";
52
+ severity: "low" | "medium" | "high" | "critical";
53
+ message: string;
54
+ timestamp: number;
55
+ resolved: boolean;
56
+ resolvedAt?: number;
57
+ }
58
+ export declare class SessionMonitor {
59
+ private stateManager;
60
+ private sessionCoordinator;
61
+ private cleanupManager;
62
+ private config;
63
+ private healthChecks;
64
+ private metricsHistory;
65
+ private activeAlerts;
66
+ private healthCheckInterval?;
67
+ private metricsInterval?;
68
+ constructor(stateManager: StringRayStateManager, sessionCoordinator: SessionCoordinator, cleanupManager: SessionCleanupManager, config?: Partial<MonitorConfig>);
69
+ private initialize;
70
+ registerSession(sessionId: string): void;
71
+ unregisterSession(sessionId: string): void;
72
+ performHealthCheck(sessionId: string): Promise<SessionHealth>;
73
+ collectMetrics(sessionId: string): SessionMetrics | null;
74
+ getHealthStatus(sessionId: string): SessionHealth | null;
75
+ getMetricsHistory(sessionId: string, limit?: number): SessionMetrics[];
76
+ getActiveAlerts(sessionId?: string): Alert[];
77
+ resolveAlert(alertId: string): boolean;
78
+ getMonitoringStats(): {
79
+ totalSessions: number;
80
+ healthySessions: number;
81
+ degradedSessions: number;
82
+ criticalSessions: number;
83
+ activeAlerts: number;
84
+ totalMetricsPoints: number;
85
+ };
86
+ private startHealthChecks;
87
+ private startMetricsCollection;
88
+ private generateAlerts;
89
+ private loadPersistedData;
90
+ private persistHealthData;
91
+ private persistMetricsData;
92
+ private persistAlertData;
93
+ shutdown(): void;
94
+ private calculateSessionMemoryUsage;
95
+ private countSessionConflicts;
96
+ private calculateAverageResponseTime;
97
+ }
98
+ export declare const createSessionMonitor: (stateManager: StringRayStateManager, sessionCoordinator: SessionCoordinator, cleanupManager: SessionCleanupManager, config?: Partial<MonitorConfig>) => SessionMonitor;
99
+ //# sourceMappingURL=session-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-monitor.d.ts","sourceRoot":"","sources":["../../../src/session/session-monitor.ts"],"names":[],"mappings":"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"}