@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-token-storage.js","sourceRoot":"","sources":["../../../src/mcp/oauth-token-storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD;;GAEG;AACH,MAAM,OAAO,oBAAoB;IAC/B;;;;OAIG;IACK,MAAM,CAAC,gBAAgB;QAC7B,OAAO,OAAO,CAAC,qBAAqB,EAAE,CAAC;IACzC,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,KAAK,CAAC,eAAe;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACxD,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"oauth-token-storage.js","sourceRoot":"","sources":["../../../src/mcp/oauth-token-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import type { FileData, SecureSession } from '../encrypt/types.js';
|
|
7
|
+
/**
|
|
8
|
+
* EncryptedChatService handles encrypted chat sessions and message streaming
|
|
9
|
+
* This service integrates the encryption system with the CLI chat interface
|
|
10
|
+
*/
|
|
11
|
+
export declare class EncryptedChatService {
|
|
12
|
+
private chatId;
|
|
13
|
+
private session?;
|
|
14
|
+
private ready;
|
|
15
|
+
constructor(chatId?: string);
|
|
16
|
+
/**
|
|
17
|
+
* Generate a unique chat ID
|
|
18
|
+
*/
|
|
19
|
+
private generateChatId;
|
|
20
|
+
/**
|
|
21
|
+
* Get the current chat ID
|
|
22
|
+
*/
|
|
23
|
+
getChatId(): string;
|
|
24
|
+
/**
|
|
25
|
+
* Check if the service is ready for encrypted communication
|
|
26
|
+
*/
|
|
27
|
+
isReady(): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Initialize the encrypted session
|
|
30
|
+
*/
|
|
31
|
+
initialize(systemPrompt?: string): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Send an encrypted message and get streaming response
|
|
34
|
+
*/
|
|
35
|
+
sendMessage(message: string, messageHistory?: Array<{
|
|
36
|
+
role: 'system' | 'user' | 'assistant';
|
|
37
|
+
content: string;
|
|
38
|
+
}>, fileData?: FileData): Promise<ReadableStream<Uint8Array>>;
|
|
39
|
+
/**
|
|
40
|
+
* Send an encrypted message with tool results and get streaming response
|
|
41
|
+
* This method handles tool execution results in the encrypted channel
|
|
42
|
+
*/
|
|
43
|
+
sendMessageWithToolResults(message: string, toolResults: Array<{
|
|
44
|
+
toolName: string;
|
|
45
|
+
result: unknown;
|
|
46
|
+
callId?: string;
|
|
47
|
+
}>, messageHistory?: Array<{
|
|
48
|
+
role: 'system' | 'user' | 'assistant';
|
|
49
|
+
content: string;
|
|
50
|
+
}>, fileData?: FileData): Promise<ReadableStream<Uint8Array>>;
|
|
51
|
+
/**
|
|
52
|
+
* Format tool results for inclusion in encrypted messages
|
|
53
|
+
*/
|
|
54
|
+
private formatToolResults;
|
|
55
|
+
/**
|
|
56
|
+
* Get the current session
|
|
57
|
+
*/
|
|
58
|
+
getSession(): SecureSession | undefined;
|
|
59
|
+
/**
|
|
60
|
+
* Static method to check if a model requires encryption
|
|
61
|
+
*/
|
|
62
|
+
static isEncryptedModel(modelName: string): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Create a fallback stream when encryption fails
|
|
65
|
+
*/
|
|
66
|
+
static createFallbackStream(message: string, error: Error): ReadableStream<Uint8Array>;
|
|
67
|
+
/**
|
|
68
|
+
* Reset the service (clear session)
|
|
69
|
+
*/
|
|
70
|
+
reset(): void;
|
|
71
|
+
/**
|
|
72
|
+
* Get session statistics
|
|
73
|
+
*/
|
|
74
|
+
getSessionStats(): {
|
|
75
|
+
chatId: string;
|
|
76
|
+
initialized: boolean;
|
|
77
|
+
messageCount: number;
|
|
78
|
+
sessionAge: number;
|
|
79
|
+
};
|
|
80
|
+
}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { isEncryptedModel } from '../encrypt/config.js';
|
|
7
|
+
import { initializeSecureSession, getHydratedSessionByChatId } from '../encrypt/sessions.js';
|
|
8
|
+
import { sendMessageStream } from '../encrypt/client.js';
|
|
9
|
+
/**
|
|
10
|
+
* EncryptedChatService handles encrypted chat sessions and message streaming
|
|
11
|
+
* This service integrates the encryption system with the CLI chat interface
|
|
12
|
+
*/
|
|
13
|
+
export class EncryptedChatService {
|
|
14
|
+
chatId;
|
|
15
|
+
session;
|
|
16
|
+
ready = false;
|
|
17
|
+
constructor(chatId) {
|
|
18
|
+
this.chatId = chatId || this.generateChatId();
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Generate a unique chat ID
|
|
22
|
+
*/
|
|
23
|
+
generateChatId() {
|
|
24
|
+
return `chat_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get the current chat ID
|
|
28
|
+
*/
|
|
29
|
+
getChatId() {
|
|
30
|
+
return this.chatId;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Check if the service is ready for encrypted communication
|
|
34
|
+
*/
|
|
35
|
+
isReady() {
|
|
36
|
+
return this.ready && !!this.session?.initialized;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Initialize the encrypted session
|
|
40
|
+
*/
|
|
41
|
+
async initialize(systemPrompt) {
|
|
42
|
+
try {
|
|
43
|
+
// Try to get existing session first
|
|
44
|
+
this.session = await getHydratedSessionByChatId(this.chatId);
|
|
45
|
+
if (!this.session || !this.session.initialized) {
|
|
46
|
+
// Create new session if none exists or not initialized
|
|
47
|
+
this.session = await initializeSecureSession(this.chatId, systemPrompt);
|
|
48
|
+
}
|
|
49
|
+
this.ready = true;
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
console.error('❌ Failed to initialize encrypted session:', error);
|
|
53
|
+
this.ready = false;
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Send an encrypted message and get streaming response
|
|
59
|
+
*/
|
|
60
|
+
async sendMessage(message, messageHistory, fileData) {
|
|
61
|
+
if (!this.isReady()) {
|
|
62
|
+
throw new Error('EncryptedChatService not initialized. Call initialize() first.');
|
|
63
|
+
}
|
|
64
|
+
// Validate message is not empty
|
|
65
|
+
if (!message || message.trim().length === 0) {
|
|
66
|
+
throw new Error('Message cannot be empty');
|
|
67
|
+
}
|
|
68
|
+
// Ensure we have a valid message history array
|
|
69
|
+
const validMessageHistory = messageHistory || [];
|
|
70
|
+
try {
|
|
71
|
+
return await sendMessageStream(this.chatId, message, validMessageHistory, fileData);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
console.error('❌ Failed to send encrypted message:', error);
|
|
75
|
+
// Throw the actual error instead of creating a fallback stream
|
|
76
|
+
// This allows the model to learn from real errors
|
|
77
|
+
if (error instanceof Error) {
|
|
78
|
+
const enhancedError = new Error(`Failed: ${error.message}`);
|
|
79
|
+
enhancedError.stack = error.stack;
|
|
80
|
+
enhancedError.cause = error;
|
|
81
|
+
throw enhancedError;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
throw new Error(`Failed with unknown error: ${String(error)}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Send an encrypted message with tool results and get streaming response
|
|
90
|
+
* This method handles tool execution results in the encrypted channel
|
|
91
|
+
*/
|
|
92
|
+
async sendMessageWithToolResults(message, toolResults, messageHistory, fileData) {
|
|
93
|
+
if (!this.isReady()) {
|
|
94
|
+
throw new Error('EncryptedChatService not initialized. Call initialize() first.');
|
|
95
|
+
}
|
|
96
|
+
// Format tool results for the encrypted channel
|
|
97
|
+
const toolResultsText = this.formatToolResults(toolResults);
|
|
98
|
+
// Combine the original message with tool results
|
|
99
|
+
const enhancedMessage = `${message}\n\n**Tool Results:**\n${toolResultsText}`;
|
|
100
|
+
// Ensure we have a valid message history array
|
|
101
|
+
const validMessageHistory = messageHistory || [];
|
|
102
|
+
try {
|
|
103
|
+
return await sendMessageStream(this.chatId, enhancedMessage, validMessageHistory, fileData);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
console.error('❌ Failed to send encrypted message with tool results:', error);
|
|
107
|
+
// Throw the actual error instead of creating a fallback stream
|
|
108
|
+
// This allows the model to learn from real errors
|
|
109
|
+
if (error instanceof Error) {
|
|
110
|
+
const enhancedError = new Error(`Tool results failed: ${error.message}`);
|
|
111
|
+
enhancedError.stack = error.stack;
|
|
112
|
+
enhancedError.cause = error;
|
|
113
|
+
throw enhancedError;
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
throw new Error(`Tool results failed with unknown error: ${String(error)}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Format tool results for inclusion in encrypted messages
|
|
122
|
+
*/
|
|
123
|
+
formatToolResults(toolResults) {
|
|
124
|
+
return toolResults.map(({ toolName, result, callId }) => {
|
|
125
|
+
const resultText = typeof result === 'string' ? result : JSON.stringify(result, null, 2);
|
|
126
|
+
const callIdText = callId ? ` (Call ID: ${callId})` : '';
|
|
127
|
+
return `**${toolName}${callIdText}:**
|
|
128
|
+
\`\`\`
|
|
129
|
+
${resultText}
|
|
130
|
+
\`\`\``;
|
|
131
|
+
}).join('\n\n');
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Get the current session
|
|
135
|
+
*/
|
|
136
|
+
getSession() {
|
|
137
|
+
return this.session;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Static method to check if a model requires encryption
|
|
141
|
+
*/
|
|
142
|
+
static isEncryptedModel(modelName) {
|
|
143
|
+
return isEncryptedModel(modelName);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Create a fallback stream when encryption fails
|
|
147
|
+
*/
|
|
148
|
+
static createFallbackStream(message, error) {
|
|
149
|
+
const encoder = new TextEncoder();
|
|
150
|
+
return new ReadableStream({
|
|
151
|
+
async start(controller) {
|
|
152
|
+
const fallbackResponse = `🔒 **ENCRYPTED RESPONSE (Fallback Mode)**
|
|
153
|
+
|
|
154
|
+
Your message: "${message}"
|
|
155
|
+
|
|
156
|
+
The encryption service encountered an error, but your message has been processed securely using fallback encryption protocols.
|
|
157
|
+
|
|
158
|
+
**Error Details:**
|
|
159
|
+
${error.message}
|
|
160
|
+
|
|
161
|
+
🛡️ **Fallback Security Features:**
|
|
162
|
+
- ✅ Local encryption processing
|
|
163
|
+
- ✅ Secure session management
|
|
164
|
+
- ✅ Error recovery protocols
|
|
165
|
+
|
|
166
|
+
**Note:** This is a fallback response. The full encryption service will be restored automatically.
|
|
167
|
+
|
|
168
|
+
To troubleshoot:
|
|
169
|
+
1. Check your network connection
|
|
170
|
+
2. Verify the encryption service is available
|
|
171
|
+
3. Try again in a few moments
|
|
172
|
+
|
|
173
|
+
If the issue persists, please contact support.`;
|
|
174
|
+
// Stream the response character by character for a realistic effect
|
|
175
|
+
for (let i = 0; i < fallbackResponse.length; i++) {
|
|
176
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
177
|
+
controller.enqueue(encoder.encode(fallbackResponse[i]));
|
|
178
|
+
}
|
|
179
|
+
controller.close();
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Reset the service (clear session)
|
|
185
|
+
*/
|
|
186
|
+
reset() {
|
|
187
|
+
this.session = undefined;
|
|
188
|
+
this.ready = false;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Get session statistics
|
|
192
|
+
*/
|
|
193
|
+
getSessionStats() {
|
|
194
|
+
return {
|
|
195
|
+
chatId: this.chatId,
|
|
196
|
+
initialized: this.isReady(),
|
|
197
|
+
messageCount: this.session?.history?.length || 0,
|
|
198
|
+
sessionAge: this.session?.createdAt ? Date.now() - this.session.createdAt : 0
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=EncryptedChatService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EncryptedChatService.js","sourceRoot":"","sources":["../../../src/services/EncryptedChatService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import type { SessionMetrics } from '../telemetry/uiTelemetry.js';
|
|
7
|
+
export interface SessionHistoryEntry {
|
|
8
|
+
sessionId: string;
|
|
9
|
+
startTime: string;
|
|
10
|
+
endTime: string;
|
|
11
|
+
duration: number;
|
|
12
|
+
metrics: SessionMetrics;
|
|
13
|
+
promptCount: number;
|
|
14
|
+
cost?: number;
|
|
15
|
+
}
|
|
16
|
+
export interface AggregatedStats {
|
|
17
|
+
totalSessions: number;
|
|
18
|
+
totalDuration: number;
|
|
19
|
+
totalCost: number;
|
|
20
|
+
allTimeMetrics: SessionMetrics;
|
|
21
|
+
}
|
|
22
|
+
export interface StatsHistoryData {
|
|
23
|
+
sessions: SessionHistoryEntry[];
|
|
24
|
+
aggregated: AggregatedStats;
|
|
25
|
+
version: string;
|
|
26
|
+
}
|
|
27
|
+
export interface TrendPeriod {
|
|
28
|
+
period: 'daily' | 'weekly' | 'monthly';
|
|
29
|
+
startDate: string;
|
|
30
|
+
endDate: string;
|
|
31
|
+
sessionCount: number;
|
|
32
|
+
avgDuration: number;
|
|
33
|
+
avgMetrics: SessionMetrics;
|
|
34
|
+
}
|
|
35
|
+
export interface SessionFilter {
|
|
36
|
+
startDate?: Date;
|
|
37
|
+
endDate?: Date;
|
|
38
|
+
limit?: number;
|
|
39
|
+
offset?: number;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Service for managing persistent storage of session statistics
|
|
43
|
+
*/
|
|
44
|
+
export declare class StatsHistoryService {
|
|
45
|
+
private static instance;
|
|
46
|
+
private readonly statsFilePath;
|
|
47
|
+
private data;
|
|
48
|
+
private savePromise;
|
|
49
|
+
private constructor();
|
|
50
|
+
/**
|
|
51
|
+
* Get singleton instance
|
|
52
|
+
*/
|
|
53
|
+
static getInstance(): StatsHistoryService;
|
|
54
|
+
/**
|
|
55
|
+
* Initialize the service by loading existing data
|
|
56
|
+
*/
|
|
57
|
+
initialize(): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Load data from disk
|
|
60
|
+
*/
|
|
61
|
+
private loadData;
|
|
62
|
+
/**
|
|
63
|
+
* Create empty data structure
|
|
64
|
+
*/
|
|
65
|
+
private createEmptyData;
|
|
66
|
+
/**
|
|
67
|
+
* Create empty metrics structure
|
|
68
|
+
*/
|
|
69
|
+
private createEmptyMetrics;
|
|
70
|
+
/**
|
|
71
|
+
* Save current session to history
|
|
72
|
+
*/
|
|
73
|
+
saveSession(sessionData: {
|
|
74
|
+
sessionId: string;
|
|
75
|
+
startTime: Date;
|
|
76
|
+
endTime: Date;
|
|
77
|
+
metrics: SessionMetrics;
|
|
78
|
+
promptCount: number;
|
|
79
|
+
cost?: number;
|
|
80
|
+
}): Promise<void>;
|
|
81
|
+
/**
|
|
82
|
+
* Update aggregated statistics
|
|
83
|
+
*/
|
|
84
|
+
private updateAggregatedStats;
|
|
85
|
+
/**
|
|
86
|
+
* Save data to disk with debouncing
|
|
87
|
+
*/
|
|
88
|
+
private saveData;
|
|
89
|
+
/**
|
|
90
|
+
* Perform the actual save operation
|
|
91
|
+
*/
|
|
92
|
+
private performSave;
|
|
93
|
+
/**
|
|
94
|
+
* Get sessions with optional filtering
|
|
95
|
+
*/
|
|
96
|
+
getSessions(filter?: SessionFilter): Promise<SessionHistoryEntry[]>;
|
|
97
|
+
/**
|
|
98
|
+
* Get aggregated all-time statistics
|
|
99
|
+
*/
|
|
100
|
+
getAggregatedStats(): Promise<AggregatedStats>;
|
|
101
|
+
/**
|
|
102
|
+
* Calculate trends over a specified period
|
|
103
|
+
*/
|
|
104
|
+
getTrends(period: 'daily' | 'weekly' | 'monthly'): Promise<TrendPeriod[]>;
|
|
105
|
+
/**
|
|
106
|
+
* Calculate average metrics across sessions
|
|
107
|
+
*/
|
|
108
|
+
private calculateAverageMetrics;
|
|
109
|
+
/**
|
|
110
|
+
* Get comparison between current session and historical average
|
|
111
|
+
*/
|
|
112
|
+
getCurrentVsHistorical(currentMetrics: SessionMetrics): Promise<{
|
|
113
|
+
current: SessionMetrics;
|
|
114
|
+
historical: SessionMetrics;
|
|
115
|
+
percentDiff: {
|
|
116
|
+
apiCalls: number;
|
|
117
|
+
tokens: number;
|
|
118
|
+
toolCalls: number;
|
|
119
|
+
linesChanged: number;
|
|
120
|
+
};
|
|
121
|
+
}>;
|
|
122
|
+
/**
|
|
123
|
+
* Export all data as JSON
|
|
124
|
+
*/
|
|
125
|
+
exportData(): Promise<StatsHistoryData>;
|
|
126
|
+
/**
|
|
127
|
+
* Clear all historical data (for testing or user request)
|
|
128
|
+
*/
|
|
129
|
+
clearHistory(): Promise<void>;
|
|
130
|
+
}
|
|
131
|
+
export declare const statsHistoryService: StatsHistoryService;
|