@blackbox_ai/blackbox-cli-core 0.0.9 → 0.8.1

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 (247) hide show
  1. package/README.md +11 -183
  2. package/dist/index.d.ts +2 -1
  3. package/dist/index.js +2 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/blackbox/blackboxOAuth2.js +17 -1
  6. package/dist/src/blackbox/blackboxOAuth2.js.map +1 -1
  7. package/dist/src/code_assist/oauth2.js +15 -3
  8. package/dist/src/code_assist/oauth2.js.map +1 -1
  9. package/dist/src/config/blackboxModels.d.ts +3 -2
  10. package/dist/src/config/blackboxModels.js +262 -33
  11. package/dist/src/config/blackboxModels.js.map +1 -1
  12. package/dist/src/config/config.d.ts +65 -0
  13. package/dist/src/config/config.js +282 -17
  14. package/dist/src/config/config.js.map +1 -1
  15. package/dist/src/config/models.d.ts +1 -1
  16. package/dist/src/config/models.js +1 -1
  17. package/dist/src/config/models.js.map +1 -1
  18. package/dist/src/config/multiAgentModels.d.ts +63 -0
  19. package/dist/src/config/multiAgentModels.js +194 -0
  20. package/dist/src/config/multiAgentModels.js.map +1 -0
  21. package/dist/src/core/client.js +8 -2
  22. package/dist/src/core/client.js.map +1 -1
  23. package/dist/src/core/contentGenerator.d.ts +1 -0
  24. package/dist/src/core/contentGenerator.js +57 -7
  25. package/dist/src/core/contentGenerator.js.map +1 -1
  26. package/dist/src/core/encryptedClientFactory.d.ts +17 -0
  27. package/dist/src/core/encryptedClientFactory.js +92 -0
  28. package/dist/src/core/encryptedClientFactory.js.map +1 -0
  29. package/dist/src/core/encryptedContentGenerator.d.ts +47 -0
  30. package/dist/src/core/encryptedContentGenerator.js +445 -0
  31. package/dist/src/core/encryptedContentGenerator.js.map +1 -0
  32. package/dist/src/core/encryptedGeminiClient.d.ts +59 -0
  33. package/dist/src/core/encryptedGeminiClient.js +177 -0
  34. package/dist/src/core/encryptedGeminiClient.js.map +1 -0
  35. package/dist/src/core/encryptedGeminiClientBridge.d.ts +107 -0
  36. package/dist/src/core/encryptedGeminiClientBridge.js +808 -0
  37. package/dist/src/core/encryptedGeminiClientBridge.js.map +1 -0
  38. package/dist/src/core/encryptedGeminiClientWrapper.d.ts +129 -0
  39. package/dist/src/core/encryptedGeminiClientWrapper.js +305 -0
  40. package/dist/src/core/encryptedGeminiClientWrapper.js.map +1 -0
  41. package/dist/src/core/encryptedTurn.d.ts +40 -0
  42. package/dist/src/core/encryptedTurn.js +114 -0
  43. package/dist/src/core/encryptedTurn.js.map +1 -0
  44. package/dist/src/core/logger.d.ts +21 -0
  45. package/dist/src/core/logger.js +110 -0
  46. package/dist/src/core/logger.js.map +1 -1
  47. package/dist/src/core/openaiContentGenerator/constants.d.ts +2 -0
  48. package/dist/src/core/openaiContentGenerator/constants.js +2 -0
  49. package/dist/src/core/openaiContentGenerator/constants.js.map +1 -1
  50. package/dist/src/core/openaiContentGenerator/converter.d.ts +16 -1
  51. package/dist/src/core/openaiContentGenerator/converter.js +135 -4
  52. package/dist/src/core/openaiContentGenerator/converter.js.map +1 -1
  53. package/dist/src/core/openaiContentGenerator/pipeline.js +6 -2
  54. package/dist/src/core/openaiContentGenerator/pipeline.js.map +1 -1
  55. package/dist/src/core/openaiContentGenerator/provider/default.js +10 -1
  56. package/dist/src/core/openaiContentGenerator/provider/default.js.map +1 -1
  57. package/dist/src/core/prompts.d.ts +17 -0
  58. package/dist/src/core/prompts.js +347 -19
  59. package/dist/src/core/prompts.js.map +1 -1
  60. package/dist/src/core/tokenLimits.d.ts +1 -0
  61. package/dist/src/core/tokenLimits.js +37 -2
  62. package/dist/src/core/tokenLimits.js.map +1 -1
  63. package/dist/src/core/tokenLimits.test.js +36 -1
  64. package/dist/src/core/tokenLimits.test.js.map +1 -1
  65. package/dist/src/encrypt/attestation.d.ts +5 -0
  66. package/dist/src/encrypt/attestation.js +100 -0
  67. package/dist/src/encrypt/attestation.js.map +1 -0
  68. package/dist/src/encrypt/client.d.ts +14 -0
  69. package/dist/src/encrypt/client.js +132 -0
  70. package/dist/src/encrypt/client.js.map +1 -0
  71. package/dist/src/encrypt/config.d.ts +22 -0
  72. package/dist/src/encrypt/config.js +43 -0
  73. package/dist/src/encrypt/config.js.map +1 -0
  74. package/dist/src/encrypt/crypto-utils.d.ts +57 -0
  75. package/dist/src/encrypt/crypto-utils.js +257 -0
  76. package/dist/src/encrypt/crypto-utils.js.map +1 -0
  77. package/dist/src/encrypt/history-manager.d.ts +43 -0
  78. package/dist/src/encrypt/history-manager.js +164 -0
  79. package/dist/src/encrypt/history-manager.js.map +1 -0
  80. package/dist/src/encrypt/minimax-template.d.ts +73 -0
  81. package/dist/src/encrypt/minimax-template.js +276 -0
  82. package/dist/src/encrypt/minimax-template.js.map +1 -0
  83. package/dist/src/encrypt/sessions.d.ts +17 -0
  84. package/dist/src/encrypt/sessions.js +221 -0
  85. package/dist/src/encrypt/sessions.js.map +1 -0
  86. package/dist/src/encrypt/streaming-client.d.ts +29 -0
  87. package/dist/src/encrypt/streaming-client.js +232 -0
  88. package/dist/src/encrypt/streaming-client.js.map +1 -0
  89. package/dist/src/encrypt/tool-formatter.d.ts +36 -0
  90. package/dist/src/encrypt/tool-formatter.js +353 -0
  91. package/dist/src/encrypt/tool-formatter.js.map +1 -0
  92. package/dist/src/encrypt/tool-parser.d.ts +93 -0
  93. package/dist/src/encrypt/tool-parser.js +567 -0
  94. package/dist/src/encrypt/tool-parser.js.map +1 -0
  95. package/dist/src/encrypt/types.d.ts +81 -0
  96. package/dist/src/encrypt/types.js +2 -0
  97. package/dist/src/encrypt/types.js.map +1 -0
  98. package/dist/src/generated/git-commit.d.ts +3 -3
  99. package/dist/src/generated/git-commit.js +3 -3
  100. package/dist/src/ide/ide-client.js +9 -19
  101. package/dist/src/ide/ide-client.js.map +1 -1
  102. package/dist/src/index.d.ts +15 -0
  103. package/dist/src/index.js +15 -0
  104. package/dist/src/index.js.map +1 -1
  105. package/dist/src/mcp/oauth-provider.js +2 -6
  106. package/dist/src/mcp/oauth-provider.js.map +1 -1
  107. package/dist/src/mcp/oauth-token-storage.d.ts +7 -0
  108. package/dist/src/mcp/oauth-token-storage.js +24 -0
  109. package/dist/src/mcp/oauth-token-storage.js.map +1 -1
  110. package/dist/src/services/EncryptedChatService.d.ts +80 -0
  111. package/dist/src/services/EncryptedChatService.js +202 -0
  112. package/dist/src/services/EncryptedChatService.js.map +1 -0
  113. package/dist/src/services/StatsHistoryService.d.ts +131 -0
  114. package/dist/src/services/StatsHistoryService.js +427 -0
  115. package/dist/src/services/StatsHistoryService.js.map +1 -0
  116. package/dist/src/services/checkpointApiService.d.ts +101 -0
  117. package/dist/src/services/checkpointApiService.js +215 -0
  118. package/dist/src/services/checkpointApiService.js.map +1 -0
  119. package/dist/src/services/environmentSanitization.d.ts +24 -0
  120. package/dist/src/services/environmentSanitization.js +152 -0
  121. package/dist/src/services/environmentSanitization.js.map +1 -0
  122. package/dist/src/telemetry/blackbox-logger/blackbox-logger.d.ts +2 -6
  123. package/dist/src/telemetry/blackbox-logger/blackbox-logger.js +29 -135
  124. package/dist/src/telemetry/blackbox-logger/blackbox-logger.js.map +1 -1
  125. package/dist/src/telemetry/blackbox-logger/blackbox-logger.test.js +1 -1
  126. package/dist/src/telemetry/blackbox-logger/blackbox-logger.test.js.map +1 -1
  127. package/dist/src/telemetry/uiTelemetry.d.ts +8 -0
  128. package/dist/src/telemetry/uiTelemetry.js +17 -0
  129. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  130. package/dist/src/tools/browser-interactive.d.ts +63 -0
  131. package/dist/src/tools/browser-interactive.js +394 -0
  132. package/dist/src/tools/browser-interactive.js.map +1 -0
  133. package/dist/src/tools/browser_use.d.ts +22 -1
  134. package/dist/src/tools/browser_use.js +403 -23
  135. package/dist/src/tools/browser_use.js.map +1 -1
  136. package/dist/src/tools/data-file-constants.d.ts +17 -0
  137. package/dist/src/tools/data-file-constants.js +30 -0
  138. package/dist/src/tools/data-file-constants.js.map +1 -0
  139. package/dist/src/tools/edit.js +44 -7
  140. package/dist/src/tools/edit.js.map +1 -1
  141. package/dist/src/tools/ls.js +40 -6
  142. package/dist/src/tools/ls.js.map +1 -1
  143. package/dist/src/tools/ls.test.js +4 -4
  144. package/dist/src/tools/ls.test.js.map +1 -1
  145. package/dist/src/tools/mcp-client-manager.d.ts +28 -2
  146. package/dist/src/tools/mcp-client-manager.js +62 -4
  147. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  148. package/dist/src/tools/mcp-client.d.ts +5 -3
  149. package/dist/src/tools/mcp-client.js +39 -11
  150. package/dist/src/tools/mcp-client.js.map +1 -1
  151. package/dist/src/tools/mcp-tool.d.ts +3 -1
  152. package/dist/src/tools/mcp-tool.js +37 -9
  153. package/dist/src/tools/mcp-tool.js.map +1 -1
  154. package/dist/src/tools/memoryTool.d.ts +14 -4
  155. package/dist/src/tools/memoryTool.js +98 -39
  156. package/dist/src/tools/memoryTool.js.map +1 -1
  157. package/dist/src/tools/read-data-file.d.ts +31 -0
  158. package/dist/src/tools/read-data-file.js +469 -0
  159. package/dist/src/tools/read-data-file.js.map +1 -0
  160. package/dist/src/tools/read-file.js +64 -5
  161. package/dist/src/tools/read-file.js.map +1 -1
  162. package/dist/src/tools/read-file.test.js +40 -6
  163. package/dist/src/tools/read-file.test.js.map +1 -1
  164. package/dist/src/tools/shell.d.ts +3 -1
  165. package/dist/src/tools/shell.js +25 -4
  166. package/dist/src/tools/shell.js.map +1 -1
  167. package/dist/src/tools/skill.d.ts +34 -0
  168. package/dist/src/tools/skill.js +143 -0
  169. package/dist/src/tools/skill.js.map +1 -0
  170. package/dist/src/tools/sql_db.d.ts +101 -0
  171. package/dist/src/tools/sql_db.js +1033 -0
  172. package/dist/src/tools/sql_db.js.map +1 -0
  173. package/dist/src/tools/sql_db_configure.d.ts +18 -0
  174. package/dist/src/tools/sql_db_configure.js +96 -0
  175. package/dist/src/tools/sql_db_configure.js.map +1 -0
  176. package/dist/src/tools/taskCompletion.d.ts +29 -0
  177. package/dist/src/tools/taskCompletion.js +231 -0
  178. package/dist/src/tools/taskCompletion.js.map +1 -0
  179. package/dist/src/tools/tool-error.d.ts +3 -1
  180. package/dist/src/tools/tool-error.js +3 -0
  181. package/dist/src/tools/tool-error.js.map +1 -1
  182. package/dist/src/tools/tool-names.d.ts +8 -0
  183. package/dist/src/tools/tool-names.js +8 -0
  184. package/dist/src/tools/tool-names.js.map +1 -1
  185. package/dist/src/tools/tool-registry.d.ts +22 -0
  186. package/dist/src/tools/tool-registry.js +41 -1
  187. package/dist/src/tools/tool-registry.js.map +1 -1
  188. package/dist/src/tools/tools.d.ts +18 -2
  189. package/dist/src/tools/tools.js +3 -0
  190. package/dist/src/tools/tools.js.map +1 -1
  191. package/dist/src/tools/web-fetch.js +24 -4
  192. package/dist/src/tools/web-fetch.js.map +1 -1
  193. package/dist/src/tools/web-search.js +160 -2
  194. package/dist/src/tools/web-search.js.map +1 -1
  195. package/dist/src/tools/workspace-error-helper.d.ts +9 -0
  196. package/dist/src/tools/workspace-error-helper.js +43 -0
  197. package/dist/src/tools/workspace-error-helper.js.map +1 -0
  198. package/dist/src/tools/workspace-error-helper.test.js +85 -0
  199. package/dist/src/tools/workspace-error-helper.test.js.map +1 -0
  200. package/dist/src/tools/write-file.js +42 -7
  201. package/dist/src/tools/write-file.js.map +1 -1
  202. package/dist/src/utils/environmentContext.js +3 -1
  203. package/dist/src/utils/environmentContext.js.map +1 -1
  204. package/dist/src/utils/environmentContext.test.js +3 -2
  205. package/dist/src/utils/environmentContext.test.js.map +1 -1
  206. package/dist/src/utils/fetch.d.ts +3 -1
  207. package/dist/src/utils/fetch.js +35 -2
  208. package/dist/src/utils/fetch.js.map +1 -1
  209. package/dist/src/utils/fileUtils.js +30 -3
  210. package/dist/src/utils/fileUtils.js.map +1 -1
  211. package/dist/src/utils/filesearch/fileSearch.d.ts +2 -0
  212. package/dist/src/utils/filesearch/fileSearch.js +38 -7
  213. package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
  214. package/dist/src/utils/git-worktree-utils.d.ts +56 -0
  215. package/dist/src/utils/git-worktree-utils.js +176 -0
  216. package/dist/src/utils/git-worktree-utils.js.map +1 -0
  217. package/dist/src/utils/imageCompression.d.ts +34 -0
  218. package/dist/src/utils/imageCompression.js +170 -0
  219. package/dist/src/utils/imageCompression.js.map +1 -0
  220. package/dist/src/utils/messageTruncator.d.ts +51 -0
  221. package/dist/src/utils/messageTruncator.js +346 -0
  222. package/dist/src/utils/messageTruncator.js.map +1 -0
  223. package/dist/src/utils/pathReader.js +26 -6
  224. package/dist/src/utils/pathReader.js.map +1 -1
  225. package/dist/src/utils/skill.d.ts +65 -0
  226. package/dist/src/utils/skill.js +241 -0
  227. package/dist/src/utils/skill.js.map +1 -0
  228. package/dist/src/utils/textCleaning.d.ts +51 -0
  229. package/dist/src/utils/textCleaning.js +327 -0
  230. package/dist/src/utils/textCleaning.js.map +1 -0
  231. package/dist/tsconfig.tsbuildinfo +1 -1
  232. package/package.json +16 -2
  233. package/dist/src/tools/mcp-client-manager.test.js +0 -39
  234. package/dist/src/tools/mcp-client-manager.test.js.map +0 -1
  235. package/dist/src/tools/mcp-client.test.d.ts +0 -6
  236. package/dist/src/tools/mcp-client.test.js +0 -454
  237. package/dist/src/tools/mcp-client.test.js.map +0 -1
  238. package/dist/src/tools/mcp-tool.test.d.ts +0 -6
  239. package/dist/src/tools/mcp-tool.test.js +0 -576
  240. package/dist/src/tools/mcp-tool.test.js.map +0 -1
  241. package/dist/src/tools/memoryTool.test.d.ts +0 -6
  242. package/dist/src/tools/memoryTool.test.js +0 -420
  243. package/dist/src/tools/memoryTool.test.js.map +0 -1
  244. package/dist/src/tools/tool-registry.test.d.ts +0 -6
  245. package/dist/src/tools/tool-registry.test.js +0 -332
  246. package/dist/src/tools/tool-registry.test.js.map +0 -1
  247. /package/dist/src/tools/{mcp-client-manager.test.d.ts → workspace-error-helper.test.d.ts} +0 -0
@@ -0,0 +1,56 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Blackbox
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export interface WorktreeInfo {
7
+ name: string;
8
+ path: string;
9
+ branch: string;
10
+ }
11
+ export declare class GitWorktreeManager {
12
+ private worktrees;
13
+ private baseDir;
14
+ private tempDir;
15
+ constructor(baseDir: string);
16
+ /**
17
+ * Check if we're in a git repository
18
+ */
19
+ isGitRepository(): Promise<boolean>;
20
+ /**
21
+ * Get the current branch name
22
+ */
23
+ getCurrentBranch(): string;
24
+ /**
25
+ * Check if there are uncommitted changes
26
+ */
27
+ hasUncommittedChanges(): boolean;
28
+ /**
29
+ * Create a worktree for an agent
30
+ */
31
+ createWorktree(agentName: string): Promise<WorktreeInfo>;
32
+ /**
33
+ * Remove a worktree
34
+ */
35
+ removeWorktree(agentName: string): Promise<void>;
36
+ /**
37
+ * Remove all worktrees
38
+ */
39
+ cleanup(): Promise<void>;
40
+ /**
41
+ * Get worktree info for an agent
42
+ */
43
+ getWorktree(agentName: string): WorktreeInfo | undefined;
44
+ /**
45
+ * Get all worktrees
46
+ */
47
+ getAllWorktrees(): WorktreeInfo[];
48
+ /**
49
+ * Check if gh CLI is available
50
+ */
51
+ isGitHubCliAvailable(): Promise<boolean>;
52
+ /**
53
+ * Create a pull request using gh CLI
54
+ */
55
+ createPullRequest(branchName: string, title: string, body: string): Promise<string>;
56
+ }
@@ -0,0 +1,176 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Blackbox
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { execSync } from 'node:child_process';
7
+ import path from 'node:path';
8
+ import os from 'node:os';
9
+ import fs from 'node:fs';
10
+ export class GitWorktreeManager {
11
+ worktrees = new Map();
12
+ baseDir;
13
+ tempDir;
14
+ constructor(baseDir) {
15
+ this.baseDir = baseDir;
16
+ this.tempDir = path.join(os.tmpdir(), 'blackbox-multi-agent');
17
+ }
18
+ /**
19
+ * Check if we're in a git repository
20
+ */
21
+ async isGitRepository() {
22
+ try {
23
+ execSync('git rev-parse --git-dir', {
24
+ cwd: this.baseDir,
25
+ stdio: 'pipe',
26
+ });
27
+ return true;
28
+ }
29
+ catch {
30
+ return false;
31
+ }
32
+ }
33
+ /**
34
+ * Get the current branch name
35
+ */
36
+ getCurrentBranch() {
37
+ try {
38
+ return execSync('git rev-parse --abbrev-ref HEAD', {
39
+ cwd: this.baseDir,
40
+ encoding: 'utf-8',
41
+ stdio: 'pipe',
42
+ }).trim();
43
+ }
44
+ catch (error) {
45
+ throw new Error(`Failed to get current branch: ${error}`);
46
+ }
47
+ }
48
+ /**
49
+ * Check if there are uncommitted changes
50
+ */
51
+ hasUncommittedChanges() {
52
+ try {
53
+ const status = execSync('git status --porcelain', {
54
+ cwd: this.baseDir,
55
+ encoding: 'utf-8',
56
+ stdio: 'pipe',
57
+ });
58
+ return status.trim().length > 0;
59
+ }
60
+ catch {
61
+ return false;
62
+ }
63
+ }
64
+ /**
65
+ * Create a worktree for an agent
66
+ */
67
+ async createWorktree(agentName) {
68
+ const timestamp = Date.now();
69
+ const branchName = `blackboxai/multi-agent-${agentName}-${timestamp}`;
70
+ const worktreePath = path.join(this.tempDir, `${agentName}-${timestamp}`);
71
+ try {
72
+ // Ensure temp directory exists
73
+ if (!fs.existsSync(this.tempDir)) {
74
+ fs.mkdirSync(this.tempDir, { recursive: true });
75
+ }
76
+ // Create new branch from current HEAD
77
+ execSync(`git branch ${branchName}`, {
78
+ cwd: this.baseDir,
79
+ stdio: 'pipe',
80
+ });
81
+ // Create worktree
82
+ execSync(`git worktree add "${worktreePath}" ${branchName}`, {
83
+ cwd: this.baseDir,
84
+ stdio: 'pipe',
85
+ });
86
+ const worktreeInfo = {
87
+ name: agentName,
88
+ path: worktreePath,
89
+ branch: branchName,
90
+ };
91
+ this.worktrees.set(agentName, worktreeInfo);
92
+ return worktreeInfo;
93
+ }
94
+ catch (error) {
95
+ throw new Error(`Failed to create worktree for ${agentName}: ${error}`);
96
+ }
97
+ }
98
+ /**
99
+ * Remove a worktree
100
+ */
101
+ async removeWorktree(agentName) {
102
+ const worktree = this.worktrees.get(agentName);
103
+ if (!worktree) {
104
+ return;
105
+ }
106
+ try {
107
+ execSync(`git worktree remove "${worktree.path}" --force`, {
108
+ cwd: this.baseDir,
109
+ stdio: 'pipe',
110
+ });
111
+ this.worktrees.delete(agentName);
112
+ }
113
+ catch (error) {
114
+ console.error(`Failed to remove worktree for ${agentName}:`, error);
115
+ }
116
+ }
117
+ /**
118
+ * Remove all worktrees
119
+ */
120
+ async cleanup() {
121
+ const agentNames = Array.from(this.worktrees.keys());
122
+ for (const agentName of agentNames) {
123
+ await this.removeWorktree(agentName);
124
+ }
125
+ // Clean up temp directory
126
+ try {
127
+ if (fs.existsSync(this.tempDir)) {
128
+ fs.rmSync(this.tempDir, { recursive: true, force: true });
129
+ }
130
+ }
131
+ catch (error) {
132
+ console.error('Failed to clean up temp directory:', error);
133
+ }
134
+ }
135
+ /**
136
+ * Get worktree info for an agent
137
+ */
138
+ getWorktree(agentName) {
139
+ return this.worktrees.get(agentName);
140
+ }
141
+ /**
142
+ * Get all worktrees
143
+ */
144
+ getAllWorktrees() {
145
+ return Array.from(this.worktrees.values());
146
+ }
147
+ /**
148
+ * Check if gh CLI is available
149
+ */
150
+ async isGitHubCliAvailable() {
151
+ try {
152
+ execSync('gh --version', { stdio: 'pipe' });
153
+ return true;
154
+ }
155
+ catch {
156
+ return false;
157
+ }
158
+ }
159
+ /**
160
+ * Create a pull request using gh CLI
161
+ */
162
+ async createPullRequest(branchName, title, body) {
163
+ try {
164
+ const result = execSync(`gh pr create --head ${branchName} --title "${title}" --body "${body}"`, {
165
+ cwd: this.baseDir,
166
+ encoding: 'utf-8',
167
+ stdio: 'pipe',
168
+ });
169
+ return result.trim();
170
+ }
171
+ catch (error) {
172
+ throw new Error(`Failed to create PR: ${error}`);
173
+ }
174
+ }
175
+ }
176
+ //# sourceMappingURL=git-worktree-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-worktree-utils.js","sourceRoot":"","sources":["../../../src/utils/git-worktree-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * Result of image compression operation
8
+ */
9
+ export interface CompressionResult {
10
+ buffer: Buffer;
11
+ mimeType: string;
12
+ originalSize: number;
13
+ compressedSize: number;
14
+ compressionRatio: number;
15
+ wasResized: boolean;
16
+ finalQuality?: number;
17
+ }
18
+ /**
19
+ * Compresses an image buffer to ensure it stays under the size limit.
20
+ * Converts to JPEG format and applies quality reduction and/or resizing as needed.
21
+ *
22
+ * @param inputBuffer The original image buffer
23
+ * @param originalMimeType The original MIME type of the image
24
+ * @returns Promise resolving to CompressionResult with compressed image data
25
+ */
26
+ export declare function compressImage(inputBuffer: Buffer, originalMimeType: string): Promise<CompressionResult>;
27
+ /**
28
+ * Checks if an image should be compressed based on its size and type.
29
+ *
30
+ * @param buffer The image buffer
31
+ * @param mimeType The MIME type of the image
32
+ * @returns true if the image should be compressed
33
+ */
34
+ export declare function shouldCompressImage(buffer: Buffer, mimeType: string): boolean;
@@ -0,0 +1,170 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import sharp from 'sharp';
7
+ /**
8
+ * Maximum size for compressed images in bytes (4.5MB to stay safely under 5MB limit)
9
+ * This accounts for base64 encoding overhead (~33% increase)
10
+ */
11
+ const MAX_COMPRESSED_SIZE_BYTES = 4.5 * 1024 * 1024;
12
+ /**
13
+ * Maximum dimension (width or height) for images
14
+ */
15
+ const MAX_IMAGE_DIMENSION = 2048;
16
+ /**
17
+ * Initial JPEG quality for compression
18
+ */
19
+ const INITIAL_JPEG_QUALITY = 85;
20
+ /**
21
+ * Minimum JPEG quality to try before giving up
22
+ */
23
+ const MIN_JPEG_QUALITY = 60;
24
+ /**
25
+ * Quality reduction step when image is still too large
26
+ */
27
+ const QUALITY_STEP = 5;
28
+ /**
29
+ * Compresses an image buffer to ensure it stays under the size limit.
30
+ * Converts to JPEG format and applies quality reduction and/or resizing as needed.
31
+ *
32
+ * @param inputBuffer The original image buffer
33
+ * @param originalMimeType The original MIME type of the image
34
+ * @returns Promise resolving to CompressionResult with compressed image data
35
+ */
36
+ export async function compressImage(inputBuffer, originalMimeType) {
37
+ const originalSize = inputBuffer.length;
38
+ try {
39
+ // Initialize sharp instance
40
+ let image = sharp(inputBuffer);
41
+ const metadata = await image.metadata();
42
+ // Check if resizing is needed based on dimensions
43
+ let wasResized = false;
44
+ if (metadata.width && metadata.height) {
45
+ const maxDimension = Math.max(metadata.width, metadata.height);
46
+ if (maxDimension > MAX_IMAGE_DIMENSION) {
47
+ wasResized = true;
48
+ // Resize maintaining aspect ratio
49
+ image = image.resize(MAX_IMAGE_DIMENSION, MAX_IMAGE_DIMENSION, {
50
+ fit: 'inside',
51
+ withoutEnlargement: true,
52
+ });
53
+ }
54
+ }
55
+ // Try different quality levels until we get under the size limit
56
+ let quality = INITIAL_JPEG_QUALITY;
57
+ let compressedBuffer;
58
+ let finalQuality = quality;
59
+ while (quality >= MIN_JPEG_QUALITY) {
60
+ // Convert to JPEG with current quality
61
+ compressedBuffer = await image
62
+ .jpeg({ quality, mozjpeg: true }) // mozjpeg provides better compression
63
+ .toBuffer();
64
+ finalQuality = quality;
65
+ // Check if size is acceptable
66
+ if (compressedBuffer.length <= MAX_COMPRESSED_SIZE_BYTES) {
67
+ const compressionRatio = (1 - compressedBuffer.length / originalSize) * 100;
68
+ console.log(`[Image Compression] Original: ${(originalSize / 1024 / 1024).toFixed(2)}MB, ` +
69
+ `Compressed: ${(compressedBuffer.length / 1024 / 1024).toFixed(2)}MB, ` +
70
+ `Ratio: ${compressionRatio.toFixed(1)}%, Quality: ${quality}%, ` +
71
+ `Resized: ${wasResized}`);
72
+ return {
73
+ buffer: compressedBuffer,
74
+ mimeType: 'image/jpeg',
75
+ originalSize,
76
+ compressedSize: compressedBuffer.length,
77
+ compressionRatio,
78
+ wasResized,
79
+ finalQuality,
80
+ };
81
+ }
82
+ // Reduce quality and try again
83
+ quality -= QUALITY_STEP;
84
+ }
85
+ // If we still can't get under the limit, try more aggressive resizing
86
+ if (metadata.width && metadata.height) {
87
+ console.warn(`[Image Compression] Could not compress to under ${(MAX_COMPRESSED_SIZE_BYTES / 1024 / 1024).toFixed(1)}MB with quality reduction. Trying aggressive resize...`);
88
+ // Try progressively smaller sizes
89
+ const sizes = [1600, 1280, 1024, 800];
90
+ for (const size of sizes) {
91
+ image = sharp(inputBuffer).resize(size, size, {
92
+ fit: 'inside',
93
+ withoutEnlargement: true,
94
+ });
95
+ compressedBuffer = await image
96
+ .jpeg({ quality: MIN_JPEG_QUALITY, mozjpeg: true })
97
+ .toBuffer();
98
+ if (compressedBuffer.length <= MAX_COMPRESSED_SIZE_BYTES) {
99
+ const compressionRatio = (1 - compressedBuffer.length / originalSize) * 100;
100
+ console.log(`[Image Compression] Aggressive resize successful. ` +
101
+ `Original: ${(originalSize / 1024 / 1024).toFixed(2)}MB, ` +
102
+ `Compressed: ${(compressedBuffer.length / 1024 / 1024).toFixed(2)}MB, ` +
103
+ `Ratio: ${compressionRatio.toFixed(1)}%, Max dimension: ${size}px`);
104
+ return {
105
+ buffer: compressedBuffer,
106
+ mimeType: 'image/jpeg',
107
+ originalSize,
108
+ compressedSize: compressedBuffer.length,
109
+ compressionRatio,
110
+ wasResized: true,
111
+ finalQuality: MIN_JPEG_QUALITY,
112
+ };
113
+ }
114
+ }
115
+ }
116
+ // Last resort: return the best we could do and warn
117
+ compressedBuffer = await sharp(inputBuffer)
118
+ .resize(800, 800, { fit: 'inside', withoutEnlargement: true })
119
+ .jpeg({ quality: MIN_JPEG_QUALITY, mozjpeg: true })
120
+ .toBuffer();
121
+ console.warn(`[Image Compression] Warning: Could not compress image to under ${(MAX_COMPRESSED_SIZE_BYTES / 1024 / 1024).toFixed(1)}MB. ` +
122
+ `Final size: ${(compressedBuffer.length / 1024 / 1024).toFixed(2)}MB. ` +
123
+ `This may exceed API limits.`);
124
+ return {
125
+ buffer: compressedBuffer,
126
+ mimeType: 'image/jpeg',
127
+ originalSize,
128
+ compressedSize: compressedBuffer.length,
129
+ compressionRatio: (1 - compressedBuffer.length / originalSize) * 100,
130
+ wasResized: true,
131
+ finalQuality: MIN_JPEG_QUALITY,
132
+ };
133
+ }
134
+ catch (error) {
135
+ // If compression fails, log error and return original
136
+ console.error(`[Image Compression] Failed to compress image: ${error instanceof Error ? error.message : String(error)}`);
137
+ // Return original buffer as fallback
138
+ return {
139
+ buffer: inputBuffer,
140
+ mimeType: originalMimeType,
141
+ originalSize,
142
+ compressedSize: originalSize,
143
+ compressionRatio: 0,
144
+ wasResized: false,
145
+ };
146
+ }
147
+ }
148
+ /**
149
+ * Checks if an image should be compressed based on its size and type.
150
+ *
151
+ * @param buffer The image buffer
152
+ * @param mimeType The MIME type of the image
153
+ * @returns true if the image should be compressed
154
+ */
155
+ export function shouldCompressImage(buffer, mimeType) {
156
+ // Always compress if over 3MB to be safe
157
+ if (buffer.length > 3 * 1024 * 1024) {
158
+ return true;
159
+ }
160
+ // Compress PNG files over 1MB (they often compress well to JPEG)
161
+ if (mimeType === 'image/png' && buffer.length > 1 * 1024 * 1024) {
162
+ return true;
163
+ }
164
+ // Don't compress small images or GIFs (to preserve animation)
165
+ if (mimeType === 'image/gif') {
166
+ return false;
167
+ }
168
+ return false;
169
+ }
170
+ //# sourceMappingURL=imageCompression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageCompression.js","sourceRoot":"","sources":["../../../src/utils/imageCompression.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ interface Message {
7
+ role: string;
8
+ content: string | ContentBlock[];
9
+ tool_calls?: ToolCall[];
10
+ [key: string]: unknown;
11
+ }
12
+ interface ContentBlock {
13
+ type: string;
14
+ text?: string;
15
+ [key: string]: unknown;
16
+ }
17
+ interface ToolCall {
18
+ function: {
19
+ arguments: string;
20
+ name?: string;
21
+ };
22
+ [key: string]: unknown;
23
+ }
24
+ export declare class MessageTruncator {
25
+ private debugMode;
26
+ constructor(debugMode?: boolean);
27
+ /**
28
+ * Helper to get the tokenizer for a model.
29
+ * Handles generic fallback if the model string isn't an exact match.
30
+ */
31
+ private getTokenizer;
32
+ /**
33
+ * Helper to count tokens for text or a list of messages.
34
+ * This mimics the self.count_tokens behavior.
35
+ */
36
+ private countTokens;
37
+ /**
38
+ * Returns max token limits for models that may not be available in LiteLLM's get_model_info().
39
+ * Based on the comprehensive model mapping from the Python implementation.
40
+ */
41
+ private getModelMaxTokens;
42
+ /**
43
+ * Smartly truncates message content by targeting longer texts first.
44
+ */
45
+ private truncateMessageContent;
46
+ /**
47
+ * Main truncation method
48
+ */
49
+ truncateLongMessages(model: string, messages: Message[], maxOutputTokens?: number, systemPrompt?: string | null): Message[];
50
+ }
51
+ export {};