@google/gemini-cli-core 0.13.0-nightly.20251102.d7243fb8 → 0.13.0-preview.0
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/dist/google-gemini-cli-core-0.13.0-nightly.20251031.c89bc30d.tgz +0 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/src/agents/executor.d.ts +19 -0
- package/dist/src/agents/executor.js +226 -32
- package/dist/src/agents/executor.js.map +1 -1
- package/dist/src/agents/executor.test.js +335 -9
- package/dist/src/agents/executor.test.js.map +1 -1
- package/dist/src/agents/types.d.ts +2 -1
- package/dist/src/agents/types.js +1 -0
- package/dist/src/agents/types.js.map +1 -1
- package/dist/src/code_assist/experiments/client_metadata.d.ts +12 -0
- package/dist/src/code_assist/experiments/client_metadata.js +49 -0
- package/dist/src/code_assist/experiments/client_metadata.js.map +1 -0
- package/dist/src/code_assist/experiments/experiments.d.ts +17 -0
- package/dist/src/code_assist/experiments/experiments.js +36 -0
- package/dist/src/code_assist/experiments/experiments.js.map +1 -0
- package/dist/src/code_assist/experiments/types.d.ts +35 -0
- package/dist/src/code_assist/experiments/types.js +7 -0
- package/dist/src/code_assist/experiments/types.js.map +1 -0
- package/dist/src/code_assist/server.d.ts +3 -1
- package/dist/src/code_assist/server.js +11 -0
- package/dist/src/code_assist/server.js.map +1 -1
- package/dist/src/code_assist/server.test.js +17 -0
- package/dist/src/code_assist/server.test.js.map +1 -1
- package/dist/src/code_assist/types.d.ts +1 -1
- package/dist/src/code_assist/types.js.map +1 -1
- package/dist/src/config/config.d.ts +51 -15
- package/dist/src/config/config.js +130 -30
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +231 -1
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/models.d.ts +1 -1
- package/dist/src/config/models.js +2 -2
- package/dist/src/config/models.js.map +1 -1
- package/dist/src/config/storage.d.ts +2 -0
- package/dist/src/config/storage.js +17 -0
- package/dist/src/config/storage.js.map +1 -1
- package/dist/src/core/apiKeyCredentialStorage.js +7 -7
- package/dist/src/core/apiKeyCredentialStorage.js.map +1 -1
- package/dist/src/core/apiKeyCredentialStorage.test.js +5 -0
- package/dist/src/core/apiKeyCredentialStorage.test.js.map +1 -1
- package/dist/src/core/logger.js +10 -9
- package/dist/src/core/logger.js.map +1 -1
- package/dist/src/core/prompts.js +104 -55
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/generated/git-commit.js.map +1 -1
- package/dist/src/hooks/hookPlanner.d.ts +46 -0
- package/dist/src/hooks/hookPlanner.js +108 -0
- package/dist/src/hooks/hookPlanner.js.map +1 -0
- package/dist/src/hooks/hookPlanner.test.d.ts +6 -0
- package/dist/src/hooks/hookPlanner.test.js +255 -0
- package/dist/src/hooks/hookPlanner.test.js.map +1 -0
- package/dist/src/hooks/hookRegistry.d.ts +87 -0
- package/dist/src/hooks/hookRegistry.js +198 -0
- package/dist/src/hooks/hookRegistry.js.map +1 -0
- package/dist/src/hooks/hookRegistry.test.d.ts +6 -0
- package/dist/src/hooks/hookRegistry.test.js +341 -0
- package/dist/src/hooks/hookRegistry.test.js.map +1 -0
- package/dist/src/hooks/hookTranslator.d.ts +113 -0
- package/dist/src/hooks/hookTranslator.js +232 -0
- package/dist/src/hooks/hookTranslator.js.map +1 -0
- package/dist/src/hooks/hookTranslator.test.d.ts +6 -0
- package/dist/src/hooks/hookTranslator.test.js +192 -0
- package/dist/src/hooks/hookTranslator.test.js.map +1 -0
- package/dist/src/hooks/types.d.ts +384 -0
- package/dist/src/hooks/types.js +284 -0
- package/dist/src/hooks/types.js.map +1 -0
- package/dist/src/hooks/types.test.d.ts +6 -0
- package/dist/src/hooks/types.test.js +35 -0
- package/dist/src/hooks/types.test.js.map +1 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.js +4 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/oauth-provider.d.ts +8 -5
- package/dist/src/mcp/oauth-provider.js +114 -31
- package/dist/src/mcp/oauth-provider.js.map +1 -1
- package/dist/src/mcp/oauth-provider.test.js +54 -1
- package/dist/src/mcp/oauth-provider.test.js.map +1 -1
- package/dist/src/mcp/token-storage/file-token-storage.js +1 -1
- package/dist/src/mcp/token-storage/file-token-storage.js.map +1 -1
- package/dist/src/mcp/token-storage/file-token-storage.test.js +7 -5
- package/dist/src/mcp/token-storage/file-token-storage.test.js.map +1 -1
- package/dist/src/mcp/token-storage/keychain-token-storage.js +2 -2
- package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -1
- package/dist/src/policy/config.d.ts +31 -0
- package/dist/src/policy/config.js +197 -0
- package/dist/src/policy/config.js.map +1 -0
- package/dist/src/policy/config.test.d.ts +6 -0
- package/dist/src/policy/config.test.js +404 -0
- package/dist/src/policy/config.test.js.map +1 -0
- package/dist/src/policy/index.d.ts +2 -0
- package/dist/src/policy/index.js +2 -0
- package/dist/src/policy/index.js.map +1 -1
- package/dist/src/policy/policies/read-only.toml +56 -0
- package/dist/src/policy/policies/write.toml +63 -0
- package/dist/src/policy/policies/yolo.toml +31 -0
- package/dist/src/policy/toml-loader.d.ts +46 -0
- package/dist/src/policy/toml-loader.js +314 -0
- package/dist/src/policy/toml-loader.js.map +1 -0
- package/dist/src/policy/toml-loader.test.d.ts +6 -0
- package/dist/src/policy/toml-loader.test.js +522 -0
- package/dist/src/policy/toml-loader.test.js.map +1 -0
- package/dist/src/policy/types.d.ts +18 -0
- package/dist/src/policy/types.js +6 -0
- package/dist/src/policy/types.js.map +1 -1
- package/dist/src/services/chatCompressionService.js +2 -1
- package/dist/src/services/chatCompressionService.js.map +1 -1
- package/dist/src/services/chatRecordingService.js +9 -8
- package/dist/src/services/chatRecordingService.js.map +1 -1
- package/dist/src/services/loopDetectionService.d.ts +1 -1
- package/dist/src/services/loopDetectionService.js +3 -3
- package/dist/src/services/loopDetectionService.js.map +1 -1
- package/dist/src/services/loopDetectionService.test.js +69 -0
- package/dist/src/services/loopDetectionService.test.js.map +1 -1
- package/dist/src/services/shellExecutionService.js +18 -4
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/services/shellExecutionService.test.js +16 -4
- package/dist/src/services/shellExecutionService.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +3 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +31 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +4 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +6 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +2 -1
- package/dist/src/telemetry/loggers.js +13 -1
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +10 -5
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/metrics.d.ts +21 -1
- package/dist/src/telemetry/metrics.js +34 -0
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/metrics.test.js +43 -126
- package/dist/src/telemetry/metrics.test.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +24 -10
- package/dist/src/telemetry/types.js +47 -19
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/tools/edit.js +1 -1
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +1 -1
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.d.ts +31 -6
- package/dist/src/tools/mcp-client-manager.js +111 -41
- package/dist/src/tools/mcp-client-manager.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.test.js +130 -38
- package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +1 -0
- package/dist/src/tools/mcp-client.js +4 -4
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +49 -0
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/shell.js +1 -1
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/smart-edit.d.ts +1 -1
- package/dist/src/tools/smart-edit.js +12 -1
- package/dist/src/tools/smart-edit.js.map +1 -1
- package/dist/src/tools/smart-edit.test.js +2 -1
- package/dist/src/tools/smart-edit.test.js.map +1 -1
- package/dist/src/tools/tool-registry.d.ts +1 -18
- package/dist/src/tools/tool-registry.js +1 -44
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tool-registry.test.js +2 -24
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/tools/web-fetch.js +3 -6
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/web-fetch.test.js +1 -1
- package/dist/src/tools/web-fetch.test.js.map +1 -1
- package/dist/src/tools/write-file.js +1 -1
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +1 -1
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/utils/channel.d.ts +1 -0
- package/dist/src/utils/channel.js +4 -4
- package/dist/src/utils/channel.js.map +1 -1
- package/dist/src/utils/channel.test.js +35 -1
- package/dist/src/utils/channel.test.js.map +1 -1
- package/dist/src/utils/events.d.ts +18 -1
- package/dist/src/utils/events.js +8 -0
- package/dist/src/utils/events.js.map +1 -1
- package/dist/src/utils/events.test.js +10 -0
- package/dist/src/utils/events.test.js.map +1 -1
- package/dist/src/utils/extensionLoader.d.ts +67 -27
- package/dist/src/utils/extensionLoader.js +149 -7
- package/dist/src/utils/extensionLoader.js.map +1 -1
- package/dist/src/utils/extensionLoader.test.d.ts +6 -0
- package/dist/src/utils/extensionLoader.test.js +90 -0
- package/dist/src/utils/extensionLoader.test.js.map +1 -0
- package/dist/src/utils/fetch.js +1 -6
- package/dist/src/utils/fetch.js.map +1 -1
- package/dist/src/utils/llm-edit-fixer.d.ts +1 -1
- package/dist/src/utils/llm-edit-fixer.js +27 -3
- package/dist/src/utils/llm-edit-fixer.js.map +1 -1
- package/dist/src/utils/llm-edit-fixer.test.js +21 -0
- package/dist/src/utils/llm-edit-fixer.test.js.map +1 -1
- package/dist/src/utils/shell-utils.js +29 -1
- package/dist/src/utils/shell-utils.js.map +1 -1
- package/dist/src/utils/shell-utils.test.js +18 -0
- package/dist/src/utils/shell-utils.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -2
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { DEFAULT_GEMINI_FLASH_MODEL } from '../config/models.js';
|
|
7
|
+
/**
|
|
8
|
+
* Base class for hook translators - handles version-specific translation logic
|
|
9
|
+
*/
|
|
10
|
+
export class HookTranslator {
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Type guard to check if a value has a text property
|
|
14
|
+
*/
|
|
15
|
+
function hasTextProperty(value) {
|
|
16
|
+
return (typeof value === 'object' &&
|
|
17
|
+
value !== null &&
|
|
18
|
+
'text' in value &&
|
|
19
|
+
typeof value.text === 'string');
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Type guard to check if content has role and parts properties
|
|
23
|
+
*/
|
|
24
|
+
function isContentWithParts(content) {
|
|
25
|
+
return (typeof content === 'object' &&
|
|
26
|
+
content !== null &&
|
|
27
|
+
'role' in content &&
|
|
28
|
+
'parts' in content);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Helper to safely extract generation config from SDK request
|
|
32
|
+
* The SDK uses a config field that contains generation parameters
|
|
33
|
+
*/
|
|
34
|
+
function extractGenerationConfig(request) {
|
|
35
|
+
// Access the config field which contains generation settings
|
|
36
|
+
// Use type assertion after checking the field exists
|
|
37
|
+
if (request.config && typeof request.config === 'object') {
|
|
38
|
+
const config = request.config;
|
|
39
|
+
return {
|
|
40
|
+
temperature: config.temperature,
|
|
41
|
+
maxOutputTokens: config.maxOutputTokens,
|
|
42
|
+
topP: config.topP,
|
|
43
|
+
topK: config.topK,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Hook translator for GenAI SDK v1.x
|
|
50
|
+
* Handles translation between GenAI SDK types and stable Hook API types
|
|
51
|
+
*/
|
|
52
|
+
export class HookTranslatorGenAIv1 extends HookTranslator {
|
|
53
|
+
/**
|
|
54
|
+
* Convert genai SDK GenerateContentParameters to stable LLMRequest
|
|
55
|
+
*
|
|
56
|
+
* Note: This implementation intentionally extracts only text content from parts.
|
|
57
|
+
* Non-text parts (images, function calls, etc.) are filtered out in v1 to provide
|
|
58
|
+
* a simplified, stable interface for hooks. This allows hooks to focus on text
|
|
59
|
+
* manipulation without needing to handle complex multimodal content.
|
|
60
|
+
* Future versions may expose additional content types if needed.
|
|
61
|
+
*/
|
|
62
|
+
toHookLLMRequest(sdkRequest) {
|
|
63
|
+
const messages = [];
|
|
64
|
+
// Convert contents to messages format (simplified)
|
|
65
|
+
if (sdkRequest.contents) {
|
|
66
|
+
const contents = Array.isArray(sdkRequest.contents)
|
|
67
|
+
? sdkRequest.contents
|
|
68
|
+
: [sdkRequest.contents];
|
|
69
|
+
for (const content of contents) {
|
|
70
|
+
if (typeof content === 'string') {
|
|
71
|
+
messages.push({
|
|
72
|
+
role: 'user',
|
|
73
|
+
content,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
else if (isContentWithParts(content)) {
|
|
77
|
+
const role = content.role === 'model'
|
|
78
|
+
? 'model'
|
|
79
|
+
: content.role === 'system'
|
|
80
|
+
? 'system'
|
|
81
|
+
: 'user';
|
|
82
|
+
const parts = Array.isArray(content.parts)
|
|
83
|
+
? content.parts
|
|
84
|
+
: [content.parts];
|
|
85
|
+
// Extract only text parts - intentionally filtering out non-text content
|
|
86
|
+
const textContent = parts
|
|
87
|
+
.filter(hasTextProperty)
|
|
88
|
+
.map((part) => part.text)
|
|
89
|
+
.join('');
|
|
90
|
+
// Only add message if there's text content
|
|
91
|
+
if (textContent) {
|
|
92
|
+
messages.push({
|
|
93
|
+
role,
|
|
94
|
+
content: textContent,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Safely extract generation config using proper type access
|
|
101
|
+
const config = extractGenerationConfig(sdkRequest);
|
|
102
|
+
return {
|
|
103
|
+
model: sdkRequest.model || DEFAULT_GEMINI_FLASH_MODEL,
|
|
104
|
+
messages,
|
|
105
|
+
config: {
|
|
106
|
+
temperature: config?.temperature,
|
|
107
|
+
maxOutputTokens: config?.maxOutputTokens,
|
|
108
|
+
topP: config?.topP,
|
|
109
|
+
topK: config?.topK,
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Convert stable LLMRequest to genai SDK GenerateContentParameters
|
|
115
|
+
*/
|
|
116
|
+
fromHookLLMRequest(hookRequest, baseRequest) {
|
|
117
|
+
// Convert hook messages back to SDK Content format
|
|
118
|
+
const contents = hookRequest.messages.map((message) => ({
|
|
119
|
+
role: message.role === 'model' ? 'model' : message.role,
|
|
120
|
+
parts: [
|
|
121
|
+
{
|
|
122
|
+
text: typeof message.content === 'string'
|
|
123
|
+
? message.content
|
|
124
|
+
: String(message.content),
|
|
125
|
+
},
|
|
126
|
+
],
|
|
127
|
+
}));
|
|
128
|
+
// Build the result with proper typing
|
|
129
|
+
const result = {
|
|
130
|
+
...baseRequest,
|
|
131
|
+
model: hookRequest.model,
|
|
132
|
+
contents,
|
|
133
|
+
};
|
|
134
|
+
// Add generation config if it exists in the hook request
|
|
135
|
+
if (hookRequest.config) {
|
|
136
|
+
const baseConfig = baseRequest
|
|
137
|
+
? extractGenerationConfig(baseRequest)
|
|
138
|
+
: undefined;
|
|
139
|
+
result.config = {
|
|
140
|
+
...baseConfig,
|
|
141
|
+
temperature: hookRequest.config.temperature,
|
|
142
|
+
maxOutputTokens: hookRequest.config.maxOutputTokens,
|
|
143
|
+
topP: hookRequest.config.topP,
|
|
144
|
+
topK: hookRequest.config.topK,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
return result;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Convert genai SDK GenerateContentResponse to stable LLMResponse
|
|
151
|
+
*/
|
|
152
|
+
toHookLLMResponse(sdkResponse) {
|
|
153
|
+
return {
|
|
154
|
+
text: sdkResponse.text,
|
|
155
|
+
candidates: (sdkResponse.candidates || []).map((candidate) => {
|
|
156
|
+
// Extract text parts from the candidate
|
|
157
|
+
const textParts = candidate.content?.parts
|
|
158
|
+
?.filter(hasTextProperty)
|
|
159
|
+
.map((part) => part.text) || [];
|
|
160
|
+
return {
|
|
161
|
+
content: {
|
|
162
|
+
role: 'model',
|
|
163
|
+
parts: textParts,
|
|
164
|
+
},
|
|
165
|
+
finishReason: candidate.finishReason,
|
|
166
|
+
index: candidate.index,
|
|
167
|
+
safetyRatings: candidate.safetyRatings?.map((rating) => ({
|
|
168
|
+
category: String(rating.category || ''),
|
|
169
|
+
probability: String(rating.probability || ''),
|
|
170
|
+
})),
|
|
171
|
+
};
|
|
172
|
+
}),
|
|
173
|
+
usageMetadata: sdkResponse.usageMetadata
|
|
174
|
+
? {
|
|
175
|
+
promptTokenCount: sdkResponse.usageMetadata.promptTokenCount,
|
|
176
|
+
candidatesTokenCount: sdkResponse.usageMetadata.candidatesTokenCount,
|
|
177
|
+
totalTokenCount: sdkResponse.usageMetadata.totalTokenCount,
|
|
178
|
+
}
|
|
179
|
+
: undefined,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Convert stable LLMResponse to genai SDK GenerateContentResponse
|
|
184
|
+
*/
|
|
185
|
+
fromHookLLMResponse(hookResponse) {
|
|
186
|
+
// Build response object with proper structure
|
|
187
|
+
const response = {
|
|
188
|
+
text: hookResponse.text,
|
|
189
|
+
candidates: hookResponse.candidates.map((candidate) => ({
|
|
190
|
+
content: {
|
|
191
|
+
role: 'model',
|
|
192
|
+
parts: candidate.content.parts.map((part) => ({
|
|
193
|
+
text: part,
|
|
194
|
+
})),
|
|
195
|
+
},
|
|
196
|
+
finishReason: candidate.finishReason,
|
|
197
|
+
index: candidate.index,
|
|
198
|
+
safetyRatings: candidate.safetyRatings,
|
|
199
|
+
})),
|
|
200
|
+
usageMetadata: hookResponse.usageMetadata,
|
|
201
|
+
};
|
|
202
|
+
return response;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Convert genai SDK ToolConfig to stable HookToolConfig
|
|
206
|
+
*/
|
|
207
|
+
toHookToolConfig(sdkToolConfig) {
|
|
208
|
+
return {
|
|
209
|
+
mode: sdkToolConfig.functionCallingConfig?.mode,
|
|
210
|
+
allowedFunctionNames: sdkToolConfig.functionCallingConfig?.allowedFunctionNames,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Convert stable HookToolConfig to genai SDK ToolConfig
|
|
215
|
+
*/
|
|
216
|
+
fromHookToolConfig(hookToolConfig) {
|
|
217
|
+
const functionCallingConfig = hookToolConfig.mode || hookToolConfig.allowedFunctionNames
|
|
218
|
+
? {
|
|
219
|
+
mode: hookToolConfig.mode,
|
|
220
|
+
allowedFunctionNames: hookToolConfig.allowedFunctionNames,
|
|
221
|
+
}
|
|
222
|
+
: undefined;
|
|
223
|
+
return {
|
|
224
|
+
functionCallingConfig,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Default translator instance for current GenAI SDK version
|
|
230
|
+
*/
|
|
231
|
+
export const defaultHookTranslator = new HookTranslatorGenAIv1();
|
|
232
|
+
//# sourceMappingURL=hookTranslator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hookTranslator.js","sourceRoot":"","sources":["../../../src/hooks/hookTranslator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it, expect, beforeEach } from 'vitest';
|
|
7
|
+
import { HookTranslatorGenAIv1, defaultHookTranslator, } from './hookTranslator.js';
|
|
8
|
+
describe('HookTranslator', () => {
|
|
9
|
+
let translator;
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
translator = new HookTranslatorGenAIv1();
|
|
12
|
+
});
|
|
13
|
+
describe('defaultHookTranslator', () => {
|
|
14
|
+
it('should be an instance of HookTranslatorGenAIv1', () => {
|
|
15
|
+
expect(defaultHookTranslator).toBeInstanceOf(HookTranslatorGenAIv1);
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
describe('LLM Request Translation', () => {
|
|
19
|
+
it('should convert SDK request to hook format', () => {
|
|
20
|
+
const sdkRequest = {
|
|
21
|
+
model: 'gemini-1.5-flash',
|
|
22
|
+
contents: [
|
|
23
|
+
{
|
|
24
|
+
role: 'user',
|
|
25
|
+
parts: [{ text: 'Hello world' }],
|
|
26
|
+
},
|
|
27
|
+
],
|
|
28
|
+
config: {
|
|
29
|
+
temperature: 0.7,
|
|
30
|
+
maxOutputTokens: 1000,
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
const hookRequest = translator.toHookLLMRequest(sdkRequest);
|
|
34
|
+
expect(hookRequest).toEqual({
|
|
35
|
+
model: 'gemini-1.5-flash',
|
|
36
|
+
messages: [
|
|
37
|
+
{
|
|
38
|
+
role: 'user',
|
|
39
|
+
content: 'Hello world',
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
config: {
|
|
43
|
+
temperature: 0.7,
|
|
44
|
+
maxOutputTokens: 1000,
|
|
45
|
+
topP: undefined,
|
|
46
|
+
topK: undefined,
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
it('should handle string contents', () => {
|
|
51
|
+
const sdkRequest = {
|
|
52
|
+
model: 'gemini-1.5-flash',
|
|
53
|
+
contents: ['Simple string message'],
|
|
54
|
+
};
|
|
55
|
+
const hookRequest = translator.toHookLLMRequest(sdkRequest);
|
|
56
|
+
expect(hookRequest.messages).toEqual([
|
|
57
|
+
{
|
|
58
|
+
role: 'user',
|
|
59
|
+
content: 'Simple string message',
|
|
60
|
+
},
|
|
61
|
+
]);
|
|
62
|
+
});
|
|
63
|
+
it('should handle conversion errors gracefully', () => {
|
|
64
|
+
const sdkRequest = {
|
|
65
|
+
model: 'gemini-1.5-flash',
|
|
66
|
+
contents: [null], // Invalid content
|
|
67
|
+
};
|
|
68
|
+
const hookRequest = translator.toHookLLMRequest(sdkRequest);
|
|
69
|
+
// When contents are invalid, the translator skips them and returns empty messages
|
|
70
|
+
expect(hookRequest.messages).toEqual([]);
|
|
71
|
+
expect(hookRequest.model).toBe('gemini-1.5-flash');
|
|
72
|
+
});
|
|
73
|
+
it('should convert hook request back to SDK format', () => {
|
|
74
|
+
const hookRequest = {
|
|
75
|
+
model: 'gemini-1.5-flash',
|
|
76
|
+
messages: [
|
|
77
|
+
{
|
|
78
|
+
role: 'user',
|
|
79
|
+
content: 'Hello world',
|
|
80
|
+
},
|
|
81
|
+
],
|
|
82
|
+
config: {
|
|
83
|
+
temperature: 0.7,
|
|
84
|
+
maxOutputTokens: 1000,
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
const sdkRequest = translator.fromHookLLMRequest(hookRequest);
|
|
88
|
+
expect(sdkRequest.model).toBe('gemini-1.5-flash');
|
|
89
|
+
expect(sdkRequest.contents).toEqual([
|
|
90
|
+
{
|
|
91
|
+
role: 'user',
|
|
92
|
+
parts: [{ text: 'Hello world' }],
|
|
93
|
+
},
|
|
94
|
+
]);
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
describe('LLM Response Translation', () => {
|
|
98
|
+
it('should convert SDK response to hook format', () => {
|
|
99
|
+
const sdkResponse = {
|
|
100
|
+
text: 'Hello response',
|
|
101
|
+
candidates: [
|
|
102
|
+
{
|
|
103
|
+
content: {
|
|
104
|
+
role: 'model',
|
|
105
|
+
parts: [{ text: 'Hello response' }],
|
|
106
|
+
},
|
|
107
|
+
finishReason: 'STOP',
|
|
108
|
+
index: 0,
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
usageMetadata: {
|
|
112
|
+
promptTokenCount: 10,
|
|
113
|
+
candidatesTokenCount: 20,
|
|
114
|
+
totalTokenCount: 30,
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
const hookResponse = translator.toHookLLMResponse(sdkResponse);
|
|
118
|
+
expect(hookResponse).toEqual({
|
|
119
|
+
text: 'Hello response',
|
|
120
|
+
candidates: [
|
|
121
|
+
{
|
|
122
|
+
content: {
|
|
123
|
+
role: 'model',
|
|
124
|
+
parts: ['Hello response'],
|
|
125
|
+
},
|
|
126
|
+
finishReason: 'STOP',
|
|
127
|
+
index: 0,
|
|
128
|
+
safetyRatings: undefined,
|
|
129
|
+
},
|
|
130
|
+
],
|
|
131
|
+
usageMetadata: {
|
|
132
|
+
promptTokenCount: 10,
|
|
133
|
+
candidatesTokenCount: 20,
|
|
134
|
+
totalTokenCount: 30,
|
|
135
|
+
},
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
it('should convert hook response back to SDK format', () => {
|
|
139
|
+
const hookResponse = {
|
|
140
|
+
text: 'Hello response',
|
|
141
|
+
candidates: [
|
|
142
|
+
{
|
|
143
|
+
content: {
|
|
144
|
+
role: 'model',
|
|
145
|
+
parts: ['Hello response'],
|
|
146
|
+
},
|
|
147
|
+
finishReason: 'STOP',
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
};
|
|
151
|
+
const sdkResponse = translator.fromHookLLMResponse(hookResponse);
|
|
152
|
+
expect(sdkResponse.text).toBe('Hello response');
|
|
153
|
+
expect(sdkResponse.candidates).toHaveLength(1);
|
|
154
|
+
expect(sdkResponse.candidates?.[0]?.content?.parts?.[0]?.text).toBe('Hello response');
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
describe('Tool Config Translation', () => {
|
|
158
|
+
it('should convert SDK tool config to hook format', () => {
|
|
159
|
+
const sdkToolConfig = {
|
|
160
|
+
functionCallingConfig: {
|
|
161
|
+
mode: 'ANY',
|
|
162
|
+
allowedFunctionNames: ['tool1', 'tool2'],
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
const hookToolConfig = translator.toHookToolConfig(sdkToolConfig);
|
|
166
|
+
expect(hookToolConfig).toEqual({
|
|
167
|
+
mode: 'ANY',
|
|
168
|
+
allowedFunctionNames: ['tool1', 'tool2'],
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
it('should convert hook tool config back to SDK format', () => {
|
|
172
|
+
const hookToolConfig = {
|
|
173
|
+
mode: 'AUTO',
|
|
174
|
+
allowedFunctionNames: ['tool1', 'tool2'],
|
|
175
|
+
};
|
|
176
|
+
const sdkToolConfig = translator.fromHookToolConfig(hookToolConfig);
|
|
177
|
+
expect(sdkToolConfig.functionCallingConfig).toEqual({
|
|
178
|
+
mode: 'AUTO',
|
|
179
|
+
allowedFunctionNames: ['tool1', 'tool2'],
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
it('should handle undefined tool config', () => {
|
|
183
|
+
const sdkToolConfig = {};
|
|
184
|
+
const hookToolConfig = translator.toHookToolConfig(sdkToolConfig);
|
|
185
|
+
expect(hookToolConfig).toEqual({
|
|
186
|
+
mode: undefined,
|
|
187
|
+
allowedFunctionNames: undefined,
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
//# sourceMappingURL=hookTranslator.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hookTranslator.test.js","sourceRoot":"","sources":["../../../src/hooks/hookTranslator.test.ts"],"names":[],"mappings":"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"}
|