@blackbox_ai/blackbox-cli-core 0.0.7 → 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 (255) 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 +11 -5
  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/coreToolScheduler.js +2 -2
  27. package/dist/src/core/coreToolScheduler.js.map +1 -1
  28. package/dist/src/core/encryptedClientFactory.d.ts +17 -0
  29. package/dist/src/core/encryptedClientFactory.js +92 -0
  30. package/dist/src/core/encryptedClientFactory.js.map +1 -0
  31. package/dist/src/core/encryptedContentGenerator.d.ts +47 -0
  32. package/dist/src/core/encryptedContentGenerator.js +445 -0
  33. package/dist/src/core/encryptedContentGenerator.js.map +1 -0
  34. package/dist/src/core/encryptedGeminiClient.d.ts +59 -0
  35. package/dist/src/core/encryptedGeminiClient.js +177 -0
  36. package/dist/src/core/encryptedGeminiClient.js.map +1 -0
  37. package/dist/src/core/encryptedGeminiClientBridge.d.ts +107 -0
  38. package/dist/src/core/encryptedGeminiClientBridge.js +808 -0
  39. package/dist/src/core/encryptedGeminiClientBridge.js.map +1 -0
  40. package/dist/src/core/encryptedGeminiClientWrapper.d.ts +129 -0
  41. package/dist/src/core/encryptedGeminiClientWrapper.js +305 -0
  42. package/dist/src/core/encryptedGeminiClientWrapper.js.map +1 -0
  43. package/dist/src/core/encryptedTurn.d.ts +40 -0
  44. package/dist/src/core/encryptedTurn.js +114 -0
  45. package/dist/src/core/encryptedTurn.js.map +1 -0
  46. package/dist/src/core/logger.d.ts +21 -0
  47. package/dist/src/core/logger.js +110 -0
  48. package/dist/src/core/logger.js.map +1 -1
  49. package/dist/src/core/openaiContentGenerator/constants.d.ts +2 -0
  50. package/dist/src/core/openaiContentGenerator/constants.js +2 -0
  51. package/dist/src/core/openaiContentGenerator/constants.js.map +1 -1
  52. package/dist/src/core/openaiContentGenerator/converter.d.ts +16 -1
  53. package/dist/src/core/openaiContentGenerator/converter.js +135 -4
  54. package/dist/src/core/openaiContentGenerator/converter.js.map +1 -1
  55. package/dist/src/core/openaiContentGenerator/pipeline.js +22 -8
  56. package/dist/src/core/openaiContentGenerator/pipeline.js.map +1 -1
  57. package/dist/src/core/openaiContentGenerator/pipeline.test.js +51 -0
  58. package/dist/src/core/openaiContentGenerator/pipeline.test.js.map +1 -1
  59. package/dist/src/core/openaiContentGenerator/provider/default.js +10 -1
  60. package/dist/src/core/openaiContentGenerator/provider/default.js.map +1 -1
  61. package/dist/src/core/prompts.d.ts +18 -1
  62. package/dist/src/core/prompts.js +388 -459
  63. package/dist/src/core/prompts.js.map +1 -1
  64. package/dist/src/core/tokenLimits.d.ts +1 -0
  65. package/dist/src/core/tokenLimits.js +37 -2
  66. package/dist/src/core/tokenLimits.js.map +1 -1
  67. package/dist/src/core/tokenLimits.test.js +36 -1
  68. package/dist/src/core/tokenLimits.test.js.map +1 -1
  69. package/dist/src/encrypt/attestation.d.ts +5 -0
  70. package/dist/src/encrypt/attestation.js +100 -0
  71. package/dist/src/encrypt/attestation.js.map +1 -0
  72. package/dist/src/encrypt/client.d.ts +14 -0
  73. package/dist/src/encrypt/client.js +132 -0
  74. package/dist/src/encrypt/client.js.map +1 -0
  75. package/dist/src/encrypt/config.d.ts +22 -0
  76. package/dist/src/encrypt/config.js +43 -0
  77. package/dist/src/encrypt/config.js.map +1 -0
  78. package/dist/src/encrypt/crypto-utils.d.ts +57 -0
  79. package/dist/src/encrypt/crypto-utils.js +257 -0
  80. package/dist/src/encrypt/crypto-utils.js.map +1 -0
  81. package/dist/src/encrypt/history-manager.d.ts +43 -0
  82. package/dist/src/encrypt/history-manager.js +164 -0
  83. package/dist/src/encrypt/history-manager.js.map +1 -0
  84. package/dist/src/encrypt/minimax-template.d.ts +73 -0
  85. package/dist/src/encrypt/minimax-template.js +276 -0
  86. package/dist/src/encrypt/minimax-template.js.map +1 -0
  87. package/dist/src/encrypt/sessions.d.ts +17 -0
  88. package/dist/src/encrypt/sessions.js +221 -0
  89. package/dist/src/encrypt/sessions.js.map +1 -0
  90. package/dist/src/encrypt/streaming-client.d.ts +29 -0
  91. package/dist/src/encrypt/streaming-client.js +232 -0
  92. package/dist/src/encrypt/streaming-client.js.map +1 -0
  93. package/dist/src/encrypt/tool-formatter.d.ts +36 -0
  94. package/dist/src/encrypt/tool-formatter.js +353 -0
  95. package/dist/src/encrypt/tool-formatter.js.map +1 -0
  96. package/dist/src/encrypt/tool-parser.d.ts +93 -0
  97. package/dist/src/encrypt/tool-parser.js +567 -0
  98. package/dist/src/encrypt/tool-parser.js.map +1 -0
  99. package/dist/src/encrypt/types.d.ts +81 -0
  100. package/dist/src/encrypt/types.js +2 -0
  101. package/dist/src/encrypt/types.js.map +1 -0
  102. package/dist/src/generated/git-commit.d.ts +3 -3
  103. package/dist/src/generated/git-commit.js +3 -3
  104. package/dist/src/ide/ide-client.js +9 -19
  105. package/dist/src/ide/ide-client.js.map +1 -1
  106. package/dist/src/index.d.ts +15 -0
  107. package/dist/src/index.js +15 -0
  108. package/dist/src/index.js.map +1 -1
  109. package/dist/src/mcp/oauth-provider.js +2 -6
  110. package/dist/src/mcp/oauth-provider.js.map +1 -1
  111. package/dist/src/mcp/oauth-token-storage.d.ts +7 -0
  112. package/dist/src/mcp/oauth-token-storage.js +24 -0
  113. package/dist/src/mcp/oauth-token-storage.js.map +1 -1
  114. package/dist/src/services/EncryptedChatService.d.ts +80 -0
  115. package/dist/src/services/EncryptedChatService.js +202 -0
  116. package/dist/src/services/EncryptedChatService.js.map +1 -0
  117. package/dist/src/services/StatsHistoryService.d.ts +131 -0
  118. package/dist/src/services/StatsHistoryService.js +427 -0
  119. package/dist/src/services/StatsHistoryService.js.map +1 -0
  120. package/dist/src/services/checkpointApiService.d.ts +101 -0
  121. package/dist/src/services/checkpointApiService.js +215 -0
  122. package/dist/src/services/checkpointApiService.js.map +1 -0
  123. package/dist/src/services/environmentSanitization.d.ts +24 -0
  124. package/dist/src/services/environmentSanitization.js +152 -0
  125. package/dist/src/services/environmentSanitization.js.map +1 -0
  126. package/dist/src/telemetry/blackbox-logger/blackbox-logger.d.ts +2 -6
  127. package/dist/src/telemetry/blackbox-logger/blackbox-logger.js +29 -135
  128. package/dist/src/telemetry/blackbox-logger/blackbox-logger.js.map +1 -1
  129. package/dist/src/telemetry/blackbox-logger/blackbox-logger.test.js +1 -1
  130. package/dist/src/telemetry/blackbox-logger/blackbox-logger.test.js.map +1 -1
  131. package/dist/src/telemetry/uiTelemetry.d.ts +8 -0
  132. package/dist/src/telemetry/uiTelemetry.js +17 -0
  133. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  134. package/dist/src/tools/browser-interactive.d.ts +63 -0
  135. package/dist/src/tools/browser-interactive.js +394 -0
  136. package/dist/src/tools/browser-interactive.js.map +1 -0
  137. package/dist/src/tools/browser_use.d.ts +23 -2
  138. package/dist/src/tools/browser_use.js +424 -43
  139. package/dist/src/tools/browser_use.js.map +1 -1
  140. package/dist/src/tools/data-file-constants.d.ts +17 -0
  141. package/dist/src/tools/data-file-constants.js +30 -0
  142. package/dist/src/tools/data-file-constants.js.map +1 -0
  143. package/dist/src/tools/edit.js +44 -7
  144. package/dist/src/tools/edit.js.map +1 -1
  145. package/dist/src/tools/exitPlanMode.js +1 -1
  146. package/dist/src/tools/exitPlanMode.js.map +1 -1
  147. package/dist/src/tools/ls.js +40 -6
  148. package/dist/src/tools/ls.js.map +1 -1
  149. package/dist/src/tools/ls.test.js +4 -4
  150. package/dist/src/tools/ls.test.js.map +1 -1
  151. package/dist/src/tools/mcp-client-manager.d.ts +28 -2
  152. package/dist/src/tools/mcp-client-manager.js +62 -4
  153. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  154. package/dist/src/tools/mcp-client.d.ts +5 -3
  155. package/dist/src/tools/mcp-client.js +39 -11
  156. package/dist/src/tools/mcp-client.js.map +1 -1
  157. package/dist/src/tools/mcp-tool.d.ts +3 -1
  158. package/dist/src/tools/mcp-tool.js +37 -9
  159. package/dist/src/tools/mcp-tool.js.map +1 -1
  160. package/dist/src/tools/memoryTool.d.ts +14 -4
  161. package/dist/src/tools/memoryTool.js +98 -39
  162. package/dist/src/tools/memoryTool.js.map +1 -1
  163. package/dist/src/tools/read-data-file.d.ts +31 -0
  164. package/dist/src/tools/read-data-file.js +469 -0
  165. package/dist/src/tools/read-data-file.js.map +1 -0
  166. package/dist/src/tools/read-file.js +64 -5
  167. package/dist/src/tools/read-file.js.map +1 -1
  168. package/dist/src/tools/read-file.test.js +40 -6
  169. package/dist/src/tools/read-file.test.js.map +1 -1
  170. package/dist/src/tools/shell.d.ts +3 -1
  171. package/dist/src/tools/shell.js +25 -4
  172. package/dist/src/tools/shell.js.map +1 -1
  173. package/dist/src/tools/skill.d.ts +34 -0
  174. package/dist/src/tools/skill.js +143 -0
  175. package/dist/src/tools/skill.js.map +1 -0
  176. package/dist/src/tools/sql_db.d.ts +101 -0
  177. package/dist/src/tools/sql_db.js +1033 -0
  178. package/dist/src/tools/sql_db.js.map +1 -0
  179. package/dist/src/tools/sql_db_configure.d.ts +18 -0
  180. package/dist/src/tools/sql_db_configure.js +96 -0
  181. package/dist/src/tools/sql_db_configure.js.map +1 -0
  182. package/dist/src/tools/taskCompletion.d.ts +29 -0
  183. package/dist/src/tools/taskCompletion.js +231 -0
  184. package/dist/src/tools/taskCompletion.js.map +1 -0
  185. package/dist/src/tools/todoWrite.js +0 -142
  186. package/dist/src/tools/todoWrite.js.map +1 -1
  187. package/dist/src/tools/tool-error.d.ts +3 -1
  188. package/dist/src/tools/tool-error.js +3 -0
  189. package/dist/src/tools/tool-error.js.map +1 -1
  190. package/dist/src/tools/tool-names.d.ts +8 -0
  191. package/dist/src/tools/tool-names.js +8 -0
  192. package/dist/src/tools/tool-names.js.map +1 -1
  193. package/dist/src/tools/tool-registry.d.ts +22 -0
  194. package/dist/src/tools/tool-registry.js +41 -1
  195. package/dist/src/tools/tool-registry.js.map +1 -1
  196. package/dist/src/tools/tools.d.ts +18 -2
  197. package/dist/src/tools/tools.js +3 -0
  198. package/dist/src/tools/tools.js.map +1 -1
  199. package/dist/src/tools/web-fetch.js +24 -4
  200. package/dist/src/tools/web-fetch.js.map +1 -1
  201. package/dist/src/tools/web-search.js +160 -2
  202. package/dist/src/tools/web-search.js.map +1 -1
  203. package/dist/src/tools/workspace-error-helper.d.ts +9 -0
  204. package/dist/src/tools/workspace-error-helper.js +43 -0
  205. package/dist/src/tools/workspace-error-helper.js.map +1 -0
  206. package/dist/src/tools/workspace-error-helper.test.js +85 -0
  207. package/dist/src/tools/workspace-error-helper.test.js.map +1 -0
  208. package/dist/src/tools/write-file.js +42 -7
  209. package/dist/src/tools/write-file.js.map +1 -1
  210. package/dist/src/utils/environmentContext.js +3 -1
  211. package/dist/src/utils/environmentContext.js.map +1 -1
  212. package/dist/src/utils/environmentContext.test.js +3 -2
  213. package/dist/src/utils/environmentContext.test.js.map +1 -1
  214. package/dist/src/utils/fetch.d.ts +3 -1
  215. package/dist/src/utils/fetch.js +35 -2
  216. package/dist/src/utils/fetch.js.map +1 -1
  217. package/dist/src/utils/fileUtils.js +30 -3
  218. package/dist/src/utils/fileUtils.js.map +1 -1
  219. package/dist/src/utils/filesearch/fileSearch.d.ts +2 -0
  220. package/dist/src/utils/filesearch/fileSearch.js +38 -7
  221. package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
  222. package/dist/src/utils/git-worktree-utils.d.ts +56 -0
  223. package/dist/src/utils/git-worktree-utils.js +176 -0
  224. package/dist/src/utils/git-worktree-utils.js.map +1 -0
  225. package/dist/src/utils/imageCompression.d.ts +34 -0
  226. package/dist/src/utils/imageCompression.js +170 -0
  227. package/dist/src/utils/imageCompression.js.map +1 -0
  228. package/dist/src/utils/messageTruncator.d.ts +51 -0
  229. package/dist/src/utils/messageTruncator.js +346 -0
  230. package/dist/src/utils/messageTruncator.js.map +1 -0
  231. package/dist/src/utils/pathReader.js +26 -6
  232. package/dist/src/utils/pathReader.js.map +1 -1
  233. package/dist/src/utils/skill.d.ts +65 -0
  234. package/dist/src/utils/skill.js +241 -0
  235. package/dist/src/utils/skill.js.map +1 -0
  236. package/dist/src/utils/textCleaning.d.ts +51 -0
  237. package/dist/src/utils/textCleaning.js +327 -0
  238. package/dist/src/utils/textCleaning.js.map +1 -0
  239. package/dist/tsconfig.tsbuildinfo +1 -1
  240. package/package.json +19 -6
  241. package/dist/src/tools/mcp-client-manager.test.js +0 -39
  242. package/dist/src/tools/mcp-client-manager.test.js.map +0 -1
  243. package/dist/src/tools/mcp-client.test.d.ts +0 -6
  244. package/dist/src/tools/mcp-client.test.js +0 -454
  245. package/dist/src/tools/mcp-client.test.js.map +0 -1
  246. package/dist/src/tools/mcp-tool.test.d.ts +0 -6
  247. package/dist/src/tools/mcp-tool.test.js +0 -576
  248. package/dist/src/tools/mcp-tool.test.js.map +0 -1
  249. package/dist/src/tools/memoryTool.test.d.ts +0 -6
  250. package/dist/src/tools/memoryTool.test.js +0 -420
  251. package/dist/src/tools/memoryTool.test.js.map +0 -1
  252. package/dist/src/tools/tool-registry.test.d.ts +0 -6
  253. package/dist/src/tools/tool-registry.test.js +0 -332
  254. package/dist/src/tools/tool-registry.test.js.map +0 -1
  255. /package/dist/src/tools/{mcp-client-manager.test.d.ts → workspace-error-helper.test.d.ts} +0 -0
@@ -0,0 +1,276 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * MiniMax template implementation based on the provided Jinja template
8
+ */
9
+ export class MiniMaxTemplate {
10
+ toolcallBeginToken = '<minimax:tool_call>';
11
+ toolcallEndToken = '</minimax:tool_call>';
12
+ modelIdentity = "You are a helpful assistant. Your name is MiniMax-M2.1 and is built by MiniMax.";
13
+ /**
14
+ * Render tools for MiniMax format
15
+ */
16
+ renderToolNamespace(tools) {
17
+ let result = '';
18
+ for (const tool of tools) {
19
+ const toolFunction = {
20
+ name: tool.name,
21
+ description: tool.description || '',
22
+ parameters: tool.parametersJsonSchema || {}
23
+ };
24
+ result += `<tool>${JSON.stringify(toolFunction, null, 0)}</tool>\n`;
25
+ }
26
+ return result;
27
+ }
28
+ /**
29
+ * Extract visible text from content (handles both string and array formats)
30
+ */
31
+ visibleText(content) {
32
+ if (typeof content === 'string') {
33
+ return content;
34
+ }
35
+ if (Array.isArray(content)) {
36
+ let result = '';
37
+ for (const item of content) {
38
+ if (typeof item === 'object' && item !== null && 'type' in item && item.type === 'text' && 'text' in item) {
39
+ result += item.text;
40
+ }
41
+ else if (typeof item === 'string') {
42
+ result += item;
43
+ }
44
+ }
45
+ return result;
46
+ }
47
+ if (content === null || content === undefined) {
48
+ return '';
49
+ }
50
+ return String(content);
51
+ }
52
+ /**
53
+ * Build system message with model identity and optional date/location
54
+ */
55
+ buildSystemMessage(systemMessage) {
56
+ let result = '';
57
+ if (systemMessage?.content) {
58
+ result = this.visibleText(systemMessage.content);
59
+ }
60
+ else {
61
+ result = this.modelIdentity;
62
+ }
63
+ if (systemMessage?.current_date) {
64
+ result += '\n' + 'Current date: ' + systemMessage.current_date;
65
+ }
66
+ if (systemMessage?.current_location) {
67
+ result += '\n' + 'Current location: ' + systemMessage.current_location;
68
+ }
69
+ return result;
70
+ }
71
+ /**
72
+ * Format tools for system prompt in MiniMax format
73
+ */
74
+ formatToolsForSystemPrompt(tools) {
75
+ if (!tools || tools.length === 0) {
76
+ return '';
77
+ }
78
+ let result = '\n\n# Tools\n';
79
+ result += 'You may call one or more tools to assist with the user query.\n';
80
+ result += 'Here are the tools available in JSONSchema format:\n\n';
81
+ result += '<tools>\n';
82
+ result += this.renderToolNamespace(tools);
83
+ result += '</tools>\n\n';
84
+ result += 'When making tool calls, use XML format to invoke tools and pass parameters:\n\n';
85
+ result += this.toolcallBeginToken + '\n';
86
+ result += '<invoke name="tool-name-1">\n';
87
+ result += '<parameter name="param-key-1">param-value-1</parameter>\n';
88
+ result += '<parameter name="param-key-2">param-value-2</parameter>\n';
89
+ result += '...\n';
90
+ result += '</invoke>\n';
91
+ result += this.toolcallEndToken + '\n';
92
+ return result;
93
+ }
94
+ /**
95
+ * Apply MiniMax chat template to messages
96
+ */
97
+ applyTemplate(messages, tools, systemMessage, addGenerationPrompt = false) {
98
+ let result = '';
99
+ // Extract system message (only first message if it's system)
100
+ let actualSystemMessage = systemMessage;
101
+ let conversationMessages = messages;
102
+ if (messages.length > 0 && messages[0].role === 'system') {
103
+ actualSystemMessage = {
104
+ content: messages[0].content,
105
+ current_date: messages[0].current_date,
106
+ current_location: messages[0].current_location
107
+ };
108
+ conversationMessages = messages.slice(1);
109
+ }
110
+ // Get the last user message turn for interleaved thinking
111
+ let lastUserIndex = -1;
112
+ for (let i = 0; i < conversationMessages.length; i++) {
113
+ if (conversationMessages[i].role === 'user') {
114
+ lastUserIndex = i;
115
+ }
116
+ }
117
+ // Render system message
118
+ result += ']~!b[]~b]system\n';
119
+ result += this.buildSystemMessage(actualSystemMessage);
120
+ // Render tools if available
121
+ if (tools && tools.length > 0) {
122
+ result += this.formatToolsForSystemPrompt(tools);
123
+ }
124
+ result += '[e~[\n';
125
+ // Render messages
126
+ const lastToolCall = {};
127
+ for (let i = 0; i < conversationMessages.length; i++) {
128
+ const message = conversationMessages[i];
129
+ if (message.role === 'assistant') {
130
+ // Only render reasoning_content if no user message follows
131
+ result += ']~b]ai\n';
132
+ let reasoningContent = '';
133
+ let content = this.visibleText(message.content);
134
+ if (message.reasoning_content) {
135
+ reasoningContent = message.reasoning_content;
136
+ }
137
+ else {
138
+ // Extract reasoning from <think> tags in content
139
+ const thinkMatch = content.match(/<\/think>/);
140
+ if (thinkMatch) {
141
+ const parts = content.split('</think>');
142
+ const beforeThink = parts[0];
143
+ const thinkStartMatch = beforeThink.match(/<think>/);
144
+ if (thinkStartMatch) {
145
+ reasoningContent = beforeThink.split('<think>').pop()?.trim() || '';
146
+ content = parts.slice(1).join('</think>').trim();
147
+ }
148
+ }
149
+ }
150
+ if (reasoningContent && i > lastUserIndex) {
151
+ result += '<think>\n' + reasoningContent + '\n</think>\n\n';
152
+ }
153
+ if (content) {
154
+ result += content;
155
+ }
156
+ if (message.tool_calls && message.tool_calls.length > 0) {
157
+ result += '\n' + this.toolcallBeginToken + '\n';
158
+ for (const toolCall of message.tool_calls) {
159
+ result += `<invoke name="${toolCall.name}">`;
160
+ for (const [key, value] of Object.entries(toolCall.arguments)) {
161
+ const valueStr = typeof value === 'string' ? value : JSON.stringify(value);
162
+ result += `<parameter name="${key}">${valueStr}</parameter>`;
163
+ }
164
+ result += '</invoke>\n';
165
+ }
166
+ result += this.toolcallEndToken;
167
+ lastToolCall.name = message.tool_calls[message.tool_calls.length - 1].name;
168
+ }
169
+ else {
170
+ lastToolCall.name = undefined;
171
+ }
172
+ result += '[e~[\n';
173
+ }
174
+ else if (message.role === 'tool') {
175
+ if (!lastToolCall.name) {
176
+ throw new Error("Message has tool role, but there was no previous assistant message with a tool call!");
177
+ }
178
+ const isFirstTool = i === 0 || conversationMessages[i - 1].role !== 'tool';
179
+ const isLastTool = i === conversationMessages.length - 1 || conversationMessages[i + 1].role !== 'tool';
180
+ if (isFirstTool) {
181
+ result += ']~b]tool';
182
+ }
183
+ const content = this.visibleText(message.content);
184
+ result += '\n<response>';
185
+ result += content;
186
+ result += '</response>';
187
+ if (isLastTool) {
188
+ result += '[e~[\n';
189
+ }
190
+ }
191
+ else if (message.role === 'user') {
192
+ result += ']~b]user\n';
193
+ result += this.visibleText(message.content);
194
+ result += '[e~[\n';
195
+ }
196
+ }
197
+ // Generation prompt
198
+ if (addGenerationPrompt) {
199
+ result += ']~b]ai\n<think>\n';
200
+ }
201
+ return result;
202
+ }
203
+ /**
204
+ * Parse tool calls from MiniMax format response
205
+ */
206
+ parseToolCalls(text) {
207
+ const toolCalls = [];
208
+ // Find tool call blocks
209
+ const toolCallRegex = new RegExp(`${this.escapeRegex(this.toolcallBeginToken)}([\\s\\S]*?)${this.escapeRegex(this.toolcallEndToken)}`, 'g');
210
+ let match;
211
+ while ((match = toolCallRegex.exec(text)) !== null) {
212
+ const toolCallContent = match[1];
213
+ // Parse individual invoke blocks
214
+ const invokeRegex = /<invoke name="([^"]+)">([\s\S]*?)<\/invoke>/g;
215
+ let invokeMatch;
216
+ while ((invokeMatch = invokeRegex.exec(toolCallContent)) !== null) {
217
+ const toolName = invokeMatch[1];
218
+ const parametersContent = invokeMatch[2];
219
+ // Parse parameters
220
+ const parameterRegex = /<parameter name="([^"]+)">([\s\S]*?)<\/parameter>/g;
221
+ const toolArguments = {};
222
+ let paramMatch;
223
+ while ((paramMatch = parameterRegex.exec(parametersContent)) !== null) {
224
+ const paramName = paramMatch[1];
225
+ const paramValue = paramMatch[2];
226
+ // Try to parse as JSON, fallback to string
227
+ try {
228
+ toolArguments[paramName] = JSON.parse(paramValue);
229
+ }
230
+ catch {
231
+ toolArguments[paramName] = paramValue;
232
+ }
233
+ }
234
+ toolCalls.push({
235
+ name: toolName,
236
+ arguments: toolArguments
237
+ });
238
+ }
239
+ }
240
+ return toolCalls;
241
+ }
242
+ /**
243
+ * Remove tool call markup from text
244
+ */
245
+ removeToolCallMarkup(text) {
246
+ let cleanText = text;
247
+ // Remove MiniMax tool call blocks
248
+ cleanText = cleanText.replace(new RegExp(`${this.escapeRegex(this.toolcallBeginToken)}[\\s\\S]*?${this.escapeRegex(this.toolcallEndToken)}`, 'g'), '');
249
+ // Remove any remaining invoke blocks
250
+ cleanText = cleanText.replace(/<invoke name="[^"]*">[\s\S]*?<\/invoke>/g, '');
251
+ // Remove parameter blocks
252
+ cleanText = cleanText.replace(/<parameter name="[^"]*">[\s\S]*?<\/parameter>/g, '');
253
+ // Clean up resulting empty lines
254
+ cleanText = cleanText.replace(/\n\s*\n\s*\n/g, '\n\n');
255
+ return cleanText.trim();
256
+ }
257
+ /**
258
+ * Check if text contains MiniMax tool calls
259
+ */
260
+ hasToolCalls(text) {
261
+ return text.includes(this.toolcallBeginToken) && text.includes(this.toolcallEndToken);
262
+ }
263
+ /**
264
+ * Escape regex special characters
265
+ */
266
+ escapeRegex(str) {
267
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
268
+ }
269
+ }
270
+ /**
271
+ * Factory function to create MiniMax template instance
272
+ */
273
+ export function createMiniMaxTemplate() {
274
+ return new MiniMaxTemplate();
275
+ }
276
+ //# sourceMappingURL=minimax-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minimax-template.js","sourceRoot":"","sources":["../../../src/encrypt/minimax-template.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { SecureSession } from './types.js';
2
+ /**
3
+ * Hydrates a session from sessionStorage by reconstructing crypto keys
4
+ * so that attestation is NOT required again for the same chatId.
5
+ */
6
+ export declare const getHydratedSessionByChatId: (chatId: string) => Promise<SecureSession | undefined>;
7
+ /**
8
+ * Initializes a secure session for encrypted communication.
9
+ * Sessions are stored in sessionStorage and keyed by chatId to ensure one session per chat per tab.
10
+ * Attestation happens only once per chatId - subsequent calls reuse existing crypto keys.
11
+ */
12
+ export declare const initializeSecureSession: (chatId: string, systemPrompt?: string) => Promise<SecureSession>;
13
+ /**
14
+ * Initializes session cleanup on page load and sets up cleanup on page unload
15
+ * Call this once when the app starts to ensure proper session lifecycle management
16
+ */
17
+ export declare const initializeSessionCleanup: () => void;
@@ -0,0 +1,221 @@
1
+ import { toB64, fromB64 } from './crypto-utils.js';
2
+ import { performSecureAttestation } from './attestation.js';
3
+ import * as fs from 'node:fs';
4
+ import * as path from 'node:path';
5
+ import * as os from 'node:os';
6
+ /**
7
+ * Session storage directory for CLI (replaces browser sessionStorage)
8
+ */
9
+ const getSessionStorageDir = () => {
10
+ const homeDir = os.homedir();
11
+ const sessionDir = path.join(homeDir, '.blackboxcli', 'sessions');
12
+ if (!fs.existsSync(sessionDir)) {
13
+ fs.mkdirSync(sessionDir, { recursive: true });
14
+ }
15
+ return sessionDir;
16
+ };
17
+ /**
18
+ * Session file prefix for secure sessions
19
+ */
20
+ const SESSION_FILE_PREFIX = 'blackbox_secure_session_';
21
+ /**
22
+ * Deserializes session data from storage
23
+ */
24
+ const deserializeSession = (data) => {
25
+ try {
26
+ return JSON.parse(data);
27
+ }
28
+ catch {
29
+ return {};
30
+ }
31
+ };
32
+ /**
33
+ * Gets the session file path for a chatId
34
+ */
35
+ const getSessionFilePath = (chatId) => path.join(getSessionStorageDir(), `${SESSION_FILE_PREFIX}${chatId}.json`);
36
+ /**
37
+ * Hydrates a session from sessionStorage by reconstructing crypto keys
38
+ * so that attestation is NOT required again for the same chatId.
39
+ */
40
+ export const getHydratedSessionByChatId = async (chatId) => {
41
+ try {
42
+ const filePath = getSessionFilePath(chatId);
43
+ if (!fs.existsSync(filePath))
44
+ return undefined;
45
+ const stored = fs.readFileSync(filePath, 'utf8');
46
+ const data = JSON.parse(stored);
47
+ if (!data['sessionId'] || !data['initialized'])
48
+ return undefined;
49
+ if (!data['serverPublicKeys_b64'] || !data['sharedKeys_b64']) {
50
+ console.warn('⚠️ Session is not attestation format or missing required data');
51
+ return undefined;
52
+ }
53
+ if (!data['ecdsaPrivatePkcs8_b64'] || !data['ecdsaPublicSpki_b64']) {
54
+ console.warn('⚠️ Attestation session missing crypto key data');
55
+ return undefined;
56
+ }
57
+ const pkcs8Array = fromB64(data['ecdsaPrivatePkcs8_b64']);
58
+ const spkiArray = fromB64(data['ecdsaPublicSpki_b64']);
59
+ // Reconstruct local keys
60
+ const ecdsaPrivate = await crypto.subtle.importKey('pkcs8', pkcs8Array.slice().buffer, { name: 'ECDSA', namedCurve: 'P-384' }, true, ['sign']);
61
+ const ecdsaPublic = await crypto.subtle.importKey('spki', spkiArray.slice().buffer, { name: 'ECDSA', namedCurve: 'P-384' }, true, ['verify']);
62
+ const ecdhPrivate = await crypto.subtle.importKey('pkcs8', pkcs8Array.slice().buffer, { name: 'ECDH', namedCurve: 'P-384' }, false, ['deriveBits']);
63
+ // Reconstruct server public keys
64
+ const serverPublicKeys = data['serverPublicKeys_b64'].map((keyData) => ({
65
+ id: keyData.id,
66
+ publicKeySpki: fromB64(keyData.publicKeySpki_b64),
67
+ publicKeyPem: keyData.publicKeyPem
68
+ }));
69
+ // Reconstruct shared keys
70
+ const sharedKeys = data['sharedKeys_b64'].map((keyData) => ({
71
+ id: keyData.id,
72
+ sharedKey: fromB64(keyData.sharedKey_b64)
73
+ }));
74
+ // Create ProcessedAttestationData for attestation sessions
75
+ const attestationData = {
76
+ sessionId: data['sessionId'],
77
+ nonce: data['nonce'],
78
+ history: data['history'] || [],
79
+ serverPublicKeys,
80
+ localKeys: { ecdhPrivate, ecdsaPrivate, ecdsaPublic },
81
+ sharedKeys
82
+ };
83
+ const session = {
84
+ sessionId: data['sessionId'],
85
+ initialized: true,
86
+ nonce: data['nonce'],
87
+ history: data['history'] || [],
88
+ serverPublicKeySpki: undefined, // API will select the key
89
+ localKeys: { ecdhPrivate, ecdsaPrivate, ecdsaPublic },
90
+ sharedKey: undefined, // API will select the key
91
+ createdAt: data['createdAt'] || Date.now(),
92
+ };
93
+ // Store the full attestation data for use by StreamingClient
94
+ session.attestationData = attestationData;
95
+ return session;
96
+ }
97
+ catch (error) {
98
+ console.warn('⚠️ Failed to hydrate session from storage:', error);
99
+ console.warn('Error details:', error);
100
+ return undefined;
101
+ }
102
+ };
103
+ /**
104
+ * Initializes a secure session for encrypted communication.
105
+ * Sessions are stored in sessionStorage and keyed by chatId to ensure one session per chat per tab.
106
+ * Attestation happens only once per chatId - subsequent calls reuse existing crypto keys.
107
+ */
108
+ export const initializeSecureSession = async (chatId, systemPrompt) => {
109
+ // First try to hydrate from sessionStorage (includes crypto keys)
110
+ const hydratedSession = await getHydratedSessionByChatId(chatId);
111
+ if (hydratedSession && hydratedSession.initialized) {
112
+ return hydratedSession;
113
+ }
114
+ // Perform attestation
115
+ const attestationData = await performSecureAttestation(systemPrompt);
116
+ // Create session object
117
+ const session = {
118
+ sessionId: attestationData.sessionId,
119
+ initialized: true,
120
+ nonce: attestationData.nonce,
121
+ history: attestationData.history,
122
+ localKeys: attestationData.localKeys,
123
+ createdAt: Date.now(),
124
+ };
125
+ // Store the full attestation data for use by StreamingClient
126
+ session.attestationData = attestationData;
127
+ // Store attestation data in sessionStorage for potential reuse
128
+ try {
129
+ // Store complex attestation data
130
+ const serverPublicKeysB64 = attestationData.serverPublicKeys.map(key => ({
131
+ id: key.id,
132
+ publicKeySpki_b64: toB64(key.publicKeySpki),
133
+ publicKeyPem: key.publicKeyPem
134
+ }));
135
+ const sharedKeysB64 = attestationData.sharedKeys.map(key => ({
136
+ id: key.id,
137
+ sharedKey_b64: toB64(key.sharedKey)
138
+ }));
139
+ const ecdsaPrivPkcs8 = await crypto.subtle.exportKey('pkcs8', attestationData.localKeys.ecdsaPrivate);
140
+ const ecdsaPrivB64 = toB64(new Uint8Array(ecdsaPrivPkcs8));
141
+ const ecdsaPubSpki = await crypto.subtle.exportKey('spki', attestationData.localKeys.ecdsaPublic);
142
+ const ecdsaPubB64 = toB64(new Uint8Array(ecdsaPubSpki));
143
+ const storedObj = {
144
+ sessionId: attestationData.sessionId,
145
+ initialized: true,
146
+ nonce: attestationData.nonce,
147
+ history: attestationData.history,
148
+ createdAt: Date.now(),
149
+ serverPublicKeys_b64: serverPublicKeysB64,
150
+ sharedKeys_b64: sharedKeysB64,
151
+ ecdsaPrivatePkcs8_b64: ecdsaPrivB64,
152
+ ecdsaPublicSpki_b64: ecdsaPubB64
153
+ };
154
+ fs.writeFileSync(getSessionFilePath(chatId), JSON.stringify(storedObj));
155
+ }
156
+ catch (error) {
157
+ console.warn('⚠️ Failed to store session in sessionStorage:', error);
158
+ }
159
+ // Cleanup old sessions
160
+ cleanupOldSessions();
161
+ return session;
162
+ };
163
+ /**
164
+ * Internal cleanup for sessions older than one hour
165
+ */
166
+ const cleanupOldSessions = () => {
167
+ try {
168
+ const oneHourAgo = Date.now() - 60 * 60 * 1000;
169
+ const sessionDir = getSessionStorageDir();
170
+ const files = fs.readdirSync(sessionDir);
171
+ for (const file of files) {
172
+ if (file.startsWith(SESSION_FILE_PREFIX) && file.endsWith('.json')) {
173
+ const filePath = path.join(sessionDir, file);
174
+ try {
175
+ const stored = fs.readFileSync(filePath, 'utf8');
176
+ const session = deserializeSession(stored);
177
+ if (session.createdAt && session.createdAt < oneHourAgo) {
178
+ fs.unlinkSync(filePath);
179
+ }
180
+ }
181
+ catch (_fileError) {
182
+ // If we can't read the file, delete it
183
+ fs.unlinkSync(filePath);
184
+ }
185
+ }
186
+ }
187
+ }
188
+ catch (error) {
189
+ console.warn('⚠️ Failed to cleanup old sessions:', error);
190
+ }
191
+ };
192
+ /**
193
+ * Initializes session cleanup on page load and sets up cleanup on page unload
194
+ * Call this once when the app starts to ensure proper session lifecycle management
195
+ */
196
+ export const initializeSessionCleanup = () => {
197
+ // Cleanup old sessions on page load
198
+ cleanupOldSessions();
199
+ // Setup cleanup on page unload (when user closes tab or navigates away)
200
+ const handleBeforeUnload = () => {
201
+ try {
202
+ // Optional: You could implement more aggressive cleanup here
203
+ // For now, we rely on the time-based cleanup
204
+ console.log('🔄 Page unloading, sessions will be cleaned up on next load');
205
+ }
206
+ catch (error) {
207
+ console.warn('⚠️ Error during page unload cleanup:', error);
208
+ }
209
+ };
210
+ // Add event listener for page unload
211
+ if (typeof window !== 'undefined') {
212
+ window.addEventListener('beforeunload', handleBeforeUnload);
213
+ // Also cleanup when the page becomes hidden (mobile browsers)
214
+ document.addEventListener('visibilitychange', () => {
215
+ if (document.hidden) {
216
+ cleanupOldSessions();
217
+ }
218
+ });
219
+ }
220
+ };
221
+ //# sourceMappingURL=sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../../src/encrypt/sessions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { type FileData, type ProcessedAttestationData } from './types.js';
2
+ interface ChatMessage {
3
+ role: 'system' | 'user' | 'assistant';
4
+ content: string;
5
+ image_url?: string;
6
+ }
7
+ /**
8
+ * StreamingClient handles the complete encrypted streaming protocol
9
+ */
10
+ export declare class StreamingClient {
11
+ private baseUrl;
12
+ private initialized;
13
+ private nonce;
14
+ private history;
15
+ private attestationData?;
16
+ constructor(baseUrl: string, _attestationUrl: string, systemPrompt?: string);
17
+ /**
18
+ * Initialize from existing session data (avoids re-attestation)
19
+ * Now uses the session management layer
20
+ */
21
+ initializeFromSession(sessionData: {
22
+ sessionId: string;
23
+ nonce: number;
24
+ history: ChatMessage[];
25
+ attestationData: ProcessedAttestationData;
26
+ }): void;
27
+ sendMessageStream(userText: string, fileData?: FileData, retryAttempt?: number): Promise<ReadableStream<Uint8Array>>;
28
+ }
29
+ export {};