@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.
- 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 +11 -5
- 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/coreToolScheduler.js +2 -2
- package/dist/src/core/coreToolScheduler.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 +22 -8
- package/dist/src/core/openaiContentGenerator/pipeline.js.map +1 -1
- package/dist/src/core/openaiContentGenerator/pipeline.test.js +51 -0
- package/dist/src/core/openaiContentGenerator/pipeline.test.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 +18 -1
- package/dist/src/core/prompts.js +388 -459
- 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 +23 -2
- package/dist/src/tools/browser_use.js +424 -43
- 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/exitPlanMode.js +1 -1
- package/dist/src/tools/exitPlanMode.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/todoWrite.js +0 -142
- package/dist/src/tools/todoWrite.js.map +1 -1
- 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 +19 -6
- 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,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { EncryptedTurn } from './encryptedTurn.js';
|
|
7
|
+
import { getCoreSystemPrompt } from './prompts.js';
|
|
8
|
+
import { ApprovalMode } from '../config/config.js';
|
|
9
|
+
import { getEnvironmentContext } from '../utils/environmentContext.js';
|
|
10
|
+
/**
|
|
11
|
+
* EncryptedGeminiClient provides the same interface as GeminiClient
|
|
12
|
+
* but routes requests through the encrypted provider and emits the correct events
|
|
13
|
+
* for tool execution.
|
|
14
|
+
*/
|
|
15
|
+
export class EncryptedGeminiClient {
|
|
16
|
+
encryptedService;
|
|
17
|
+
config;
|
|
18
|
+
tools = [];
|
|
19
|
+
constructor(encryptedService, config) {
|
|
20
|
+
this.encryptedService = encryptedService;
|
|
21
|
+
this.config = config;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Set the available tools for this client
|
|
25
|
+
*/
|
|
26
|
+
setTools(tools) {
|
|
27
|
+
this.tools = tools;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Send a message and get streaming events that match the regular GeminiClient interface
|
|
31
|
+
* This is the key method that bridges the encrypted provider with the event system
|
|
32
|
+
*/
|
|
33
|
+
async *sendMessageStream(request, signal, prompt_id) {
|
|
34
|
+
try {
|
|
35
|
+
// Convert request to text
|
|
36
|
+
const messageText = this.convertRequestToText(request);
|
|
37
|
+
// Create tools system prompt if we have tools
|
|
38
|
+
const toolsSystemPrompt = EncryptedTurn.createToolsSystemPrompt(this.tools, 'deepseek');
|
|
39
|
+
const messageWithTools = toolsSystemPrompt ? `${toolsSystemPrompt}\n\n${messageText}` : messageText;
|
|
40
|
+
// Initialize the encrypted service if needed
|
|
41
|
+
if (!this.encryptedService.isReady()) {
|
|
42
|
+
// Use the same core system prompt as Gemini, combined with tools
|
|
43
|
+
const coreSystemPrompt = await this.getCoreSystemPrompt();
|
|
44
|
+
const fullSystemPrompt = toolsSystemPrompt
|
|
45
|
+
? `${coreSystemPrompt}\n\n${toolsSystemPrompt}`
|
|
46
|
+
: coreSystemPrompt;
|
|
47
|
+
await this.encryptedService.initialize(fullSystemPrompt);
|
|
48
|
+
}
|
|
49
|
+
// Send message through encrypted service
|
|
50
|
+
const encryptedStream = await this.encryptedService.sendMessage(messageWithTools);
|
|
51
|
+
// Read the entire response
|
|
52
|
+
const reader = encryptedStream.getReader();
|
|
53
|
+
const decoder = new TextDecoder();
|
|
54
|
+
let fullResponse = '';
|
|
55
|
+
try {
|
|
56
|
+
while (true) {
|
|
57
|
+
if (signal.aborted) {
|
|
58
|
+
yield { type: 'user_cancelled' };
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const { done, value } = await reader.read();
|
|
62
|
+
if (done)
|
|
63
|
+
break;
|
|
64
|
+
const chunk = decoder.decode(value, { stream: true });
|
|
65
|
+
fullResponse += chunk;
|
|
66
|
+
// Yield content events for streaming text (without tool calls)
|
|
67
|
+
if (!this.containsToolCalls(chunk)) {
|
|
68
|
+
yield {
|
|
69
|
+
type: 'content',
|
|
70
|
+
value: chunk
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
reader.releaseLock();
|
|
77
|
+
}
|
|
78
|
+
// Process the complete response through EncryptedTurn to emit tool events
|
|
79
|
+
const encryptedTurn = new EncryptedTurn(this, prompt_id);
|
|
80
|
+
// Only process for tool calls if we have tools and the response contains tool calls
|
|
81
|
+
if (this.tools.length > 0 && this.containsToolCalls(fullResponse)) {
|
|
82
|
+
// Process the response and emit tool call events
|
|
83
|
+
for await (const event of encryptedTurn.processEncryptedResponse(fullResponse, true)) {
|
|
84
|
+
// Skip content events since we already yielded them during streaming
|
|
85
|
+
if (event.type !== 'content') {
|
|
86
|
+
yield event;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
// No tool calls, just emit finished event
|
|
92
|
+
yield {
|
|
93
|
+
type: 'finished',
|
|
94
|
+
value: 'STOP'
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
console.error('❌ EncryptedGeminiClient.sendMessageStream failed:', error);
|
|
100
|
+
yield {
|
|
101
|
+
type: 'error',
|
|
102
|
+
value: {
|
|
103
|
+
error: {
|
|
104
|
+
message: error instanceof Error ? error.message : 'Unknown error in encrypted provider',
|
|
105
|
+
status: 500
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Convert PartListUnion request to text string
|
|
113
|
+
*/
|
|
114
|
+
convertRequestToText(request) {
|
|
115
|
+
if (typeof request === 'string') {
|
|
116
|
+
return request;
|
|
117
|
+
}
|
|
118
|
+
if (Array.isArray(request)) {
|
|
119
|
+
return request
|
|
120
|
+
.map(part => {
|
|
121
|
+
if (typeof part === 'string') {
|
|
122
|
+
return part;
|
|
123
|
+
}
|
|
124
|
+
else if (part && typeof part === 'object' && 'text' in part) {
|
|
125
|
+
return part.text;
|
|
126
|
+
}
|
|
127
|
+
else if (part && typeof part === 'object' && 'functionResponse' in part) {
|
|
128
|
+
// Handle function response parts
|
|
129
|
+
const funcResp = part.functionResponse;
|
|
130
|
+
return `Function ${funcResp?.name} returned: ${JSON.stringify(funcResp?.response)}`;
|
|
131
|
+
}
|
|
132
|
+
return '';
|
|
133
|
+
})
|
|
134
|
+
.join('\n');
|
|
135
|
+
}
|
|
136
|
+
return String(request);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Check if text contains tool call markup
|
|
140
|
+
*/
|
|
141
|
+
containsToolCalls(text) {
|
|
142
|
+
return text.includes('<tool_call>') ||
|
|
143
|
+
text.includes('<|tool▁calls▁begin|>') ||
|
|
144
|
+
text.includes('<|tool▁call▁begin|>');
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get available tools
|
|
148
|
+
*/
|
|
149
|
+
getTools() {
|
|
150
|
+
return this.tools;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Check if client is ready
|
|
154
|
+
*/
|
|
155
|
+
isReady() {
|
|
156
|
+
return this.encryptedService.isReady();
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Get the core system prompt like Gemini does
|
|
160
|
+
*/
|
|
161
|
+
async getCoreSystemPrompt() {
|
|
162
|
+
if (!this.config) {
|
|
163
|
+
return 'You are a helpful AI assistant.';
|
|
164
|
+
}
|
|
165
|
+
const userMemory = this.config.getUserMemory();
|
|
166
|
+
const coreSystemPrompt = getCoreSystemPrompt(userMemory, {}, this.config.getModel(), this.config.getApprovalMode() === ApprovalMode.YOLO);
|
|
167
|
+
// CRITICAL FIX: Include environment context like regular Gemini does
|
|
168
|
+
const envParts = await getEnvironmentContext(this.config);
|
|
169
|
+
const environmentContext = envParts.map(part => typeof part === 'string' ? part : part.text || '').join('\n');
|
|
170
|
+
// Combine core system prompt with environment context (like regular Gemini)
|
|
171
|
+
const systemPromptWithEnvironment = environmentContext.trim()
|
|
172
|
+
? `${coreSystemPrompt}\n\n${environmentContext}`
|
|
173
|
+
: coreSystemPrompt;
|
|
174
|
+
return systemPromptWithEnvironment;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=encryptedGeminiClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryptedGeminiClient.js","sourceRoot":"","sources":["../../../src/core/encryptedGeminiClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import type { PartListUnion, FunctionDeclaration, Content } from '@google/genai';
|
|
7
|
+
import type { ServerGeminiStreamEvent } from './turn.js';
|
|
8
|
+
import type { Config } from '../config/config.js';
|
|
9
|
+
/**
|
|
10
|
+
* Interface for the encrypted chat service
|
|
11
|
+
*/
|
|
12
|
+
export interface EncryptedChatService {
|
|
13
|
+
sendMessage(message: string, messageHistory?: Array<{
|
|
14
|
+
role: 'system' | 'user' | 'assistant';
|
|
15
|
+
content: string;
|
|
16
|
+
}>): Promise<ReadableStream<Uint8Array>>;
|
|
17
|
+
sendMessageWithToolResults(message: string, toolResults: Array<{
|
|
18
|
+
toolName: string;
|
|
19
|
+
result: unknown;
|
|
20
|
+
callId?: string;
|
|
21
|
+
}>, messageHistory?: Array<{
|
|
22
|
+
role: 'system' | 'user' | 'assistant';
|
|
23
|
+
content: string;
|
|
24
|
+
}>): Promise<ReadableStream<Uint8Array>>;
|
|
25
|
+
initialize(systemPrompt?: string): Promise<void>;
|
|
26
|
+
isReady(): boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* EncryptedGeminiClientBridge provides a bridge between the encrypted provider
|
|
30
|
+
* and the existing GeminiClient interface, enabling tool execution through
|
|
31
|
+
* the event-based system that the UI layer expects.
|
|
32
|
+
*/
|
|
33
|
+
export declare class EncryptedGeminiClientBridge {
|
|
34
|
+
private readonly encryptedService;
|
|
35
|
+
private readonly config?;
|
|
36
|
+
private tools;
|
|
37
|
+
private history;
|
|
38
|
+
private pendingToolResults;
|
|
39
|
+
private messageTruncator;
|
|
40
|
+
constructor(encryptedService: EncryptedChatService, config?: Config | undefined);
|
|
41
|
+
/**
|
|
42
|
+
* Set the available tools for this client
|
|
43
|
+
*/
|
|
44
|
+
setTools(tools: FunctionDeclaration[]): void;
|
|
45
|
+
/**
|
|
46
|
+
* Add content to history
|
|
47
|
+
*/
|
|
48
|
+
addHistory(content: Content): void;
|
|
49
|
+
/**
|
|
50
|
+
* Get current history
|
|
51
|
+
*/
|
|
52
|
+
getHistory(): Content[];
|
|
53
|
+
/**
|
|
54
|
+
* Send a message and get streaming events that match the regular GeminiClient interface
|
|
55
|
+
* This is the key method that bridges the encrypted provider with the event system
|
|
56
|
+
*/
|
|
57
|
+
sendMessageStream(request: PartListUnion, signal: AbortSignal, prompt_id: string): AsyncGenerator<ServerGeminiStreamEvent>;
|
|
58
|
+
/**
|
|
59
|
+
* Convert PartListUnion request to text string
|
|
60
|
+
*/
|
|
61
|
+
private convertRequestToText;
|
|
62
|
+
/**
|
|
63
|
+
* Convert Content[] history to message format expected by EncryptedChatService
|
|
64
|
+
* Now uses TOKEN-BASED truncation like the normal Blackbox provider
|
|
65
|
+
*/
|
|
66
|
+
private convertHistoryToMessageFormat;
|
|
67
|
+
/**
|
|
68
|
+
* Check if text contains tool call markup
|
|
69
|
+
*/
|
|
70
|
+
private containsToolCalls;
|
|
71
|
+
/**
|
|
72
|
+
* Get available tools
|
|
73
|
+
*/
|
|
74
|
+
getTools(): FunctionDeclaration[];
|
|
75
|
+
/**
|
|
76
|
+
* Add tool execution result for processing
|
|
77
|
+
*/
|
|
78
|
+
addToolResult(callId: string, toolName: string, result: unknown): void;
|
|
79
|
+
/**
|
|
80
|
+
* Send tool results back to encrypted service and continue conversation
|
|
81
|
+
*/
|
|
82
|
+
sendToolResultsAndContinue(signal: AbortSignal, prompt_id: string): AsyncGenerator<ServerGeminiStreamEvent>;
|
|
83
|
+
/**
|
|
84
|
+
* Format tool results into a readable message
|
|
85
|
+
*/
|
|
86
|
+
private formatToolResultsMessage;
|
|
87
|
+
/**
|
|
88
|
+
* Check if there are pending tool results
|
|
89
|
+
*/
|
|
90
|
+
hasPendingToolResults(): boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Clear pending tool results
|
|
93
|
+
*/
|
|
94
|
+
clearPendingToolResults(): void;
|
|
95
|
+
/**
|
|
96
|
+
* Reset all chat history and state
|
|
97
|
+
*/
|
|
98
|
+
resetHistory(): void;
|
|
99
|
+
/**
|
|
100
|
+
* Check if client is ready
|
|
101
|
+
*/
|
|
102
|
+
isReady(): boolean;
|
|
103
|
+
/**
|
|
104
|
+
* Format think content with special styling to distinguish from assistant messages
|
|
105
|
+
*/
|
|
106
|
+
private formatThinkContent;
|
|
107
|
+
}
|