@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
|
@@ -1,576 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
7
|
-
import { safeJsonStringify } from '../utils/safeJsonStringify.js';
|
|
8
|
-
import { DiscoveredMCPTool, generateValidName } from './mcp-tool.js'; // Added getStringifiedResultForDisplay
|
|
9
|
-
import { ToolConfirmationOutcome } from './tools.js'; // Added ToolConfirmationOutcome
|
|
10
|
-
import { ToolErrorType } from './tool-error.js';
|
|
11
|
-
// Mock @google/genai mcpToTool and CallableTool
|
|
12
|
-
// We only need to mock the parts of CallableTool that DiscoveredMCPTool uses.
|
|
13
|
-
const mockCallTool = vi.fn();
|
|
14
|
-
const mockToolMethod = vi.fn();
|
|
15
|
-
const mockCallableToolInstance = {
|
|
16
|
-
tool: mockToolMethod, // Not directly used by DiscoveredMCPTool instance methods
|
|
17
|
-
callTool: mockCallTool,
|
|
18
|
-
// Add other methods if DiscoveredMCPTool starts using them
|
|
19
|
-
};
|
|
20
|
-
describe('generateValidName', () => {
|
|
21
|
-
it('should return a valid name for a simple function', () => {
|
|
22
|
-
expect(generateValidName('myFunction')).toBe('myFunction');
|
|
23
|
-
});
|
|
24
|
-
it('should replace invalid characters with underscores', () => {
|
|
25
|
-
expect(generateValidName('invalid-name with spaces')).toBe('invalid-name_with_spaces');
|
|
26
|
-
});
|
|
27
|
-
it('should truncate long names', () => {
|
|
28
|
-
expect(generateValidName('x'.repeat(80))).toBe('xxxxxxxxxxxxxxxxxxxxxxxxxxxx___xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
|
|
29
|
-
});
|
|
30
|
-
it('should handle names with only invalid characters', () => {
|
|
31
|
-
expect(generateValidName('!@#$%^&*()')).toBe('__________');
|
|
32
|
-
});
|
|
33
|
-
it('should handle names that are exactly 63 characters long', () => {
|
|
34
|
-
expect(generateValidName('a'.repeat(63)).length).toBe(63);
|
|
35
|
-
});
|
|
36
|
-
it('should handle names that are exactly 64 characters long', () => {
|
|
37
|
-
expect(generateValidName('a'.repeat(64)).length).toBe(63);
|
|
38
|
-
});
|
|
39
|
-
it('should handle names that are longer than 64 characters', () => {
|
|
40
|
-
expect(generateValidName('a'.repeat(80)).length).toBe(63);
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
describe('DiscoveredMCPTool', () => {
|
|
44
|
-
const serverName = 'mock-mcp-server';
|
|
45
|
-
const serverToolName = 'actual-server-tool-name';
|
|
46
|
-
const baseDescription = 'A test MCP tool.';
|
|
47
|
-
const inputSchema = {
|
|
48
|
-
type: 'object',
|
|
49
|
-
properties: { param: { type: 'string' } },
|
|
50
|
-
required: ['param'],
|
|
51
|
-
};
|
|
52
|
-
let tool;
|
|
53
|
-
beforeEach(() => {
|
|
54
|
-
mockCallTool.mockClear();
|
|
55
|
-
mockToolMethod.mockClear();
|
|
56
|
-
tool = new DiscoveredMCPTool(mockCallableToolInstance, serverName, serverToolName, baseDescription, inputSchema);
|
|
57
|
-
// Clear allowlist before each relevant test, especially for shouldConfirmExecute
|
|
58
|
-
const invocation = tool.build({ param: 'mock' });
|
|
59
|
-
invocation.constructor.allowlist.clear();
|
|
60
|
-
});
|
|
61
|
-
afterEach(() => {
|
|
62
|
-
vi.restoreAllMocks();
|
|
63
|
-
});
|
|
64
|
-
describe('constructor', () => {
|
|
65
|
-
it('should set properties correctly', () => {
|
|
66
|
-
expect(tool.name).toBe(serverToolName);
|
|
67
|
-
expect(tool.schema.name).toBe(serverToolName);
|
|
68
|
-
expect(tool.schema.description).toBe(baseDescription);
|
|
69
|
-
expect(tool.schema.parameters).toBeUndefined();
|
|
70
|
-
expect(tool.schema.parametersJsonSchema).toEqual(inputSchema);
|
|
71
|
-
expect(tool.serverToolName).toBe(serverToolName);
|
|
72
|
-
expect(tool.timeout).toBeUndefined();
|
|
73
|
-
});
|
|
74
|
-
it('should accept and store a custom timeout', () => {
|
|
75
|
-
const customTimeout = 5000;
|
|
76
|
-
const toolWithTimeout = new DiscoveredMCPTool(mockCallableToolInstance, serverName, serverToolName, baseDescription, inputSchema, customTimeout);
|
|
77
|
-
expect(toolWithTimeout.timeout).toBe(customTimeout);
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
describe('execute', () => {
|
|
81
|
-
it('should call mcpTool.callTool with correct parameters and format display output', async () => {
|
|
82
|
-
const params = { param: 'testValue' };
|
|
83
|
-
const mockToolSuccessResultObject = {
|
|
84
|
-
success: true,
|
|
85
|
-
details: 'executed',
|
|
86
|
-
};
|
|
87
|
-
const mockFunctionResponseContent = [
|
|
88
|
-
{
|
|
89
|
-
type: 'text',
|
|
90
|
-
text: JSON.stringify(mockToolSuccessResultObject),
|
|
91
|
-
},
|
|
92
|
-
];
|
|
93
|
-
const mockMcpToolResponseParts = [
|
|
94
|
-
{
|
|
95
|
-
functionResponse: {
|
|
96
|
-
name: serverToolName,
|
|
97
|
-
response: { content: mockFunctionResponseContent },
|
|
98
|
-
},
|
|
99
|
-
},
|
|
100
|
-
];
|
|
101
|
-
mockCallTool.mockResolvedValue(mockMcpToolResponseParts);
|
|
102
|
-
const invocation = tool.build(params);
|
|
103
|
-
const toolResult = await invocation.execute(new AbortController().signal);
|
|
104
|
-
expect(mockCallTool).toHaveBeenCalledWith([
|
|
105
|
-
{ name: serverToolName, args: params },
|
|
106
|
-
]);
|
|
107
|
-
const stringifiedResponseContent = JSON.stringify(mockToolSuccessResultObject);
|
|
108
|
-
expect(toolResult.llmContent).toEqual([
|
|
109
|
-
{ text: stringifiedResponseContent },
|
|
110
|
-
]);
|
|
111
|
-
expect(toolResult.returnDisplay).toBe(stringifiedResponseContent);
|
|
112
|
-
});
|
|
113
|
-
it('should handle empty result from getStringifiedResultForDisplay', async () => {
|
|
114
|
-
const params = { param: 'testValue' };
|
|
115
|
-
const mockMcpToolResponsePartsEmpty = [];
|
|
116
|
-
mockCallTool.mockResolvedValue(mockMcpToolResponsePartsEmpty);
|
|
117
|
-
const invocation = tool.build(params);
|
|
118
|
-
const toolResult = await invocation.execute(new AbortController().signal);
|
|
119
|
-
expect(toolResult.returnDisplay).toBe('```json\n[]\n```');
|
|
120
|
-
expect(toolResult.llmContent).toEqual([
|
|
121
|
-
{ text: '[Error: Could not parse tool response]' },
|
|
122
|
-
]);
|
|
123
|
-
});
|
|
124
|
-
it('should propagate rejection if mcpTool.callTool rejects', async () => {
|
|
125
|
-
const params = { param: 'failCase' };
|
|
126
|
-
const expectedError = new Error('MCP call failed');
|
|
127
|
-
mockCallTool.mockRejectedValue(expectedError);
|
|
128
|
-
const invocation = tool.build(params);
|
|
129
|
-
await expect(invocation.execute(new AbortController().signal)).rejects.toThrow(expectedError);
|
|
130
|
-
});
|
|
131
|
-
it.each([
|
|
132
|
-
{ isErrorValue: true, description: 'true (bool)' },
|
|
133
|
-
{ isErrorValue: 'true', description: '"true" (str)' },
|
|
134
|
-
])('should return a structured error if MCP tool reports an error', async ({ isErrorValue }) => {
|
|
135
|
-
const tool = new DiscoveredMCPTool(mockCallableToolInstance, serverName, serverToolName, baseDescription, inputSchema);
|
|
136
|
-
const params = { param: 'isErrorTrueCase' };
|
|
137
|
-
const functionCall = {
|
|
138
|
-
name: serverToolName,
|
|
139
|
-
args: params,
|
|
140
|
-
};
|
|
141
|
-
const errorResponse = { isError: isErrorValue };
|
|
142
|
-
const mockMcpToolResponseParts = [
|
|
143
|
-
{
|
|
144
|
-
functionResponse: {
|
|
145
|
-
name: serverToolName,
|
|
146
|
-
response: { error: errorResponse },
|
|
147
|
-
},
|
|
148
|
-
},
|
|
149
|
-
];
|
|
150
|
-
mockCallTool.mockResolvedValue(mockMcpToolResponseParts);
|
|
151
|
-
const expectedErrorMessage = `MCP tool '${serverToolName}' reported tool error for function call: ${safeJsonStringify(functionCall)} with response: ${safeJsonStringify(mockMcpToolResponseParts)}`;
|
|
152
|
-
const invocation = tool.build(params);
|
|
153
|
-
const result = await invocation.execute(new AbortController().signal);
|
|
154
|
-
expect(result.error?.type).toBe(ToolErrorType.MCP_TOOL_ERROR);
|
|
155
|
-
expect(result.llmContent).toBe(expectedErrorMessage);
|
|
156
|
-
expect(result.returnDisplay).toContain(`Error: MCP tool '${serverToolName}' reported an error.`);
|
|
157
|
-
});
|
|
158
|
-
it.each([
|
|
159
|
-
{ isErrorValue: false, description: 'false (bool)' },
|
|
160
|
-
{ isErrorValue: 'false', description: '"false" (str)' },
|
|
161
|
-
])('should consider a ToolResult with isError ${description} to be a success', async ({ isErrorValue }) => {
|
|
162
|
-
const tool = new DiscoveredMCPTool(mockCallableToolInstance, serverName, serverToolName, baseDescription, inputSchema);
|
|
163
|
-
const params = { param: 'isErrorFalseCase' };
|
|
164
|
-
const mockToolSuccessResultObject = {
|
|
165
|
-
success: true,
|
|
166
|
-
details: 'executed',
|
|
167
|
-
};
|
|
168
|
-
const mockFunctionResponseContent = [
|
|
169
|
-
{
|
|
170
|
-
type: 'text',
|
|
171
|
-
text: JSON.stringify(mockToolSuccessResultObject),
|
|
172
|
-
},
|
|
173
|
-
];
|
|
174
|
-
const errorResponse = { isError: isErrorValue };
|
|
175
|
-
const mockMcpToolResponseParts = [
|
|
176
|
-
{
|
|
177
|
-
functionResponse: {
|
|
178
|
-
name: serverToolName,
|
|
179
|
-
response: {
|
|
180
|
-
error: errorResponse,
|
|
181
|
-
content: mockFunctionResponseContent,
|
|
182
|
-
},
|
|
183
|
-
},
|
|
184
|
-
},
|
|
185
|
-
];
|
|
186
|
-
mockCallTool.mockResolvedValue(mockMcpToolResponseParts);
|
|
187
|
-
const invocation = tool.build(params);
|
|
188
|
-
const toolResult = await invocation.execute(new AbortController().signal);
|
|
189
|
-
const stringifiedResponseContent = JSON.stringify(mockToolSuccessResultObject);
|
|
190
|
-
expect(toolResult.llmContent).toEqual([
|
|
191
|
-
{ text: stringifiedResponseContent },
|
|
192
|
-
]);
|
|
193
|
-
expect(toolResult.returnDisplay).toBe(stringifiedResponseContent);
|
|
194
|
-
});
|
|
195
|
-
it('should handle a simple text response correctly', async () => {
|
|
196
|
-
const params = { param: 'test' };
|
|
197
|
-
const successMessage = 'This is a success message.';
|
|
198
|
-
// Simulate the response from the GenAI SDK, which wraps the MCP
|
|
199
|
-
// response in a functionResponse Part.
|
|
200
|
-
const sdkResponse = [
|
|
201
|
-
{
|
|
202
|
-
functionResponse: {
|
|
203
|
-
name: serverToolName,
|
|
204
|
-
response: {
|
|
205
|
-
// The `content` array contains MCP ContentBlocks.
|
|
206
|
-
content: [{ type: 'text', text: successMessage }],
|
|
207
|
-
},
|
|
208
|
-
},
|
|
209
|
-
},
|
|
210
|
-
];
|
|
211
|
-
mockCallTool.mockResolvedValue(sdkResponse);
|
|
212
|
-
const invocation = tool.build(params);
|
|
213
|
-
const toolResult = await invocation.execute(new AbortController().signal);
|
|
214
|
-
// 1. Assert that the llmContent sent to the scheduler is a clean Part array.
|
|
215
|
-
expect(toolResult.llmContent).toEqual([{ text: successMessage }]);
|
|
216
|
-
// 2. Assert that the display output is the simple text message.
|
|
217
|
-
expect(toolResult.returnDisplay).toBe(successMessage);
|
|
218
|
-
// 3. Verify that the underlying callTool was made correctly.
|
|
219
|
-
expect(mockCallTool).toHaveBeenCalledWith([
|
|
220
|
-
{ name: serverToolName, args: params },
|
|
221
|
-
]);
|
|
222
|
-
});
|
|
223
|
-
it('should handle an AudioBlock response', async () => {
|
|
224
|
-
const params = { param: 'play' };
|
|
225
|
-
const sdkResponse = [
|
|
226
|
-
{
|
|
227
|
-
functionResponse: {
|
|
228
|
-
name: serverToolName,
|
|
229
|
-
response: {
|
|
230
|
-
content: [
|
|
231
|
-
{
|
|
232
|
-
type: 'audio',
|
|
233
|
-
data: 'BASE64_AUDIO_DATA',
|
|
234
|
-
mimeType: 'audio/mp3',
|
|
235
|
-
},
|
|
236
|
-
],
|
|
237
|
-
},
|
|
238
|
-
},
|
|
239
|
-
},
|
|
240
|
-
];
|
|
241
|
-
mockCallTool.mockResolvedValue(sdkResponse);
|
|
242
|
-
const invocation = tool.build(params);
|
|
243
|
-
const toolResult = await invocation.execute(new AbortController().signal);
|
|
244
|
-
expect(toolResult.llmContent).toEqual([
|
|
245
|
-
{
|
|
246
|
-
text: `[Tool '${serverToolName}' provided the following audio data with mime-type: audio/mp3]`,
|
|
247
|
-
},
|
|
248
|
-
{
|
|
249
|
-
inlineData: {
|
|
250
|
-
mimeType: 'audio/mp3',
|
|
251
|
-
data: 'BASE64_AUDIO_DATA',
|
|
252
|
-
},
|
|
253
|
-
},
|
|
254
|
-
]);
|
|
255
|
-
expect(toolResult.returnDisplay).toBe('[Audio: audio/mp3]');
|
|
256
|
-
});
|
|
257
|
-
it('should handle a ResourceLinkBlock response', async () => {
|
|
258
|
-
const params = { param: 'get' };
|
|
259
|
-
const sdkResponse = [
|
|
260
|
-
{
|
|
261
|
-
functionResponse: {
|
|
262
|
-
name: serverToolName,
|
|
263
|
-
response: {
|
|
264
|
-
content: [
|
|
265
|
-
{
|
|
266
|
-
type: 'resource_link',
|
|
267
|
-
uri: 'file:///path/to/thing',
|
|
268
|
-
name: 'resource-name',
|
|
269
|
-
title: 'My Resource',
|
|
270
|
-
},
|
|
271
|
-
],
|
|
272
|
-
},
|
|
273
|
-
},
|
|
274
|
-
},
|
|
275
|
-
];
|
|
276
|
-
mockCallTool.mockResolvedValue(sdkResponse);
|
|
277
|
-
const invocation = tool.build(params);
|
|
278
|
-
const toolResult = await invocation.execute(new AbortController().signal);
|
|
279
|
-
expect(toolResult.llmContent).toEqual([
|
|
280
|
-
{
|
|
281
|
-
text: 'Resource Link: My Resource at file:///path/to/thing',
|
|
282
|
-
},
|
|
283
|
-
]);
|
|
284
|
-
expect(toolResult.returnDisplay).toBe('[Link to My Resource: file:///path/to/thing]');
|
|
285
|
-
});
|
|
286
|
-
it('should handle an embedded text ResourceBlock response', async () => {
|
|
287
|
-
const params = { param: 'get' };
|
|
288
|
-
const sdkResponse = [
|
|
289
|
-
{
|
|
290
|
-
functionResponse: {
|
|
291
|
-
name: serverToolName,
|
|
292
|
-
response: {
|
|
293
|
-
content: [
|
|
294
|
-
{
|
|
295
|
-
type: 'resource',
|
|
296
|
-
resource: {
|
|
297
|
-
uri: 'file:///path/to/text.txt',
|
|
298
|
-
text: 'This is the text content.',
|
|
299
|
-
mimeType: 'text/plain',
|
|
300
|
-
},
|
|
301
|
-
},
|
|
302
|
-
],
|
|
303
|
-
},
|
|
304
|
-
},
|
|
305
|
-
},
|
|
306
|
-
];
|
|
307
|
-
mockCallTool.mockResolvedValue(sdkResponse);
|
|
308
|
-
const invocation = tool.build(params);
|
|
309
|
-
const toolResult = await invocation.execute(new AbortController().signal);
|
|
310
|
-
expect(toolResult.llmContent).toEqual([
|
|
311
|
-
{ text: 'This is the text content.' },
|
|
312
|
-
]);
|
|
313
|
-
expect(toolResult.returnDisplay).toBe('This is the text content.');
|
|
314
|
-
});
|
|
315
|
-
it('should handle an embedded binary ResourceBlock response', async () => {
|
|
316
|
-
const params = { param: 'get' };
|
|
317
|
-
const sdkResponse = [
|
|
318
|
-
{
|
|
319
|
-
functionResponse: {
|
|
320
|
-
name: serverToolName,
|
|
321
|
-
response: {
|
|
322
|
-
content: [
|
|
323
|
-
{
|
|
324
|
-
type: 'resource',
|
|
325
|
-
resource: {
|
|
326
|
-
uri: 'file:///path/to/data.bin',
|
|
327
|
-
blob: 'BASE64_BINARY_DATA',
|
|
328
|
-
mimeType: 'application/octet-stream',
|
|
329
|
-
},
|
|
330
|
-
},
|
|
331
|
-
],
|
|
332
|
-
},
|
|
333
|
-
},
|
|
334
|
-
},
|
|
335
|
-
];
|
|
336
|
-
mockCallTool.mockResolvedValue(sdkResponse);
|
|
337
|
-
const invocation = tool.build(params);
|
|
338
|
-
const toolResult = await invocation.execute(new AbortController().signal);
|
|
339
|
-
expect(toolResult.llmContent).toEqual([
|
|
340
|
-
{
|
|
341
|
-
text: `[Tool '${serverToolName}' provided the following embedded resource with mime-type: application/octet-stream]`,
|
|
342
|
-
},
|
|
343
|
-
{
|
|
344
|
-
inlineData: {
|
|
345
|
-
mimeType: 'application/octet-stream',
|
|
346
|
-
data: 'BASE64_BINARY_DATA',
|
|
347
|
-
},
|
|
348
|
-
},
|
|
349
|
-
]);
|
|
350
|
-
expect(toolResult.returnDisplay).toBe('[Embedded Resource: application/octet-stream]');
|
|
351
|
-
});
|
|
352
|
-
it('should handle a mix of content block types', async () => {
|
|
353
|
-
const params = { param: 'complex' };
|
|
354
|
-
const sdkResponse = [
|
|
355
|
-
{
|
|
356
|
-
functionResponse: {
|
|
357
|
-
name: serverToolName,
|
|
358
|
-
response: {
|
|
359
|
-
content: [
|
|
360
|
-
{ type: 'text', text: 'First part.' },
|
|
361
|
-
{
|
|
362
|
-
type: 'image',
|
|
363
|
-
data: 'BASE64_IMAGE_DATA',
|
|
364
|
-
mimeType: 'image/jpeg',
|
|
365
|
-
},
|
|
366
|
-
{ type: 'text', text: 'Second part.' },
|
|
367
|
-
],
|
|
368
|
-
},
|
|
369
|
-
},
|
|
370
|
-
},
|
|
371
|
-
];
|
|
372
|
-
mockCallTool.mockResolvedValue(sdkResponse);
|
|
373
|
-
const invocation = tool.build(params);
|
|
374
|
-
const toolResult = await invocation.execute(new AbortController().signal);
|
|
375
|
-
expect(toolResult.llmContent).toEqual([
|
|
376
|
-
{ text: 'First part.' },
|
|
377
|
-
{
|
|
378
|
-
text: `[Tool '${serverToolName}' provided the following image data with mime-type: image/jpeg]`,
|
|
379
|
-
},
|
|
380
|
-
{
|
|
381
|
-
inlineData: {
|
|
382
|
-
mimeType: 'image/jpeg',
|
|
383
|
-
data: 'BASE64_IMAGE_DATA',
|
|
384
|
-
},
|
|
385
|
-
},
|
|
386
|
-
{ text: 'Second part.' },
|
|
387
|
-
]);
|
|
388
|
-
expect(toolResult.returnDisplay).toBe('First part.\n[Image: image/jpeg]\nSecond part.');
|
|
389
|
-
});
|
|
390
|
-
it('should ignore unknown content block types', async () => {
|
|
391
|
-
const params = { param: 'test' };
|
|
392
|
-
const sdkResponse = [
|
|
393
|
-
{
|
|
394
|
-
functionResponse: {
|
|
395
|
-
name: serverToolName,
|
|
396
|
-
response: {
|
|
397
|
-
content: [
|
|
398
|
-
{ type: 'text', text: 'Valid part.' },
|
|
399
|
-
{ type: 'future_block', data: 'some-data' },
|
|
400
|
-
],
|
|
401
|
-
},
|
|
402
|
-
},
|
|
403
|
-
},
|
|
404
|
-
];
|
|
405
|
-
mockCallTool.mockResolvedValue(sdkResponse);
|
|
406
|
-
const invocation = tool.build(params);
|
|
407
|
-
const toolResult = await invocation.execute(new AbortController().signal);
|
|
408
|
-
expect(toolResult.llmContent).toEqual([{ text: 'Valid part.' }]);
|
|
409
|
-
expect(toolResult.returnDisplay).toBe('Valid part.\n[Unknown content type: future_block]');
|
|
410
|
-
});
|
|
411
|
-
it('should handle a complex mix of content block types', async () => {
|
|
412
|
-
const params = { param: 'super-complex' };
|
|
413
|
-
const sdkResponse = [
|
|
414
|
-
{
|
|
415
|
-
functionResponse: {
|
|
416
|
-
name: serverToolName,
|
|
417
|
-
response: {
|
|
418
|
-
content: [
|
|
419
|
-
{ type: 'text', text: 'Here is a resource.' },
|
|
420
|
-
{
|
|
421
|
-
type: 'resource_link',
|
|
422
|
-
uri: 'file:///path/to/resource',
|
|
423
|
-
name: 'resource-name',
|
|
424
|
-
title: 'My Resource',
|
|
425
|
-
},
|
|
426
|
-
{
|
|
427
|
-
type: 'resource',
|
|
428
|
-
resource: {
|
|
429
|
-
uri: 'file:///path/to/text.txt',
|
|
430
|
-
text: 'Embedded text content.',
|
|
431
|
-
mimeType: 'text/plain',
|
|
432
|
-
},
|
|
433
|
-
},
|
|
434
|
-
{
|
|
435
|
-
type: 'image',
|
|
436
|
-
data: 'BASE64_IMAGE_DATA',
|
|
437
|
-
mimeType: 'image/jpeg',
|
|
438
|
-
},
|
|
439
|
-
],
|
|
440
|
-
},
|
|
441
|
-
},
|
|
442
|
-
},
|
|
443
|
-
];
|
|
444
|
-
mockCallTool.mockResolvedValue(sdkResponse);
|
|
445
|
-
const invocation = tool.build(params);
|
|
446
|
-
const toolResult = await invocation.execute(new AbortController().signal);
|
|
447
|
-
expect(toolResult.llmContent).toEqual([
|
|
448
|
-
{ text: 'Here is a resource.' },
|
|
449
|
-
{
|
|
450
|
-
text: 'Resource Link: My Resource at file:///path/to/resource',
|
|
451
|
-
},
|
|
452
|
-
{ text: 'Embedded text content.' },
|
|
453
|
-
{
|
|
454
|
-
text: `[Tool '${serverToolName}' provided the following image data with mime-type: image/jpeg]`,
|
|
455
|
-
},
|
|
456
|
-
{
|
|
457
|
-
inlineData: {
|
|
458
|
-
mimeType: 'image/jpeg',
|
|
459
|
-
data: 'BASE64_IMAGE_DATA',
|
|
460
|
-
},
|
|
461
|
-
},
|
|
462
|
-
]);
|
|
463
|
-
expect(toolResult.returnDisplay).toBe('Here is a resource.\n[Link to My Resource: file:///path/to/resource]\nEmbedded text content.\n[Image: image/jpeg]');
|
|
464
|
-
});
|
|
465
|
-
});
|
|
466
|
-
describe('shouldConfirmExecute', () => {
|
|
467
|
-
it('should return false if trust is true', async () => {
|
|
468
|
-
const trustedTool = new DiscoveredMCPTool(mockCallableToolInstance, serverName, serverToolName, baseDescription, inputSchema, undefined, true);
|
|
469
|
-
const invocation = trustedTool.build({ param: 'mock' });
|
|
470
|
-
expect(await invocation.shouldConfirmExecute(new AbortController().signal)).toBe(false);
|
|
471
|
-
});
|
|
472
|
-
it('should return false if server is allowlisted', async () => {
|
|
473
|
-
const invocation = tool.build({ param: 'mock' });
|
|
474
|
-
invocation.constructor.allowlist.add(serverName);
|
|
475
|
-
expect(await invocation.shouldConfirmExecute(new AbortController().signal)).toBe(false);
|
|
476
|
-
});
|
|
477
|
-
it('should return false if tool is allowlisted', async () => {
|
|
478
|
-
const toolAllowlistKey = `${serverName}.${serverToolName}`;
|
|
479
|
-
const invocation = tool.build({ param: 'mock' });
|
|
480
|
-
invocation.constructor.allowlist.add(toolAllowlistKey);
|
|
481
|
-
expect(await invocation.shouldConfirmExecute(new AbortController().signal)).toBe(false);
|
|
482
|
-
});
|
|
483
|
-
it('should return confirmation details if not trusted and not allowlisted', async () => {
|
|
484
|
-
const invocation = tool.build({ param: 'mock' });
|
|
485
|
-
const confirmation = await invocation.shouldConfirmExecute(new AbortController().signal);
|
|
486
|
-
expect(confirmation).not.toBe(false);
|
|
487
|
-
if (confirmation && confirmation.type === 'mcp') {
|
|
488
|
-
// Type guard for ToolMcpConfirmationDetails
|
|
489
|
-
expect(confirmation.type).toBe('mcp');
|
|
490
|
-
expect(confirmation.serverName).toBe(serverName);
|
|
491
|
-
expect(confirmation.toolName).toBe(serverToolName);
|
|
492
|
-
}
|
|
493
|
-
else if (confirmation) {
|
|
494
|
-
// Handle other possible confirmation types if necessary, or strengthen test if only MCP is expected
|
|
495
|
-
throw new Error('Confirmation was not of expected type MCP or was false');
|
|
496
|
-
}
|
|
497
|
-
else {
|
|
498
|
-
throw new Error('Confirmation details not in expected format or was false');
|
|
499
|
-
}
|
|
500
|
-
});
|
|
501
|
-
it('should add server to allowlist on ProceedAlwaysServer', async () => {
|
|
502
|
-
const invocation = tool.build({ param: 'mock' });
|
|
503
|
-
const confirmation = await invocation.shouldConfirmExecute(new AbortController().signal);
|
|
504
|
-
expect(confirmation).not.toBe(false);
|
|
505
|
-
if (confirmation &&
|
|
506
|
-
typeof confirmation === 'object' &&
|
|
507
|
-
'onConfirm' in confirmation &&
|
|
508
|
-
typeof confirmation.onConfirm === 'function') {
|
|
509
|
-
await confirmation.onConfirm(ToolConfirmationOutcome.ProceedAlwaysServer);
|
|
510
|
-
expect(invocation.constructor.allowlist.has(serverName)).toBe(true);
|
|
511
|
-
}
|
|
512
|
-
else {
|
|
513
|
-
throw new Error('Confirmation details or onConfirm not in expected format');
|
|
514
|
-
}
|
|
515
|
-
});
|
|
516
|
-
it('should add tool to allowlist on ProceedAlwaysTool', async () => {
|
|
517
|
-
const toolAllowlistKey = `${serverName}.${serverToolName}`;
|
|
518
|
-
const invocation = tool.build({ param: 'mock' });
|
|
519
|
-
const confirmation = await invocation.shouldConfirmExecute(new AbortController().signal);
|
|
520
|
-
expect(confirmation).not.toBe(false);
|
|
521
|
-
if (confirmation &&
|
|
522
|
-
typeof confirmation === 'object' &&
|
|
523
|
-
'onConfirm' in confirmation &&
|
|
524
|
-
typeof confirmation.onConfirm === 'function') {
|
|
525
|
-
await confirmation.onConfirm(ToolConfirmationOutcome.ProceedAlwaysTool);
|
|
526
|
-
expect(invocation.constructor.allowlist.has(toolAllowlistKey)).toBe(true);
|
|
527
|
-
}
|
|
528
|
-
else {
|
|
529
|
-
throw new Error('Confirmation details or onConfirm not in expected format');
|
|
530
|
-
}
|
|
531
|
-
});
|
|
532
|
-
it('should handle Cancel confirmation outcome', async () => {
|
|
533
|
-
const invocation = tool.build({ param: 'mock' });
|
|
534
|
-
const confirmation = await invocation.shouldConfirmExecute(new AbortController().signal);
|
|
535
|
-
expect(confirmation).not.toBe(false);
|
|
536
|
-
if (confirmation &&
|
|
537
|
-
typeof confirmation === 'object' &&
|
|
538
|
-
'onConfirm' in confirmation &&
|
|
539
|
-
typeof confirmation.onConfirm === 'function') {
|
|
540
|
-
// Cancel should not add anything to allowlist
|
|
541
|
-
await confirmation.onConfirm(ToolConfirmationOutcome.Cancel);
|
|
542
|
-
expect(invocation.constructor.allowlist.has(serverName)).toBe(false);
|
|
543
|
-
expect(invocation.constructor.allowlist.has(`${serverName}.${serverToolName}`)).toBe(false);
|
|
544
|
-
}
|
|
545
|
-
else {
|
|
546
|
-
throw new Error('Confirmation details or onConfirm not in expected format');
|
|
547
|
-
}
|
|
548
|
-
});
|
|
549
|
-
it('should handle ProceedOnce confirmation outcome', async () => {
|
|
550
|
-
const invocation = tool.build({ param: 'mock' });
|
|
551
|
-
const confirmation = await invocation.shouldConfirmExecute(new AbortController().signal);
|
|
552
|
-
expect(confirmation).not.toBe(false);
|
|
553
|
-
if (confirmation &&
|
|
554
|
-
typeof confirmation === 'object' &&
|
|
555
|
-
'onConfirm' in confirmation &&
|
|
556
|
-
typeof confirmation.onConfirm === 'function') {
|
|
557
|
-
// ProceedOnce should not add anything to allowlist
|
|
558
|
-
await confirmation.onConfirm(ToolConfirmationOutcome.ProceedOnce);
|
|
559
|
-
expect(invocation.constructor.allowlist.has(serverName)).toBe(false);
|
|
560
|
-
expect(invocation.constructor.allowlist.has(`${serverName}.${serverToolName}`)).toBe(false);
|
|
561
|
-
}
|
|
562
|
-
else {
|
|
563
|
-
throw new Error('Confirmation details or onConfirm not in expected format');
|
|
564
|
-
}
|
|
565
|
-
});
|
|
566
|
-
});
|
|
567
|
-
describe('DiscoveredMCPToolInvocation', () => {
|
|
568
|
-
it('should return the stringified params from getDescription', () => {
|
|
569
|
-
const params = { param: 'testValue', param2: 'anotherOne' };
|
|
570
|
-
const invocation = tool.build(params);
|
|
571
|
-
const description = invocation.getDescription();
|
|
572
|
-
expect(description).toBe('{"param":"testValue","param2":"anotherOne"}');
|
|
573
|
-
});
|
|
574
|
-
});
|
|
575
|
-
});
|
|
576
|
-
//# sourceMappingURL=mcp-tool.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tool.test.js","sourceRoot":"","sources":["../../../src/tools/mcp-tool.test.ts"],"names":[],"mappings":"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"}
|