@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.
Files changed (153) hide show
  1. package/dist/assets/notification.mp3 +0 -0
  2. package/dist/package.json +2 -2
  3. package/dist/src/commands/voice.js +39 -34
  4. package/dist/src/commands/voice.js.map +1 -1
  5. package/dist/src/config/config.js +1 -4
  6. package/dist/src/config/config.js.map +1 -1
  7. package/dist/src/config/settings.d.ts +2 -0
  8. package/dist/src/config/settings.js +22 -1
  9. package/dist/src/config/settings.js.map +1 -1
  10. package/dist/src/config/settingsSchema.d.ts +36 -7
  11. package/dist/src/config/settingsSchema.js +35 -8
  12. package/dist/src/config/settingsSchema.js.map +1 -1
  13. package/dist/src/gemini.js +25 -20
  14. package/dist/src/gemini.js.map +1 -1
  15. package/dist/src/generated/git-commit.d.ts +2 -2
  16. package/dist/src/generated/git-commit.js +2 -2
  17. package/dist/src/services/BuiltinCommandLoader.js +2 -2
  18. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  19. package/dist/src/services/agentExecutor.d.ts +5 -0
  20. package/dist/src/services/agentExecutor.js +6 -2
  21. package/dist/src/services/agentExecutor.js.map +1 -1
  22. package/dist/src/services/voiceRecordingService.d.ts +13 -1
  23. package/dist/src/services/voiceRecordingService.js +38 -5
  24. package/dist/src/services/voiceRecordingService.js.map +1 -1
  25. package/dist/src/ui/App.js +255 -20
  26. package/dist/src/ui/App.js.map +1 -1
  27. package/dist/src/ui/commands/agentCommand.js +134 -43
  28. package/dist/src/ui/commands/agentCommand.js.map +1 -1
  29. package/dist/src/ui/commands/modelCommand.js +15 -2
  30. package/dist/src/ui/commands/modelCommand.js.map +1 -1
  31. package/dist/src/ui/commands/quitCommand.js +5 -0
  32. package/dist/src/ui/commands/quitCommand.js.map +1 -1
  33. package/dist/src/ui/commands/subAgentsCommand.d.ts +7 -0
  34. package/dist/src/ui/commands/subAgentsCommand.js +32 -0
  35. package/dist/src/ui/commands/subAgentsCommand.js.map +1 -0
  36. package/dist/src/ui/commands/types.d.ts +14 -3
  37. package/dist/src/ui/commands/types.js.map +1 -1
  38. package/dist/src/ui/commands/voiceCommand.js +70 -34
  39. package/dist/src/ui/commands/voiceCommand.js.map +1 -1
  40. package/dist/src/ui/commands/voiceCommand.test.d.ts +6 -0
  41. package/dist/src/ui/commands/voiceCommand.test.js +131 -0
  42. package/dist/src/ui/commands/voiceCommand.test.js.map +1 -0
  43. package/dist/src/ui/components/AgentModelSelector.js +1 -1
  44. package/dist/src/ui/components/AgentModelSelector.js.map +1 -1
  45. package/dist/src/ui/components/AgentSetDialog.d.ts +15 -0
  46. package/dist/src/ui/components/AgentSetDialog.js +52 -0
  47. package/dist/src/ui/components/AgentSetDialog.js.map +1 -0
  48. package/dist/src/ui/components/ApiKeyInputDialog.d.ts +17 -0
  49. package/dist/src/ui/components/ApiKeyInputDialog.js +44 -0
  50. package/dist/src/ui/components/ApiKeyInputDialog.js.map +1 -0
  51. package/dist/src/ui/components/AuthDialog.js +32 -46
  52. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  53. package/dist/src/ui/components/Footer.d.ts +6 -0
  54. package/dist/src/ui/components/Footer.js +17 -2
  55. package/dist/src/ui/components/Footer.js.map +1 -1
  56. package/dist/src/ui/components/GenericProviderKeyPrompt.js +1 -1
  57. package/dist/src/ui/components/GenericProviderKeyPrompt.js.map +1 -1
  58. package/dist/src/ui/components/Header.js +2 -9
  59. package/dist/src/ui/components/Header.js.map +1 -1
  60. package/dist/src/ui/components/HistoryBrowserDialog.js +2 -1
  61. package/dist/src/ui/components/HistoryBrowserDialog.js.map +1 -1
  62. package/dist/src/ui/components/InputPrompt.js +3 -1
  63. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  64. package/dist/src/ui/components/MemoryUsageDisplay.js +41 -8
  65. package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -1
  66. package/dist/src/ui/components/SettingsDialog.js +4 -3
  67. package/dist/src/ui/components/SettingsDialog.js.map +1 -1
  68. package/dist/src/ui/components/SuggestionsDisplay.js +3 -2
  69. package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
  70. package/dist/src/ui/components/Tips.js +1 -1
  71. package/dist/src/ui/components/Tips.js.map +1 -1
  72. package/dist/src/ui/components/agents/SingleAgentDialog.d.ts +7 -4
  73. package/dist/src/ui/components/agents/SingleAgentDialog.js +135 -63
  74. package/dist/src/ui/components/agents/SingleAgentDialog.js.map +1 -1
  75. package/dist/src/ui/components/messages/DiffRenderer.js +1 -9
  76. package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
  77. package/dist/src/ui/components/messages/ErrorMessage.js +2 -1
  78. package/dist/src/ui/components/messages/ErrorMessage.js.map +1 -1
  79. package/dist/src/ui/components/messages/InfoMessage.js +2 -1
  80. package/dist/src/ui/components/messages/InfoMessage.js.map +1 -1
  81. package/dist/src/ui/components/messages/ToolGroupMessage.js +4 -1
  82. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
  83. package/dist/src/ui/components/messages/UserMessage.js +1 -2
  84. package/dist/src/ui/components/messages/UserMessage.js.map +1 -1
  85. package/dist/src/ui/components/shared/RadioButtonSelect.js +14 -4
  86. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
  87. package/dist/src/ui/contexts/SessionContext.d.ts +18 -0
  88. package/dist/src/ui/contexts/SessionContext.js +25 -1
  89. package/dist/src/ui/contexts/SessionContext.js.map +1 -1
  90. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +2 -2
  91. package/dist/src/ui/hooks/slashCommandProcessor.js +54 -2
  92. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  93. package/dist/src/ui/hooks/useAgentCommandProcessor.d.ts +12 -2
  94. package/dist/src/ui/hooks/useAgentCommandProcessor.js +169 -4
  95. package/dist/src/ui/hooks/useAgentCommandProcessor.js.map +1 -1
  96. package/dist/src/ui/hooks/useAuthCommand.d.ts +2 -1
  97. package/dist/src/ui/hooks/useAuthCommand.js +22 -2
  98. package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
  99. package/dist/src/ui/hooks/useDialogClose.d.ts +2 -0
  100. package/dist/src/ui/hooks/useDialogClose.js +5 -0
  101. package/dist/src/ui/hooks/useDialogClose.js.map +1 -1
  102. package/dist/src/ui/hooks/useEncryptedStream.d.ts +2 -1
  103. package/dist/src/ui/hooks/useEncryptedStream.js +17 -4
  104. package/dist/src/ui/hooks/useEncryptedStream.js.map +1 -1
  105. package/dist/src/ui/hooks/useGeminiStream.js +216 -21
  106. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  107. package/dist/src/ui/hooks/useInputBoxColor.d.ts +13 -0
  108. package/dist/src/ui/hooks/useInputBoxColor.js +62 -0
  109. package/dist/src/ui/hooks/useInputBoxColor.js.map +1 -0
  110. package/dist/src/ui/hooks/useMessageQueue.d.ts +7 -1
  111. package/dist/src/ui/hooks/useMessageQueue.js +9 -3
  112. package/dist/src/ui/hooks/useMessageQueue.js.map +1 -1
  113. package/dist/src/ui/utils/agentConversationUtils.d.ts +28 -0
  114. package/dist/src/ui/utils/agentConversationUtils.js +71 -0
  115. package/dist/src/ui/utils/agentConversationUtils.js.map +1 -0
  116. package/dist/src/ui/utils/colorBlend.d.ts +33 -0
  117. package/dist/src/ui/utils/colorBlend.js +61 -0
  118. package/dist/src/ui/utils/colorBlend.js.map +1 -0
  119. package/dist/src/ui/utils/commandUtils.d.ts +2 -1
  120. package/dist/src/ui/utils/commandUtils.js +14 -1
  121. package/dist/src/ui/utils/commandUtils.js.map +1 -1
  122. package/dist/src/ui/utils/commandUtils.test.js +25 -0
  123. package/dist/src/ui/utils/commandUtils.test.js.map +1 -1
  124. package/dist/src/ui/utils/terminalBackgroundDetector.d.ts +16 -0
  125. package/dist/src/ui/utils/terminalBackgroundDetector.js +124 -23
  126. package/dist/src/ui/utils/terminalBackgroundDetector.js.map +1 -1
  127. package/dist/src/utils/agentCommandBuilder.d.ts +16 -4
  128. package/dist/src/utils/agentCommandBuilder.js +66 -26
  129. package/dist/src/utils/agentCommandBuilder.js.map +1 -1
  130. package/dist/src/utils/apiKeyUtils.d.ts +47 -0
  131. package/dist/src/utils/apiKeyUtils.js +177 -0
  132. package/dist/src/utils/apiKeyUtils.js.map +1 -0
  133. package/dist/src/utils/backgroundUpdateCheck.js +104 -7
  134. package/dist/src/utils/backgroundUpdateCheck.js.map +1 -1
  135. package/dist/src/utils/memoryManager.d.ts +85 -0
  136. package/dist/src/utils/memoryManager.js +258 -0
  137. package/dist/src/utils/memoryManager.js.map +1 -0
  138. package/dist/src/utils/memoryMonitor.d.ts +89 -0
  139. package/dist/src/utils/memoryMonitor.js +238 -0
  140. package/dist/src/utils/memoryMonitor.js.map +1 -0
  141. package/dist/src/utils/memoryWrapper.d.ts +18 -0
  142. package/dist/src/utils/memoryWrapper.js +62 -0
  143. package/dist/src/utils/memoryWrapper.js.map +1 -0
  144. package/dist/src/utils/preLaunchUpdateCheck.js +17 -7
  145. package/dist/src/utils/preLaunchUpdateCheck.js.map +1 -1
  146. package/dist/src/utils/soundNotification.d.ts +15 -0
  147. package/dist/src/utils/soundNotification.js +138 -0
  148. package/dist/src/utils/soundNotification.js.map +1 -0
  149. package/dist/src/utils/versionStorage.d.ts +20 -0
  150. package/dist/src/utils/versionStorage.js +62 -0
  151. package/dist/src/utils/versionStorage.js.map +1 -1
  152. package/dist/tsconfig.tsbuildinfo +1 -1
  153. package/package.json +2 -2
@@ -0,0 +1,177 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Blackbox
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { SettingScope } from '../config/settings.js';
7
+ /**
8
+ * Mapping of agent types to their API key requirements
9
+ */
10
+ export const AGENT_API_KEY_MAP = {
11
+ blackbox: {
12
+ envVarName: 'BLACKBOX_API_KEY',
13
+ settingsPath: 'security.auth.blackbox.apiKey',
14
+ displayName: 'Blackbox API Key',
15
+ placeholder: 'Enter your Blackbox API key...',
16
+ validator: (key) => key.length > 0 && !key.includes(' '),
17
+ description: 'Blackbox API key required for Blackbox CLI',
18
+ },
19
+ claude: {
20
+ envVarName: 'BLACKBOX_API_KEY', // Claude uses Blackbox API key
21
+ settingsPath: 'security.auth.blackbox.apiKey',
22
+ displayName: 'Blackbox API Key (for Claude Code)',
23
+ placeholder: 'Enter your Blackbox API key...',
24
+ validator: (key) => key.length > 0 && !key.includes(' '),
25
+ description: 'Blackbox API key required for Claude Code agent access',
26
+ },
27
+ codex: {
28
+ envVarName: 'OPENAI_API_KEY', // Primary, but can also use BLACKBOX_API_KEY
29
+ settingsPath: 'security.auth.openai.apiKey',
30
+ displayName: 'OpenAI API Key',
31
+ placeholder: 'sk-...',
32
+ validator: (key) => key.startsWith('sk-') && key.length > 20,
33
+ description: 'OpenAI API key required for Codex agent (or use Blackbox API key)',
34
+ },
35
+ gemini: {
36
+ envVarName: 'GEMINI_API_KEY',
37
+ settingsPath: 'security.auth.google.apiKey',
38
+ displayName: 'Gemini API Key',
39
+ placeholder: 'Enter your Gemini API key...',
40
+ validator: (key) => key.length > 0 && !key.includes(' '),
41
+ description: 'Google Gemini API key required for Gemini agent',
42
+ },
43
+ };
44
+ /**
45
+ * Check if an API key is available for the given agent type
46
+ * Checks both environment variables and settings
47
+ */
48
+ export function hasApiKeyForAgent(agentType, settings) {
49
+ const keyInfo = AGENT_API_KEY_MAP[agentType];
50
+ if (!keyInfo)
51
+ return false;
52
+ // Check environment variable first
53
+ const envKey = process.env[keyInfo.envVarName];
54
+ if (envKey && keyInfo.validator(envKey)) {
55
+ return true;
56
+ }
57
+ // For Codex, also check for BLACKBOX_API_KEY as fallback
58
+ if (agentType === 'codex') {
59
+ const blackboxKey = process.env['BLACKBOX_API_KEY'];
60
+ if (blackboxKey && blackboxKey.length > 0) {
61
+ return true;
62
+ }
63
+ }
64
+ // Check settings if available
65
+ if (settings) {
66
+ const settingsKey = getApiKeyFromSettings(agentType, settings);
67
+ if (settingsKey && keyInfo.validator(settingsKey)) {
68
+ return true;
69
+ }
70
+ // For Codex, also check Blackbox key in settings as fallback
71
+ if (agentType === 'codex') {
72
+ const blackboxSettingsKey = getApiKeyFromSettings('blackbox', settings);
73
+ if (blackboxSettingsKey && blackboxSettingsKey.length > 0) {
74
+ return true;
75
+ }
76
+ }
77
+ }
78
+ return false;
79
+ }
80
+ /**
81
+ * Get API key from settings for the given agent type
82
+ */
83
+ export function getApiKeyFromSettings(agentType, settings) {
84
+ const keyInfo = AGENT_API_KEY_MAP[agentType];
85
+ if (!keyInfo)
86
+ return undefined;
87
+ const pathParts = keyInfo.settingsPath.split('.');
88
+ let current = settings.merged;
89
+ for (const part of pathParts) {
90
+ if (current && typeof current === 'object' && current !== null && part in current) {
91
+ current = current[part];
92
+ }
93
+ else {
94
+ return undefined;
95
+ }
96
+ }
97
+ return typeof current === 'string' ? current : undefined;
98
+ }
99
+ /**
100
+ * Get the effective API key for an agent (env var takes precedence over settings)
101
+ */
102
+ export function getEffectiveApiKey(agentType, settings) {
103
+ const keyInfo = AGENT_API_KEY_MAP[agentType];
104
+ if (!keyInfo)
105
+ return undefined;
106
+ // Environment variable takes precedence
107
+ const envKey = process.env[keyInfo.envVarName];
108
+ if (envKey && keyInfo.validator(envKey)) {
109
+ return envKey;
110
+ }
111
+ // For Codex, check BLACKBOX_API_KEY as fallback
112
+ if (agentType === 'codex') {
113
+ const blackboxKey = process.env['BLACKBOX_API_KEY'];
114
+ if (blackboxKey && blackboxKey.length > 0) {
115
+ return blackboxKey;
116
+ }
117
+ }
118
+ // Fall back to settings
119
+ if (settings) {
120
+ const settingsKey = getApiKeyFromSettings(agentType, settings);
121
+ if (settingsKey && keyInfo.validator(settingsKey)) {
122
+ return settingsKey;
123
+ }
124
+ // For Codex, also check Blackbox key in settings as fallback
125
+ if (agentType === 'codex') {
126
+ const blackboxSettingsKey = getApiKeyFromSettings('blackbox', settings);
127
+ if (blackboxSettingsKey && blackboxSettingsKey.length > 0) {
128
+ return blackboxSettingsKey;
129
+ }
130
+ }
131
+ }
132
+ return undefined;
133
+ }
134
+ /**
135
+ * Save API key to settings for the given agent type
136
+ */
137
+ export function saveApiKeyToSettings(agentType, apiKey, settings) {
138
+ const keyInfo = AGENT_API_KEY_MAP[agentType];
139
+ if (!keyInfo) {
140
+ throw new Error(`Unknown agent type: ${agentType}`);
141
+ }
142
+ if (!keyInfo.validator(apiKey)) {
143
+ throw new Error(`Invalid API key format for ${agentType}`);
144
+ }
145
+ // Save to the appropriate settings path
146
+ settings.setValue(SettingScope.User, keyInfo.settingsPath, apiKey);
147
+ }
148
+ /**
149
+ * Get missing API key info for agents that don't have keys
150
+ */
151
+ export function getMissingApiKeyInfo(agentTypes, settings) {
152
+ return agentTypes
153
+ .filter(agentType => !hasApiKeyForAgent(agentType, settings))
154
+ .map(agentType => AGENT_API_KEY_MAP[agentType])
155
+ .filter(Boolean);
156
+ }
157
+ /**
158
+ * Validate API key format for a specific agent type
159
+ */
160
+ export function validateApiKey(agentType, apiKey) {
161
+ const keyInfo = AGENT_API_KEY_MAP[agentType];
162
+ if (!keyInfo) {
163
+ return { valid: false, error: `Unknown agent type: ${agentType}` };
164
+ }
165
+ if (!apiKey || apiKey.trim().length === 0) {
166
+ return { valid: false, error: 'API key cannot be empty' };
167
+ }
168
+ const trimmedKey = apiKey.trim();
169
+ if (!keyInfo.validator(trimmedKey)) {
170
+ if (agentType === 'codex') {
171
+ return { valid: false, error: 'OpenAI API key must start with "sk-" and be at least 20 characters long' };
172
+ }
173
+ return { valid: false, error: `Invalid ${keyInfo.displayName} format` };
174
+ }
175
+ return { valid: true };
176
+ }
177
+ //# sourceMappingURL=apiKeyUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiKeyUtils.js","sourceRoot":"","sources":["../../../src/utils/apiKeyUtils.ts"],"names":[],"mappings":"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"}
@@ -3,32 +3,122 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { getCurrentVersion, fetchLatestVersionFromAPI, getPlatformString, writePendingUpdate, } from './versionStorage.js';
6
+ import { getCurrentVersion, fetchLatestVersionFromAPI, getPlatformString, writePendingUpdate, shouldCheckForUpdate, writeLastCheck, } from './versionStorage.js';
7
7
  import semver from 'semver';
8
+ /**
9
+ * Fetches the latest version with retry logic
10
+ * @param platform Platform string
11
+ * @param maxRetries Maximum number of retry attempts
12
+ * @param timeoutMs Timeout in milliseconds for each attempt
13
+ * @returns Latest version string or null if all attempts fail
14
+ */
15
+ async function fetchLatestVersionWithRetry(platform, maxRetries = 2, timeoutMs = 7000) {
16
+ const debugMode = process.env['DEBUG'] === 'true';
17
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
18
+ try {
19
+ if (debugMode) {
20
+ console.debug(`[Update Check] Attempt ${attempt}/${maxRetries} to fetch latest version...`);
21
+ }
22
+ const latestVersion = await fetchLatestVersionFromAPI(platform, timeoutMs);
23
+ if (latestVersion) {
24
+ if (debugMode) {
25
+ console.debug(`[Update Check] Successfully fetched latest version: ${latestVersion}`);
26
+ }
27
+ return latestVersion;
28
+ }
29
+ if (debugMode) {
30
+ console.debug(`[Update Check] Attempt ${attempt} returned null, retrying...`);
31
+ }
32
+ }
33
+ catch (error) {
34
+ if (debugMode) {
35
+ console.debug(`[Update Check] Attempt ${attempt} failed:`, error);
36
+ }
37
+ // If this is not the last attempt, wait before retrying with exponential backoff
38
+ if (attempt < maxRetries) {
39
+ const backoffMs = 1000 * Math.pow(2, attempt - 1); // 1s, 2s, 4s...
40
+ if (debugMode) {
41
+ console.debug(`[Update Check] Waiting ${backoffMs}ms before retry...`);
42
+ }
43
+ await new Promise(resolve => setTimeout(resolve, backoffMs));
44
+ }
45
+ }
46
+ }
47
+ if (debugMode) {
48
+ console.debug(`[Update Check] All ${maxRetries} attempts failed`);
49
+ }
50
+ return null;
51
+ }
8
52
  /**
9
53
  * Performs a background check for updates without blocking CLI startup
10
54
  * If an update is found, it stores the information for the next CLI launch
11
55
  */
12
56
  export async function backgroundUpdateCheck() {
57
+ const debugMode = process.env['DEBUG'] === 'true';
13
58
  try {
59
+ // Check if enough time has passed since last check (default: 1 hour)
60
+ if (!shouldCheckForUpdate()) {
61
+ if (debugMode) {
62
+ console.debug('[Update Check] Skipping check - not enough time has passed since last check');
63
+ }
64
+ return;
65
+ }
66
+ if (debugMode) {
67
+ console.debug('[Update Check] Starting background update check...');
68
+ }
14
69
  // Get current and latest versions
15
70
  const currentVersion = await getCurrentVersion();
16
71
  if (!currentVersion) {
72
+ if (debugMode) {
73
+ console.debug('[Update Check] Could not determine current version');
74
+ }
75
+ writeLastCheck(false);
17
76
  return;
18
77
  }
78
+ if (debugMode) {
79
+ console.debug(`[Update Check] Current version: ${currentVersion}`);
80
+ }
19
81
  const platform = getPlatformString();
20
- const latestVersion = await fetchLatestVersionFromAPI(platform);
21
- // If we can't fetch the latest version, silently fail
82
+ if (debugMode) {
83
+ console.debug(`[Update Check] Platform: ${platform}`);
84
+ }
85
+ // Fetch latest version with retry logic (2 attempts, 7 second timeout each)
86
+ const latestVersion = await fetchLatestVersionWithRetry(platform, 2, 7000);
87
+ // If we can't fetch the latest version, record failed check
22
88
  if (!latestVersion) {
89
+ if (debugMode) {
90
+ console.debug('[Update Check] Failed to fetch latest version after all retries');
91
+ }
92
+ writeLastCheck(false);
23
93
  return;
24
94
  }
95
+ if (debugMode) {
96
+ console.debug(`[Update Check] Latest version: ${latestVersion}`);
97
+ }
25
98
  // Check if update is available
26
99
  if (semver.gt(latestVersion, currentVersion)) {
100
+ if (debugMode) {
101
+ console.debug(`[Update Check] Update available: ${currentVersion} -> ${latestVersion}`);
102
+ }
27
103
  // Store the pending update for next launch
28
- writePendingUpdate(latestVersion);
104
+ const written = writePendingUpdate(latestVersion);
105
+ if (debugMode) {
106
+ console.debug(`[Update Check] Pending update ${written ? 'written' : 'failed to write'}`);
107
+ }
108
+ writeLastCheck(true);
109
+ }
110
+ else {
111
+ if (debugMode) {
112
+ console.debug('[Update Check] Already on latest version');
113
+ }
114
+ writeLastCheck(true);
29
115
  }
30
116
  }
31
- catch (_error) {
117
+ catch (error) {
118
+ if (debugMode) {
119
+ console.debug('[Update Check] Unexpected error:', error);
120
+ }
121
+ writeLastCheck(false);
32
122
  // Silently fail - don't disrupt the CLI
33
123
  }
34
124
  }
@@ -37,11 +127,18 @@ export async function backgroundUpdateCheck() {
37
127
  * This should be called after the CLI has started
38
128
  */
39
129
  export function startBackgroundUpdateCheck() {
130
+ const debugMode = process.env['DEBUG'] === 'true';
131
+ if (debugMode) {
132
+ console.debug('[Update Check] Scheduling background update check...');
133
+ }
40
134
  // Run the check in the background without awaiting
41
135
  // Use setImmediate to ensure it runs after current event loop
42
136
  setImmediate(() => {
43
- backgroundUpdateCheck().catch(() => {
44
- // Silently ignore errors
137
+ backgroundUpdateCheck().catch((error) => {
138
+ if (debugMode) {
139
+ console.debug('[Update Check] Background check failed:', error);
140
+ }
141
+ // Silently ignore errors in production
45
142
  });
46
143
  });
47
144
  }
@@ -1 +1 @@
1
- {"version":3,"file":"backgroundUpdateCheck.js","sourceRoot":"","sources":["../../../src/utils/backgroundUpdateCheck.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,IAAI,CAAC;QACH,kCAAkC;QAClC,MAAM,cAAc,GAAG,MAAM,iBAAiB,EAAE,CAAC;QACjD,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;QACrC,MAAM,aAAa,GAAG,MAAM,yBAAyB,CAAC,QAAQ,CAAC,CAAC;QAEhE,sDAAsD;QACtD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,+BAA+B;QAC/B,IAAI,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC,EAAE,CAAC;YAC7C,2CAA2C;YAC3C,kBAAkB,CAAC,aAAa,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,wCAAwC;IAC1C,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B;IACxC,mDAAmD;IACnD,8DAA8D;IAC9D,YAAY,CAAC,GAAG,EAAE;QAChB,qBAAqB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;YACjC,yBAAyB;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"backgroundUpdateCheck.js","sourceRoot":"","sources":["../../../src/utils/backgroundUpdateCheck.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { Config } from '@blackbox_ai/blackbox-cli-core';
7
+ /**
8
+ * Memory statistics interface
9
+ */
10
+ export interface MemoryStats {
11
+ heapUsed: number;
12
+ heapTotal: number;
13
+ heapLimit: number;
14
+ external: number;
15
+ rss: number;
16
+ usagePercentage: number;
17
+ pressureLevel: 'normal' | 'warning' | 'critical' | 'emergency';
18
+ }
19
+ /**
20
+ * Memory cleanup callback type
21
+ */
22
+ export type MemoryCleanupCallback = () => void | Promise<void>;
23
+ /**
24
+ * Memory manager class for handling memory optimization and monitoring
25
+ */
26
+ export declare class MemoryManager {
27
+ private cleanupCallbacks;
28
+ private monitoringInterval?;
29
+ private lastGcTime;
30
+ private gcThrottleMs;
31
+ private config?;
32
+ constructor(config?: Config);
33
+ /**
34
+ * Get optimal heap size arguments for Node.js
35
+ */
36
+ static getOptimalHeapArgs(config?: Config): string[];
37
+ /**
38
+ * Get current memory statistics
39
+ */
40
+ getMemoryStats(): MemoryStats;
41
+ /**
42
+ * Register a cleanup callback to be called during memory pressure
43
+ */
44
+ registerCleanupCallback(callback: MemoryCleanupCallback): () => void;
45
+ /**
46
+ * Force garbage collection if enough time has passed
47
+ */
48
+ forceGarbageCollection(): boolean;
49
+ /**
50
+ * Run cleanup callbacks
51
+ */
52
+ runCleanupCallbacks(): Promise<void>;
53
+ /**
54
+ * Handle memory pressure by running cleanup and forcing GC
55
+ */
56
+ handleMemoryPressure(): Promise<void>;
57
+ /**
58
+ * Start memory monitoring
59
+ */
60
+ startMonitoring(intervalMs?: number): void;
61
+ /**
62
+ * Stop memory monitoring
63
+ */
64
+ stopMonitoring(): void;
65
+ /**
66
+ * Get formatted memory usage string
67
+ */
68
+ getFormattedMemoryUsage(): string;
69
+ /**
70
+ * Cleanup and destroy the memory manager
71
+ */
72
+ destroy(): void;
73
+ }
74
+ /**
75
+ * Get or create the global memory manager
76
+ */
77
+ export declare function getMemoryManager(config?: Config): MemoryManager;
78
+ /**
79
+ * Initialize memory management with optimal settings
80
+ */
81
+ export declare function initializeMemoryManagement(config?: Config): MemoryManager;
82
+ /**
83
+ * Utility function to create a memory-aware cleanup callback
84
+ */
85
+ export declare function createMemoryCleanupCallback(cleanupFn: () => void | Promise<void>, description?: string): MemoryCleanupCallback;