@blackbox_ai/blackbox-cli 0.9.2 → 1.0.2
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/dist/assets/notification.mp3 +0 -0
- package/dist/package.json +2 -2
- package/dist/src/commands/voice.js +39 -34
- package/dist/src/commands/voice.js.map +1 -1
- package/dist/src/config/config.js +1 -4
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/settings.d.ts +2 -0
- package/dist/src/config/settings.js +22 -1
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/config/settingsSchema.d.ts +36 -7
- package/dist/src/config/settingsSchema.js +35 -8
- package/dist/src/config/settingsSchema.js.map +1 -1
- package/dist/src/gemini.js +25 -20
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/services/BuiltinCommandLoader.js +2 -2
- package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
- package/dist/src/services/agentExecutor.d.ts +5 -0
- package/dist/src/services/agentExecutor.js +6 -2
- package/dist/src/services/agentExecutor.js.map +1 -1
- package/dist/src/services/voiceRecordingService.d.ts +13 -1
- package/dist/src/services/voiceRecordingService.js +38 -5
- package/dist/src/services/voiceRecordingService.js.map +1 -1
- package/dist/src/ui/App.js +255 -20
- package/dist/src/ui/App.js.map +1 -1
- package/dist/src/ui/commands/agentCommand.js +134 -43
- package/dist/src/ui/commands/agentCommand.js.map +1 -1
- package/dist/src/ui/commands/modelCommand.js +15 -2
- package/dist/src/ui/commands/modelCommand.js.map +1 -1
- package/dist/src/ui/commands/quitCommand.js +5 -0
- package/dist/src/ui/commands/quitCommand.js.map +1 -1
- package/dist/src/ui/commands/subAgentsCommand.d.ts +7 -0
- package/dist/src/ui/commands/subAgentsCommand.js +32 -0
- package/dist/src/ui/commands/subAgentsCommand.js.map +1 -0
- package/dist/src/ui/commands/types.d.ts +14 -3
- package/dist/src/ui/commands/types.js.map +1 -1
- package/dist/src/ui/commands/voiceCommand.js +70 -34
- package/dist/src/ui/commands/voiceCommand.js.map +1 -1
- package/dist/src/ui/commands/voiceCommand.test.d.ts +6 -0
- package/dist/src/ui/commands/voiceCommand.test.js +131 -0
- package/dist/src/ui/commands/voiceCommand.test.js.map +1 -0
- package/dist/src/ui/components/AgentModelSelector.js +1 -1
- package/dist/src/ui/components/AgentModelSelector.js.map +1 -1
- package/dist/src/ui/components/AgentSetDialog.d.ts +15 -0
- package/dist/src/ui/components/AgentSetDialog.js +52 -0
- package/dist/src/ui/components/AgentSetDialog.js.map +1 -0
- package/dist/src/ui/components/ApiKeyInputDialog.d.ts +17 -0
- package/dist/src/ui/components/ApiKeyInputDialog.js +44 -0
- package/dist/src/ui/components/ApiKeyInputDialog.js.map +1 -0
- package/dist/src/ui/components/AuthDialog.js +32 -46
- package/dist/src/ui/components/AuthDialog.js.map +1 -1
- package/dist/src/ui/components/Footer.d.ts +6 -0
- package/dist/src/ui/components/Footer.js +17 -2
- package/dist/src/ui/components/Footer.js.map +1 -1
- package/dist/src/ui/components/GenericProviderKeyPrompt.js +1 -1
- package/dist/src/ui/components/GenericProviderKeyPrompt.js.map +1 -1
- package/dist/src/ui/components/Header.js +2 -9
- package/dist/src/ui/components/Header.js.map +1 -1
- package/dist/src/ui/components/HistoryBrowserDialog.js +2 -1
- package/dist/src/ui/components/HistoryBrowserDialog.js.map +1 -1
- package/dist/src/ui/components/InputPrompt.js +3 -1
- package/dist/src/ui/components/InputPrompt.js.map +1 -1
- package/dist/src/ui/components/MemoryUsageDisplay.js +41 -8
- package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.js +4 -3
- package/dist/src/ui/components/SettingsDialog.js.map +1 -1
- package/dist/src/ui/components/SuggestionsDisplay.js +3 -2
- package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
- package/dist/src/ui/components/Tips.js +1 -1
- package/dist/src/ui/components/Tips.js.map +1 -1
- package/dist/src/ui/components/agents/SingleAgentDialog.d.ts +7 -4
- package/dist/src/ui/components/agents/SingleAgentDialog.js +135 -63
- package/dist/src/ui/components/agents/SingleAgentDialog.js.map +1 -1
- package/dist/src/ui/components/messages/DiffRenderer.js +1 -9
- package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
- package/dist/src/ui/components/messages/ErrorMessage.js +2 -1
- package/dist/src/ui/components/messages/ErrorMessage.js.map +1 -1
- package/dist/src/ui/components/messages/InfoMessage.js +2 -1
- package/dist/src/ui/components/messages/InfoMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.js +4 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
- package/dist/src/ui/components/messages/UserMessage.js +1 -2
- package/dist/src/ui/components/messages/UserMessage.js.map +1 -1
- package/dist/src/ui/components/shared/RadioButtonSelect.js +14 -4
- package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
- package/dist/src/ui/contexts/SessionContext.d.ts +18 -0
- package/dist/src/ui/contexts/SessionContext.js +25 -1
- package/dist/src/ui/contexts/SessionContext.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.d.ts +2 -2
- package/dist/src/ui/hooks/slashCommandProcessor.js +54 -2
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/useAgentCommandProcessor.d.ts +12 -2
- package/dist/src/ui/hooks/useAgentCommandProcessor.js +169 -4
- package/dist/src/ui/hooks/useAgentCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/useAuthCommand.d.ts +2 -1
- package/dist/src/ui/hooks/useAuthCommand.js +22 -2
- package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
- package/dist/src/ui/hooks/useDialogClose.d.ts +2 -0
- package/dist/src/ui/hooks/useDialogClose.js +5 -0
- package/dist/src/ui/hooks/useDialogClose.js.map +1 -1
- package/dist/src/ui/hooks/useEncryptedStream.d.ts +2 -1
- package/dist/src/ui/hooks/useEncryptedStream.js +17 -4
- package/dist/src/ui/hooks/useEncryptedStream.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.js +216 -21
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useInputBoxColor.d.ts +13 -0
- package/dist/src/ui/hooks/useInputBoxColor.js +62 -0
- package/dist/src/ui/hooks/useInputBoxColor.js.map +1 -0
- package/dist/src/ui/hooks/useMessageQueue.d.ts +7 -1
- package/dist/src/ui/hooks/useMessageQueue.js +9 -3
- package/dist/src/ui/hooks/useMessageQueue.js.map +1 -1
- package/dist/src/ui/utils/agentConversationUtils.d.ts +28 -0
- package/dist/src/ui/utils/agentConversationUtils.js +71 -0
- package/dist/src/ui/utils/agentConversationUtils.js.map +1 -0
- package/dist/src/ui/utils/colorBlend.d.ts +33 -0
- package/dist/src/ui/utils/colorBlend.js +61 -0
- package/dist/src/ui/utils/colorBlend.js.map +1 -0
- package/dist/src/ui/utils/commandUtils.d.ts +2 -1
- package/dist/src/ui/utils/commandUtils.js +14 -1
- package/dist/src/ui/utils/commandUtils.js.map +1 -1
- package/dist/src/ui/utils/commandUtils.test.js +25 -0
- package/dist/src/ui/utils/commandUtils.test.js.map +1 -1
- package/dist/src/ui/utils/terminalBackgroundDetector.d.ts +16 -0
- package/dist/src/ui/utils/terminalBackgroundDetector.js +124 -23
- package/dist/src/ui/utils/terminalBackgroundDetector.js.map +1 -1
- package/dist/src/utils/agentCommandBuilder.d.ts +16 -4
- package/dist/src/utils/agentCommandBuilder.js +66 -26
- package/dist/src/utils/agentCommandBuilder.js.map +1 -1
- package/dist/src/utils/apiKeyUtils.d.ts +47 -0
- package/dist/src/utils/apiKeyUtils.js +177 -0
- package/dist/src/utils/apiKeyUtils.js.map +1 -0
- package/dist/src/utils/backgroundUpdateCheck.js +104 -7
- package/dist/src/utils/backgroundUpdateCheck.js.map +1 -1
- package/dist/src/utils/memoryManager.d.ts +85 -0
- package/dist/src/utils/memoryManager.js +258 -0
- package/dist/src/utils/memoryManager.js.map +1 -0
- package/dist/src/utils/memoryMonitor.d.ts +89 -0
- package/dist/src/utils/memoryMonitor.js +238 -0
- package/dist/src/utils/memoryMonitor.js.map +1 -0
- package/dist/src/utils/memoryWrapper.d.ts +18 -0
- package/dist/src/utils/memoryWrapper.js +62 -0
- package/dist/src/utils/memoryWrapper.js.map +1 -0
- package/dist/src/utils/preLaunchUpdateCheck.js +17 -7
- package/dist/src/utils/preLaunchUpdateCheck.js.map +1 -1
- package/dist/src/utils/soundNotification.d.ts +15 -0
- package/dist/src/utils/soundNotification.js +138 -0
- package/dist/src/utils/soundNotification.js.map +1 -0
- package/dist/src/utils/versionStorage.d.ts +20 -0
- package/dist/src/utils/versionStorage.js +62 -0
- package/dist/src/utils/versionStorage.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import os from 'node:os';
|
|
7
|
+
import v8 from 'node:v8';
|
|
8
|
+
/**
|
|
9
|
+
* Default heap size in MB - set to 8GB as requested
|
|
10
|
+
*/
|
|
11
|
+
const DEFAULT_HEAP_SIZE_MB = 8192;
|
|
12
|
+
/**
|
|
13
|
+
* Minimum heap size in MB to prevent issues on low-memory systems
|
|
14
|
+
*/
|
|
15
|
+
const MIN_HEAP_SIZE_MB = 2048;
|
|
16
|
+
/**
|
|
17
|
+
* Memory pressure thresholds
|
|
18
|
+
*/
|
|
19
|
+
const MEMORY_PRESSURE_THRESHOLDS = {
|
|
20
|
+
WARNING: 0.7, // 70% of heap used
|
|
21
|
+
CRITICAL: 0.85, // 85% of heap used
|
|
22
|
+
EMERGENCY: 0.95 // 95% of heap used
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Memory manager class for handling memory optimization and monitoring
|
|
26
|
+
*/
|
|
27
|
+
export class MemoryManager {
|
|
28
|
+
cleanupCallbacks = new Set();
|
|
29
|
+
monitoringInterval;
|
|
30
|
+
lastGcTime = 0;
|
|
31
|
+
gcThrottleMs = 5000; // Minimum 5 seconds between forced GCs
|
|
32
|
+
config;
|
|
33
|
+
constructor(config) {
|
|
34
|
+
this.config = config;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Get optimal heap size arguments for Node.js
|
|
38
|
+
*/
|
|
39
|
+
static getOptimalHeapArgs(config) {
|
|
40
|
+
const totalMemoryMB = os.totalmem() / (1024 * 1024);
|
|
41
|
+
const heapStats = v8.getHeapStatistics();
|
|
42
|
+
const currentMaxOldSpaceSizeMb = Math.floor(heapStats.heap_size_limit / 1024 / 1024);
|
|
43
|
+
// Calculate target heap size
|
|
44
|
+
let targetHeapSizeMB = DEFAULT_HEAP_SIZE_MB;
|
|
45
|
+
// Ensure we don't exceed 80% of total system memory
|
|
46
|
+
const maxSafeHeapSize = Math.floor(totalMemoryMB * 0.8);
|
|
47
|
+
if (targetHeapSizeMB > maxSafeHeapSize) {
|
|
48
|
+
targetHeapSizeMB = maxSafeHeapSize;
|
|
49
|
+
}
|
|
50
|
+
// Ensure minimum heap size
|
|
51
|
+
if (targetHeapSizeMB < MIN_HEAP_SIZE_MB) {
|
|
52
|
+
targetHeapSizeMB = MIN_HEAP_SIZE_MB;
|
|
53
|
+
}
|
|
54
|
+
if (config?.getDebugMode()) {
|
|
55
|
+
console.debug(`Memory configuration: Current=${currentMaxOldSpaceSizeMb}MB, Target=${targetHeapSizeMB}MB, System=${Math.floor(totalMemoryMB)}MB`);
|
|
56
|
+
}
|
|
57
|
+
// Skip relaunch if already configured or explicitly disabled
|
|
58
|
+
if (process.env['BLACKBOX_CLI_NO_RELAUNCH'] || process.env['GEMINI_CLI_NO_RELAUNCH']) {
|
|
59
|
+
return [];
|
|
60
|
+
}
|
|
61
|
+
// Only relaunch if we need significantly more memory
|
|
62
|
+
if (targetHeapSizeMB > currentMaxOldSpaceSizeMb + 512) {
|
|
63
|
+
return [
|
|
64
|
+
`--max-old-space-size=${targetHeapSizeMB}`,
|
|
65
|
+
'--max-semi-space-size=128', // Optimize young generation
|
|
66
|
+
'--optimize-for-size', // Reduce memory overhead
|
|
67
|
+
];
|
|
68
|
+
}
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get current memory statistics
|
|
73
|
+
*/
|
|
74
|
+
getMemoryStats() {
|
|
75
|
+
const heapStats = v8.getHeapStatistics();
|
|
76
|
+
const memUsage = process.memoryUsage();
|
|
77
|
+
const heapUsed = memUsage.heapUsed;
|
|
78
|
+
const heapTotal = memUsage.heapTotal;
|
|
79
|
+
const heapLimit = heapStats.heap_size_limit;
|
|
80
|
+
const usagePercentage = heapUsed / heapLimit;
|
|
81
|
+
let pressureLevel = 'normal';
|
|
82
|
+
if (usagePercentage >= MEMORY_PRESSURE_THRESHOLDS.EMERGENCY) {
|
|
83
|
+
pressureLevel = 'emergency';
|
|
84
|
+
}
|
|
85
|
+
else if (usagePercentage >= MEMORY_PRESSURE_THRESHOLDS.CRITICAL) {
|
|
86
|
+
pressureLevel = 'critical';
|
|
87
|
+
}
|
|
88
|
+
else if (usagePercentage >= MEMORY_PRESSURE_THRESHOLDS.WARNING) {
|
|
89
|
+
pressureLevel = 'warning';
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
heapUsed,
|
|
93
|
+
heapTotal,
|
|
94
|
+
heapLimit,
|
|
95
|
+
external: memUsage.external,
|
|
96
|
+
rss: memUsage.rss,
|
|
97
|
+
usagePercentage,
|
|
98
|
+
pressureLevel,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Register a cleanup callback to be called during memory pressure
|
|
103
|
+
*/
|
|
104
|
+
registerCleanupCallback(callback) {
|
|
105
|
+
this.cleanupCallbacks.add(callback);
|
|
106
|
+
return () => this.cleanupCallbacks.delete(callback);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Force garbage collection if enough time has passed
|
|
110
|
+
*/
|
|
111
|
+
forceGarbageCollection() {
|
|
112
|
+
const now = Date.now();
|
|
113
|
+
if (now - this.lastGcTime < this.gcThrottleMs) {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
if (global.gc) {
|
|
118
|
+
global.gc();
|
|
119
|
+
this.lastGcTime = now;
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
if (this.config?.getDebugMode()) {
|
|
125
|
+
console.debug('Failed to force garbage collection:', error);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Run cleanup callbacks
|
|
132
|
+
*/
|
|
133
|
+
async runCleanupCallbacks() {
|
|
134
|
+
const promises = [];
|
|
135
|
+
for (const callback of this.cleanupCallbacks) {
|
|
136
|
+
try {
|
|
137
|
+
const result = callback();
|
|
138
|
+
if (result instanceof Promise) {
|
|
139
|
+
promises.push(result);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
if (this.config?.getDebugMode()) {
|
|
144
|
+
console.debug('Cleanup callback failed:', error);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (promises.length > 0) {
|
|
149
|
+
await Promise.allSettled(promises);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Handle memory pressure by running cleanup and forcing GC
|
|
154
|
+
*/
|
|
155
|
+
async handleMemoryPressure() {
|
|
156
|
+
if (this.config?.getDebugMode()) {
|
|
157
|
+
const stats = this.getMemoryStats();
|
|
158
|
+
console.debug(`Memory pressure detected: ${(stats.usagePercentage * 100).toFixed(1)}% used`);
|
|
159
|
+
}
|
|
160
|
+
// Run cleanup callbacks first
|
|
161
|
+
await this.runCleanupCallbacks();
|
|
162
|
+
// Force garbage collection
|
|
163
|
+
this.forceGarbageCollection();
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Start memory monitoring
|
|
167
|
+
*/
|
|
168
|
+
startMonitoring(intervalMs = 10000) {
|
|
169
|
+
if (this.monitoringInterval) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
this.monitoringInterval = setInterval(() => {
|
|
173
|
+
const stats = this.getMemoryStats();
|
|
174
|
+
if (stats.pressureLevel === 'emergency' || stats.pressureLevel === 'critical') {
|
|
175
|
+
this.handleMemoryPressure().catch((error) => {
|
|
176
|
+
if (this.config?.getDebugMode()) {
|
|
177
|
+
console.debug('Memory pressure handling failed:', error);
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
if (this.config?.getDebugMode() && stats.pressureLevel !== 'normal') {
|
|
182
|
+
console.debug(`Memory usage: ${(stats.usagePercentage * 100).toFixed(1)}% (${stats.pressureLevel})`);
|
|
183
|
+
}
|
|
184
|
+
}, intervalMs);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Stop memory monitoring
|
|
188
|
+
*/
|
|
189
|
+
stopMonitoring() {
|
|
190
|
+
if (this.monitoringInterval) {
|
|
191
|
+
clearInterval(this.monitoringInterval);
|
|
192
|
+
this.monitoringInterval = undefined;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Get formatted memory usage string
|
|
197
|
+
*/
|
|
198
|
+
getFormattedMemoryUsage() {
|
|
199
|
+
const stats = this.getMemoryStats();
|
|
200
|
+
const heapUsedMB = Math.round(stats.heapUsed / 1024 / 1024);
|
|
201
|
+
const heapLimitMB = Math.round(stats.heapLimit / 1024 / 1024);
|
|
202
|
+
const percentage = (stats.usagePercentage * 100).toFixed(1);
|
|
203
|
+
return `${heapUsedMB}MB / ${heapLimitMB}MB (${percentage}%)`;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Cleanup and destroy the memory manager
|
|
207
|
+
*/
|
|
208
|
+
destroy() {
|
|
209
|
+
this.stopMonitoring();
|
|
210
|
+
this.cleanupCallbacks.clear();
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Global memory manager instance
|
|
215
|
+
*/
|
|
216
|
+
let globalMemoryManager;
|
|
217
|
+
/**
|
|
218
|
+
* Get or create the global memory manager
|
|
219
|
+
*/
|
|
220
|
+
export function getMemoryManager(config) {
|
|
221
|
+
if (!globalMemoryManager) {
|
|
222
|
+
globalMemoryManager = new MemoryManager(config);
|
|
223
|
+
}
|
|
224
|
+
return globalMemoryManager;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Initialize memory management with optimal settings
|
|
228
|
+
*/
|
|
229
|
+
export function initializeMemoryManagement(config) {
|
|
230
|
+
const memoryManager = getMemoryManager(config);
|
|
231
|
+
// Start monitoring
|
|
232
|
+
memoryManager.startMonitoring();
|
|
233
|
+
// Register process cleanup
|
|
234
|
+
const cleanup = () => {
|
|
235
|
+
memoryManager.destroy();
|
|
236
|
+
};
|
|
237
|
+
process.on('exit', cleanup);
|
|
238
|
+
process.on('SIGINT', cleanup);
|
|
239
|
+
process.on('SIGTERM', cleanup);
|
|
240
|
+
return memoryManager;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Utility function to create a memory-aware cleanup callback
|
|
244
|
+
*/
|
|
245
|
+
export function createMemoryCleanupCallback(cleanupFn, description) {
|
|
246
|
+
return async () => {
|
|
247
|
+
try {
|
|
248
|
+
const result = cleanupFn();
|
|
249
|
+
if (result instanceof Promise) {
|
|
250
|
+
await result;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
catch (error) {
|
|
254
|
+
console.warn(`Memory cleanup failed${description ? ` (${description})` : ''}:`, error);
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=memoryManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memoryManager.js","sourceRoot":"","sources":["../../../src/utils/memoryManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
export interface MemoryStats {
|
|
7
|
+
heapUsed: number;
|
|
8
|
+
heapTotal: number;
|
|
9
|
+
heapLimit: number;
|
|
10
|
+
heapUsagePercent: number;
|
|
11
|
+
external: number;
|
|
12
|
+
rss: number;
|
|
13
|
+
arrayBuffers: number;
|
|
14
|
+
timestamp: number;
|
|
15
|
+
}
|
|
16
|
+
export interface MemoryAlert {
|
|
17
|
+
level: 'info' | 'warning' | 'critical';
|
|
18
|
+
message: string;
|
|
19
|
+
stats: MemoryStats;
|
|
20
|
+
timestamp: number;
|
|
21
|
+
}
|
|
22
|
+
export declare class MemoryMonitor {
|
|
23
|
+
private static instance;
|
|
24
|
+
private alerts;
|
|
25
|
+
private intervalId;
|
|
26
|
+
private onAlert?;
|
|
27
|
+
private isMonitoring;
|
|
28
|
+
private readonly WARNING_THRESHOLD;
|
|
29
|
+
private readonly CRITICAL_THRESHOLD;
|
|
30
|
+
private readonly MONITORING_INTERVAL;
|
|
31
|
+
private constructor();
|
|
32
|
+
static getInstance(): MemoryMonitor;
|
|
33
|
+
/**
|
|
34
|
+
* Get current memory statistics
|
|
35
|
+
*/
|
|
36
|
+
getCurrentStats(): MemoryStats;
|
|
37
|
+
/**
|
|
38
|
+
* Format memory stats for display
|
|
39
|
+
*/
|
|
40
|
+
formatStats(stats: MemoryStats): string;
|
|
41
|
+
/**
|
|
42
|
+
* Get a simple memory status string
|
|
43
|
+
*/
|
|
44
|
+
getMemoryStatus(): string;
|
|
45
|
+
/**
|
|
46
|
+
* Start continuous memory monitoring
|
|
47
|
+
*/
|
|
48
|
+
startMonitoring(onAlert?: (alert: MemoryAlert) => void): void;
|
|
49
|
+
/**
|
|
50
|
+
* Stop memory monitoring
|
|
51
|
+
*/
|
|
52
|
+
stopMonitoring(): void;
|
|
53
|
+
/**
|
|
54
|
+
* Check current memory usage and generate alerts
|
|
55
|
+
*/
|
|
56
|
+
private checkMemoryUsage;
|
|
57
|
+
/**
|
|
58
|
+
* Get memory level based on usage percentage
|
|
59
|
+
*/
|
|
60
|
+
private getMemoryLevel;
|
|
61
|
+
/**
|
|
62
|
+
* Generate alert message
|
|
63
|
+
*/
|
|
64
|
+
private getAlertMessage;
|
|
65
|
+
/**
|
|
66
|
+
* Get recent alerts
|
|
67
|
+
*/
|
|
68
|
+
getRecentAlerts(count?: number): MemoryAlert[];
|
|
69
|
+
/**
|
|
70
|
+
* Clear all alerts
|
|
71
|
+
*/
|
|
72
|
+
clearAlerts(): void;
|
|
73
|
+
/**
|
|
74
|
+
* Get system memory information
|
|
75
|
+
*/
|
|
76
|
+
getSystemInfo(): {
|
|
77
|
+
totalMemory: number;
|
|
78
|
+
freeMemory: number;
|
|
79
|
+
usedMemory: number;
|
|
80
|
+
memoryUsagePercent: number;
|
|
81
|
+
nodeVersion: string;
|
|
82
|
+
platform: string;
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Generate a comprehensive memory report
|
|
86
|
+
*/
|
|
87
|
+
generateReport(): string;
|
|
88
|
+
}
|
|
89
|
+
export declare const memoryMonitor: MemoryMonitor;
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import v8 from 'node:v8';
|
|
7
|
+
import os from 'node:os';
|
|
8
|
+
export class MemoryMonitor {
|
|
9
|
+
static instance;
|
|
10
|
+
alerts = [];
|
|
11
|
+
intervalId = null;
|
|
12
|
+
onAlert;
|
|
13
|
+
isMonitoring = false;
|
|
14
|
+
// Thresholds for memory alerts
|
|
15
|
+
WARNING_THRESHOLD = 70; // 70% of heap limit
|
|
16
|
+
CRITICAL_THRESHOLD = 85; // 85% of heap limit
|
|
17
|
+
MONITORING_INTERVAL = 5000; // 5 seconds
|
|
18
|
+
constructor() { }
|
|
19
|
+
static getInstance() {
|
|
20
|
+
if (!MemoryMonitor.instance) {
|
|
21
|
+
MemoryMonitor.instance = new MemoryMonitor();
|
|
22
|
+
}
|
|
23
|
+
return MemoryMonitor.instance;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Get current memory statistics
|
|
27
|
+
*/
|
|
28
|
+
getCurrentStats() {
|
|
29
|
+
const heapStats = v8.getHeapStatistics();
|
|
30
|
+
const memUsage = process.memoryUsage();
|
|
31
|
+
const heapUsed = heapStats.used_heap_size;
|
|
32
|
+
const heapTotal = heapStats.total_heap_size;
|
|
33
|
+
const heapLimit = heapStats.heap_size_limit;
|
|
34
|
+
const heapUsagePercent = (heapUsed / heapLimit) * 100;
|
|
35
|
+
return {
|
|
36
|
+
heapUsed: Math.round(heapUsed / 1024 / 1024), // MB
|
|
37
|
+
heapTotal: Math.round(heapTotal / 1024 / 1024), // MB
|
|
38
|
+
heapLimit: Math.round(heapLimit / 1024 / 1024), // MB
|
|
39
|
+
heapUsagePercent: Math.round(heapUsagePercent * 100) / 100,
|
|
40
|
+
external: Math.round(memUsage.external / 1024 / 1024), // MB
|
|
41
|
+
rss: Math.round(memUsage.rss / 1024 / 1024), // MB
|
|
42
|
+
arrayBuffers: Math.round(memUsage.arrayBuffers / 1024 / 1024), // MB
|
|
43
|
+
timestamp: Date.now(),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Format memory stats for display
|
|
48
|
+
*/
|
|
49
|
+
formatStats(stats) {
|
|
50
|
+
return [
|
|
51
|
+
`Heap: ${stats.heapUsed}MB/${stats.heapLimit}MB (${stats.heapUsagePercent}%)`,
|
|
52
|
+
`RSS: ${stats.rss}MB`,
|
|
53
|
+
`External: ${stats.external}MB`,
|
|
54
|
+
`ArrayBuffers: ${stats.arrayBuffers}MB`,
|
|
55
|
+
].join(' | ');
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get a simple memory status string
|
|
59
|
+
*/
|
|
60
|
+
getMemoryStatus() {
|
|
61
|
+
const stats = this.getCurrentStats();
|
|
62
|
+
const status = this.getMemoryLevel(stats.heapUsagePercent);
|
|
63
|
+
const statusIcon = status === 'critical' ? '🔴' : status === 'warning' ? '🟡' : '🟢';
|
|
64
|
+
return `${statusIcon} Memory: ${stats.heapUsed}MB/${stats.heapLimit}MB (${stats.heapUsagePercent}%)`;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Start continuous memory monitoring
|
|
68
|
+
*/
|
|
69
|
+
startMonitoring(onAlert) {
|
|
70
|
+
if (this.isMonitoring) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
this.onAlert = onAlert;
|
|
74
|
+
this.isMonitoring = true;
|
|
75
|
+
// Initial stats
|
|
76
|
+
const initialStats = this.getCurrentStats();
|
|
77
|
+
console.log(`🔍 Memory Monitor Started - ${this.formatStats(initialStats)}`);
|
|
78
|
+
this.intervalId = setInterval(() => {
|
|
79
|
+
this.checkMemoryUsage();
|
|
80
|
+
}, this.MONITORING_INTERVAL);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Stop memory monitoring
|
|
84
|
+
*/
|
|
85
|
+
stopMonitoring() {
|
|
86
|
+
if (this.intervalId) {
|
|
87
|
+
clearInterval(this.intervalId);
|
|
88
|
+
this.intervalId = null;
|
|
89
|
+
}
|
|
90
|
+
this.isMonitoring = false;
|
|
91
|
+
console.log('🔍 Memory Monitor Stopped');
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Check current memory usage and generate alerts
|
|
95
|
+
*/
|
|
96
|
+
checkMemoryUsage() {
|
|
97
|
+
const stats = this.getCurrentStats();
|
|
98
|
+
const level = this.getMemoryLevel(stats.heapUsagePercent);
|
|
99
|
+
if (level !== 'info') {
|
|
100
|
+
const alert = {
|
|
101
|
+
level,
|
|
102
|
+
message: this.getAlertMessage(level, stats),
|
|
103
|
+
stats,
|
|
104
|
+
timestamp: Date.now(),
|
|
105
|
+
};
|
|
106
|
+
this.alerts.push(alert);
|
|
107
|
+
// Keep only last 50 alerts
|
|
108
|
+
if (this.alerts.length > 50) {
|
|
109
|
+
this.alerts = this.alerts.slice(-50);
|
|
110
|
+
}
|
|
111
|
+
if (this.onAlert) {
|
|
112
|
+
this.onAlert(alert);
|
|
113
|
+
}
|
|
114
|
+
// Log critical alerts immediately
|
|
115
|
+
if (level === 'critical') {
|
|
116
|
+
console.error(`🔴 CRITICAL MEMORY ALERT: ${alert.message}`);
|
|
117
|
+
console.error(` ${this.formatStats(stats)}`);
|
|
118
|
+
// Trigger garbage collection if available
|
|
119
|
+
if (global.gc) {
|
|
120
|
+
console.log('🗑️ Triggering garbage collection...');
|
|
121
|
+
global.gc();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
else if (level === 'warning') {
|
|
125
|
+
console.warn(`🟡 Memory Warning: ${alert.message}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Get memory level based on usage percentage
|
|
131
|
+
*/
|
|
132
|
+
getMemoryLevel(usagePercent) {
|
|
133
|
+
if (usagePercent >= this.CRITICAL_THRESHOLD) {
|
|
134
|
+
return 'critical';
|
|
135
|
+
}
|
|
136
|
+
else if (usagePercent >= this.WARNING_THRESHOLD) {
|
|
137
|
+
return 'warning';
|
|
138
|
+
}
|
|
139
|
+
return 'info';
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Generate alert message
|
|
143
|
+
*/
|
|
144
|
+
getAlertMessage(level, stats) {
|
|
145
|
+
if (level === 'critical') {
|
|
146
|
+
return `Memory usage critical at ${stats.heapUsagePercent}% (${stats.heapUsed}MB/${stats.heapLimit}MB). Consider reducing workload or increasing heap size.`;
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
return `Memory usage high at ${stats.heapUsagePercent}% (${stats.heapUsed}MB/${stats.heapLimit}MB). Monitor for potential issues.`;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Get recent alerts
|
|
154
|
+
*/
|
|
155
|
+
getRecentAlerts(count = 10) {
|
|
156
|
+
return this.alerts.slice(-count);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Clear all alerts
|
|
160
|
+
*/
|
|
161
|
+
clearAlerts() {
|
|
162
|
+
this.alerts = [];
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Get system memory information
|
|
166
|
+
*/
|
|
167
|
+
getSystemInfo() {
|
|
168
|
+
const totalMemory = Math.round(os.totalmem() / 1024 / 1024); // MB
|
|
169
|
+
const freeMemory = Math.round(os.freemem() / 1024 / 1024); // MB
|
|
170
|
+
const usedMemory = totalMemory - freeMemory;
|
|
171
|
+
const memoryUsagePercent = (usedMemory / totalMemory) * 100;
|
|
172
|
+
return {
|
|
173
|
+
totalMemory,
|
|
174
|
+
freeMemory,
|
|
175
|
+
usedMemory,
|
|
176
|
+
memoryUsagePercent: Math.round(memoryUsagePercent * 100) / 100,
|
|
177
|
+
nodeVersion: process.version,
|
|
178
|
+
platform: os.platform(),
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Generate a comprehensive memory report
|
|
183
|
+
*/
|
|
184
|
+
generateReport() {
|
|
185
|
+
const stats = this.getCurrentStats();
|
|
186
|
+
const systemInfo = this.getSystemInfo();
|
|
187
|
+
const recentAlerts = this.getRecentAlerts(5);
|
|
188
|
+
const report = [
|
|
189
|
+
'📊 MEMORY MONITORING REPORT',
|
|
190
|
+
'='.repeat(50),
|
|
191
|
+
'',
|
|
192
|
+
'🔧 System Information:',
|
|
193
|
+
` Platform: ${systemInfo.platform}`,
|
|
194
|
+
` Node.js: ${systemInfo.nodeVersion}`,
|
|
195
|
+
` Total System Memory: ${systemInfo.totalMemory}MB`,
|
|
196
|
+
` Free System Memory: ${systemInfo.freeMemory}MB`,
|
|
197
|
+
` System Memory Usage: ${systemInfo.memoryUsagePercent}%`,
|
|
198
|
+
'',
|
|
199
|
+
'💾 Current Heap Statistics:',
|
|
200
|
+
` Heap Used: ${stats.heapUsed}MB`,
|
|
201
|
+
` Heap Total: ${stats.heapTotal}MB`,
|
|
202
|
+
` Heap Limit: ${stats.heapLimit}MB`,
|
|
203
|
+
` Heap Usage: ${stats.heapUsagePercent}%`,
|
|
204
|
+
` RSS: ${stats.rss}MB`,
|
|
205
|
+
` External: ${stats.external}MB`,
|
|
206
|
+
` Array Buffers: ${stats.arrayBuffers}MB`,
|
|
207
|
+
'',
|
|
208
|
+
'🚨 Recent Alerts:',
|
|
209
|
+
];
|
|
210
|
+
if (recentAlerts.length === 0) {
|
|
211
|
+
report.push(' No recent alerts - memory usage is normal');
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
recentAlerts.forEach((alert) => {
|
|
215
|
+
const time = new Date(alert.timestamp).toLocaleTimeString();
|
|
216
|
+
const icon = alert.level === 'critical' ? '🔴' : '🟡';
|
|
217
|
+
report.push(` ${icon} [${time}] ${alert.level.toUpperCase()}: ${alert.message}`);
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
report.push('');
|
|
221
|
+
report.push('💡 Recommendations:');
|
|
222
|
+
if (stats.heapUsagePercent > 85) {
|
|
223
|
+
report.push(' - CRITICAL: Consider increasing heap size or reducing workload');
|
|
224
|
+
report.push(' - Run with: node --max-old-space-size=16384 (16GB)');
|
|
225
|
+
}
|
|
226
|
+
else if (stats.heapUsagePercent > 70) {
|
|
227
|
+
report.push(' - WARNING: Monitor memory usage closely');
|
|
228
|
+
report.push(' - Consider optimizing data structures or implementing cleanup');
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
report.push(' - Memory usage is within normal limits');
|
|
232
|
+
}
|
|
233
|
+
return report.join('\n');
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// Export singleton instance
|
|
237
|
+
export const memoryMonitor = MemoryMonitor.getInstance();
|
|
238
|
+
//# sourceMappingURL=memoryMonitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memoryMonitor.js","sourceRoot":"","sources":["../../../src/utils/memoryMonitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Check if we need to relaunch with better memory settings
|
|
8
|
+
*/
|
|
9
|
+
export declare function shouldRelaunchWithMemory(): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Relaunch the process with optimal memory settings
|
|
12
|
+
*/
|
|
13
|
+
export declare function relaunchWithOptimalMemory(): Promise<never>;
|
|
14
|
+
/**
|
|
15
|
+
* Ensure the process is running with optimal memory settings
|
|
16
|
+
* This should be called early in the application startup
|
|
17
|
+
*/
|
|
18
|
+
export declare function ensureOptimalMemory(): Promise<void>;
|