@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.
- package/README.md +11 -183
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/src/blackbox/blackboxOAuth2.js +17 -1
- package/dist/src/blackbox/blackboxOAuth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.js +15 -3
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/config/blackboxModels.d.ts +3 -2
- package/dist/src/config/blackboxModels.js +262 -33
- package/dist/src/config/blackboxModels.js.map +1 -1
- package/dist/src/config/config.d.ts +65 -0
- package/dist/src/config/config.js +282 -17
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/models.d.ts +1 -1
- package/dist/src/config/models.js +1 -1
- package/dist/src/config/models.js.map +1 -1
- package/dist/src/config/multiAgentModels.d.ts +63 -0
- package/dist/src/config/multiAgentModels.js +194 -0
- package/dist/src/config/multiAgentModels.js.map +1 -0
- package/dist/src/core/client.js +8 -2
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/contentGenerator.d.ts +1 -0
- package/dist/src/core/contentGenerator.js +57 -7
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/encryptedClientFactory.d.ts +17 -0
- package/dist/src/core/encryptedClientFactory.js +92 -0
- package/dist/src/core/encryptedClientFactory.js.map +1 -0
- package/dist/src/core/encryptedContentGenerator.d.ts +47 -0
- package/dist/src/core/encryptedContentGenerator.js +445 -0
- package/dist/src/core/encryptedContentGenerator.js.map +1 -0
- package/dist/src/core/encryptedGeminiClient.d.ts +59 -0
- package/dist/src/core/encryptedGeminiClient.js +177 -0
- package/dist/src/core/encryptedGeminiClient.js.map +1 -0
- package/dist/src/core/encryptedGeminiClientBridge.d.ts +107 -0
- package/dist/src/core/encryptedGeminiClientBridge.js +808 -0
- package/dist/src/core/encryptedGeminiClientBridge.js.map +1 -0
- package/dist/src/core/encryptedGeminiClientWrapper.d.ts +129 -0
- package/dist/src/core/encryptedGeminiClientWrapper.js +305 -0
- package/dist/src/core/encryptedGeminiClientWrapper.js.map +1 -0
- package/dist/src/core/encryptedTurn.d.ts +40 -0
- package/dist/src/core/encryptedTurn.js +114 -0
- package/dist/src/core/encryptedTurn.js.map +1 -0
- package/dist/src/core/logger.d.ts +21 -0
- package/dist/src/core/logger.js +110 -0
- package/dist/src/core/logger.js.map +1 -1
- package/dist/src/core/openaiContentGenerator/constants.d.ts +2 -0
- package/dist/src/core/openaiContentGenerator/constants.js +2 -0
- package/dist/src/core/openaiContentGenerator/constants.js.map +1 -1
- package/dist/src/core/openaiContentGenerator/converter.d.ts +16 -1
- package/dist/src/core/openaiContentGenerator/converter.js +135 -4
- package/dist/src/core/openaiContentGenerator/converter.js.map +1 -1
- package/dist/src/core/openaiContentGenerator/pipeline.js +6 -2
- package/dist/src/core/openaiContentGenerator/pipeline.js.map +1 -1
- package/dist/src/core/openaiContentGenerator/provider/default.js +10 -1
- package/dist/src/core/openaiContentGenerator/provider/default.js.map +1 -1
- package/dist/src/core/prompts.d.ts +17 -0
- package/dist/src/core/prompts.js +347 -19
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/tokenLimits.d.ts +1 -0
- package/dist/src/core/tokenLimits.js +37 -2
- package/dist/src/core/tokenLimits.js.map +1 -1
- package/dist/src/core/tokenLimits.test.js +36 -1
- package/dist/src/core/tokenLimits.test.js.map +1 -1
- package/dist/src/encrypt/attestation.d.ts +5 -0
- package/dist/src/encrypt/attestation.js +100 -0
- package/dist/src/encrypt/attestation.js.map +1 -0
- package/dist/src/encrypt/client.d.ts +14 -0
- package/dist/src/encrypt/client.js +132 -0
- package/dist/src/encrypt/client.js.map +1 -0
- package/dist/src/encrypt/config.d.ts +22 -0
- package/dist/src/encrypt/config.js +43 -0
- package/dist/src/encrypt/config.js.map +1 -0
- package/dist/src/encrypt/crypto-utils.d.ts +57 -0
- package/dist/src/encrypt/crypto-utils.js +257 -0
- package/dist/src/encrypt/crypto-utils.js.map +1 -0
- package/dist/src/encrypt/history-manager.d.ts +43 -0
- package/dist/src/encrypt/history-manager.js +164 -0
- package/dist/src/encrypt/history-manager.js.map +1 -0
- package/dist/src/encrypt/minimax-template.d.ts +73 -0
- package/dist/src/encrypt/minimax-template.js +276 -0
- package/dist/src/encrypt/minimax-template.js.map +1 -0
- package/dist/src/encrypt/sessions.d.ts +17 -0
- package/dist/src/encrypt/sessions.js +221 -0
- package/dist/src/encrypt/sessions.js.map +1 -0
- package/dist/src/encrypt/streaming-client.d.ts +29 -0
- package/dist/src/encrypt/streaming-client.js +232 -0
- package/dist/src/encrypt/streaming-client.js.map +1 -0
- package/dist/src/encrypt/tool-formatter.d.ts +36 -0
- package/dist/src/encrypt/tool-formatter.js +353 -0
- package/dist/src/encrypt/tool-formatter.js.map +1 -0
- package/dist/src/encrypt/tool-parser.d.ts +93 -0
- package/dist/src/encrypt/tool-parser.js +567 -0
- package/dist/src/encrypt/tool-parser.js.map +1 -0
- package/dist/src/encrypt/types.d.ts +81 -0
- package/dist/src/encrypt/types.js +2 -0
- package/dist/src/encrypt/types.js.map +1 -0
- package/dist/src/generated/git-commit.d.ts +3 -3
- package/dist/src/generated/git-commit.js +3 -3
- package/dist/src/ide/ide-client.js +9 -19
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/index.d.ts +15 -0
- package/dist/src/index.js +15 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/oauth-provider.js +2 -6
- package/dist/src/mcp/oauth-provider.js.map +1 -1
- package/dist/src/mcp/oauth-token-storage.d.ts +7 -0
- package/dist/src/mcp/oauth-token-storage.js +24 -0
- package/dist/src/mcp/oauth-token-storage.js.map +1 -1
- package/dist/src/services/EncryptedChatService.d.ts +80 -0
- package/dist/src/services/EncryptedChatService.js +202 -0
- package/dist/src/services/EncryptedChatService.js.map +1 -0
- package/dist/src/services/StatsHistoryService.d.ts +131 -0
- package/dist/src/services/StatsHistoryService.js +427 -0
- package/dist/src/services/StatsHistoryService.js.map +1 -0
- package/dist/src/services/checkpointApiService.d.ts +101 -0
- package/dist/src/services/checkpointApiService.js +215 -0
- package/dist/src/services/checkpointApiService.js.map +1 -0
- package/dist/src/services/environmentSanitization.d.ts +24 -0
- package/dist/src/services/environmentSanitization.js +152 -0
- package/dist/src/services/environmentSanitization.js.map +1 -0
- package/dist/src/telemetry/blackbox-logger/blackbox-logger.d.ts +2 -6
- package/dist/src/telemetry/blackbox-logger/blackbox-logger.js +29 -135
- package/dist/src/telemetry/blackbox-logger/blackbox-logger.js.map +1 -1
- package/dist/src/telemetry/blackbox-logger/blackbox-logger.test.js +1 -1
- package/dist/src/telemetry/blackbox-logger/blackbox-logger.test.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.d.ts +8 -0
- package/dist/src/telemetry/uiTelemetry.js +17 -0
- package/dist/src/telemetry/uiTelemetry.js.map +1 -1
- package/dist/src/tools/browser-interactive.d.ts +63 -0
- package/dist/src/tools/browser-interactive.js +394 -0
- package/dist/src/tools/browser-interactive.js.map +1 -0
- package/dist/src/tools/browser_use.d.ts +22 -1
- package/dist/src/tools/browser_use.js +403 -23
- package/dist/src/tools/browser_use.js.map +1 -1
- package/dist/src/tools/data-file-constants.d.ts +17 -0
- package/dist/src/tools/data-file-constants.js +30 -0
- package/dist/src/tools/data-file-constants.js.map +1 -0
- package/dist/src/tools/edit.js +44 -7
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/ls.js +40 -6
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/ls.test.js +4 -4
- package/dist/src/tools/ls.test.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.d.ts +28 -2
- package/dist/src/tools/mcp-client-manager.js +62 -4
- package/dist/src/tools/mcp-client-manager.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +5 -3
- package/dist/src/tools/mcp-client.js +39 -11
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +3 -1
- package/dist/src/tools/mcp-tool.js +37 -9
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/memoryTool.d.ts +14 -4
- package/dist/src/tools/memoryTool.js +98 -39
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/read-data-file.d.ts +31 -0
- package/dist/src/tools/read-data-file.js +469 -0
- package/dist/src/tools/read-data-file.js.map +1 -0
- package/dist/src/tools/read-file.js +64 -5
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-file.test.js +40 -6
- package/dist/src/tools/read-file.test.js.map +1 -1
- package/dist/src/tools/shell.d.ts +3 -1
- package/dist/src/tools/shell.js +25 -4
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/skill.d.ts +34 -0
- package/dist/src/tools/skill.js +143 -0
- package/dist/src/tools/skill.js.map +1 -0
- package/dist/src/tools/sql_db.d.ts +101 -0
- package/dist/src/tools/sql_db.js +1033 -0
- package/dist/src/tools/sql_db.js.map +1 -0
- package/dist/src/tools/sql_db_configure.d.ts +18 -0
- package/dist/src/tools/sql_db_configure.js +96 -0
- package/dist/src/tools/sql_db_configure.js.map +1 -0
- package/dist/src/tools/taskCompletion.d.ts +29 -0
- package/dist/src/tools/taskCompletion.js +231 -0
- package/dist/src/tools/taskCompletion.js.map +1 -0
- package/dist/src/tools/tool-error.d.ts +3 -1
- package/dist/src/tools/tool-error.js +3 -0
- package/dist/src/tools/tool-error.js.map +1 -1
- package/dist/src/tools/tool-names.d.ts +8 -0
- package/dist/src/tools/tool-names.js +8 -0
- package/dist/src/tools/tool-names.js.map +1 -1
- package/dist/src/tools/tool-registry.d.ts +22 -0
- package/dist/src/tools/tool-registry.js +41 -1
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tools.d.ts +18 -2
- package/dist/src/tools/tools.js +3 -0
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/web-fetch.js +24 -4
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/web-search.js +160 -2
- package/dist/src/tools/web-search.js.map +1 -1
- package/dist/src/tools/workspace-error-helper.d.ts +9 -0
- package/dist/src/tools/workspace-error-helper.js +43 -0
- package/dist/src/tools/workspace-error-helper.js.map +1 -0
- package/dist/src/tools/workspace-error-helper.test.js +85 -0
- package/dist/src/tools/workspace-error-helper.test.js.map +1 -0
- package/dist/src/tools/write-file.js +42 -7
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/utils/environmentContext.js +3 -1
- package/dist/src/utils/environmentContext.js.map +1 -1
- package/dist/src/utils/environmentContext.test.js +3 -2
- package/dist/src/utils/environmentContext.test.js.map +1 -1
- package/dist/src/utils/fetch.d.ts +3 -1
- package/dist/src/utils/fetch.js +35 -2
- package/dist/src/utils/fetch.js.map +1 -1
- package/dist/src/utils/fileUtils.js +30 -3
- package/dist/src/utils/fileUtils.js.map +1 -1
- package/dist/src/utils/filesearch/fileSearch.d.ts +2 -0
- package/dist/src/utils/filesearch/fileSearch.js +38 -7
- package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
- package/dist/src/utils/git-worktree-utils.d.ts +56 -0
- package/dist/src/utils/git-worktree-utils.js +176 -0
- package/dist/src/utils/git-worktree-utils.js.map +1 -0
- package/dist/src/utils/imageCompression.d.ts +34 -0
- package/dist/src/utils/imageCompression.js +170 -0
- package/dist/src/utils/imageCompression.js.map +1 -0
- package/dist/src/utils/messageTruncator.d.ts +51 -0
- package/dist/src/utils/messageTruncator.js +346 -0
- package/dist/src/utils/messageTruncator.js.map +1 -0
- package/dist/src/utils/pathReader.js +26 -6
- package/dist/src/utils/pathReader.js.map +1 -1
- package/dist/src/utils/skill.d.ts +65 -0
- package/dist/src/utils/skill.js +241 -0
- package/dist/src/utils/skill.js.map +1 -0
- package/dist/src/utils/textCleaning.d.ts +51 -0
- package/dist/src/utils/textCleaning.js +327 -0
- package/dist/src/utils/textCleaning.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +16 -2
- package/dist/src/tools/mcp-client-manager.test.js +0 -39
- package/dist/src/tools/mcp-client-manager.test.js.map +0 -1
- package/dist/src/tools/mcp-client.test.d.ts +0 -6
- package/dist/src/tools/mcp-client.test.js +0 -454
- package/dist/src/tools/mcp-client.test.js.map +0 -1
- package/dist/src/tools/mcp-tool.test.d.ts +0 -6
- package/dist/src/tools/mcp-tool.test.js +0 -576
- package/dist/src/tools/mcp-tool.test.js.map +0 -1
- package/dist/src/tools/memoryTool.test.d.ts +0 -6
- package/dist/src/tools/memoryTool.test.js +0 -420
- package/dist/src/tools/memoryTool.test.js.map +0 -1
- package/dist/src/tools/tool-registry.test.d.ts +0 -6
- package/dist/src/tools/tool-registry.test.js +0 -332
- package/dist/src/tools/tool-registry.test.js.map +0 -1
- /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 {};
|