@vybestack/llxprt-code-core 0.1.23 → 0.2.2-nightly.250908.7b895396
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 +21 -17
- package/dist/src/adapters/IStreamAdapter.d.ts +3 -3
- package/dist/src/auth/oauth-errors.d.ts +173 -0
- package/dist/src/auth/oauth-errors.js +461 -0
- package/dist/src/auth/oauth-errors.js.map +1 -0
- package/dist/src/auth/precedence.d.ts +1 -5
- package/dist/src/auth/precedence.js +28 -48
- package/dist/src/auth/precedence.js.map +1 -1
- package/dist/src/auth/token-store.js +2 -2
- package/dist/src/auth/token-store.js.map +1 -1
- package/dist/src/auth/types.d.ts +4 -4
- package/dist/src/code_assist/codeAssist.js +19 -6
- package/dist/src/code_assist/codeAssist.js.map +1 -1
- package/dist/src/code_assist/oauth2.d.ts +7 -0
- package/dist/src/code_assist/oauth2.js +82 -32
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/server.js +15 -4
- package/dist/src/code_assist/server.js.map +1 -1
- package/dist/src/code_assist/setup.js +9 -0
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/config/index.d.ts +7 -0
- package/dist/src/config/index.js +8 -0
- package/dist/src/config/index.js.map +1 -0
- package/dist/src/core/client.d.ts +15 -20
- package/dist/src/core/client.js +98 -124
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/compression-config.d.ts +10 -0
- package/dist/src/core/compression-config.js +17 -0
- package/dist/src/core/compression-config.js.map +1 -0
- package/dist/src/core/coreToolScheduler.js +50 -15
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/geminiChat.d.ts +68 -9
- package/dist/src/core/geminiChat.js +940 -405
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.js +70 -19
- package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
- package/dist/src/core/prompts.js +35 -25
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/turn.d.ts +1 -0
- package/dist/src/core/turn.js +8 -6
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/ide/ide-client.d.ts +1 -1
- package/dist/src/ide/ide-client.js +12 -6
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/index.d.ts +4 -2
- package/dist/src/index.js +5 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/prompt-config/TemplateEngine.js +17 -0
- package/dist/src/prompt-config/TemplateEngine.js.map +1 -1
- package/dist/src/prompt-config/defaults/core-defaults.js +39 -32
- package/dist/src/prompt-config/defaults/core-defaults.js.map +1 -1
- package/dist/src/prompt-config/defaults/core.md +2 -0
- package/dist/src/prompt-config/defaults/provider-defaults.js +34 -27
- package/dist/src/prompt-config/defaults/provider-defaults.js.map +1 -1
- package/dist/src/prompt-config/defaults/providers/gemini/core.md +270 -0
- package/dist/src/prompt-config/defaults/providers/gemini/models/gemini-2.5-flash/core.md +12 -0
- package/dist/src/prompt-config/defaults/providers/gemini/models/gemini-2.5-flash/gemini-2-5-flash/core.md +12 -0
- package/dist/src/prompt-config/types.d.ts +2 -0
- package/dist/src/providers/BaseProvider.d.ts +39 -13
- package/dist/src/providers/BaseProvider.js +102 -28
- package/dist/src/providers/BaseProvider.js.map +1 -1
- package/dist/src/providers/IProvider.d.ts +17 -3
- package/dist/src/providers/LoggingProviderWrapper.d.ts +10 -3
- package/dist/src/providers/LoggingProviderWrapper.js +33 -27
- package/dist/src/providers/LoggingProviderWrapper.js.map +1 -1
- package/dist/src/providers/ProviderContentGenerator.d.ts +2 -2
- package/dist/src/providers/ProviderContentGenerator.js +9 -6
- package/dist/src/providers/ProviderContentGenerator.js.map +1 -1
- package/dist/src/providers/ProviderManager.d.ts +4 -0
- package/dist/src/providers/ProviderManager.js +6 -0
- package/dist/src/providers/ProviderManager.js.map +1 -1
- package/dist/src/providers/anthropic/AnthropicProvider.d.ts +34 -21
- package/dist/src/providers/anthropic/AnthropicProvider.js +505 -492
- package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -1
- package/dist/src/providers/gemini/GeminiProvider.d.ts +23 -9
- package/dist/src/providers/gemini/GeminiProvider.js +344 -515
- package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
- package/dist/src/providers/openai/ConversationCache.d.ts +3 -3
- package/dist/src/providers/openai/IChatGenerateParams.d.ts +9 -4
- package/dist/src/providers/openai/OpenAIProvider.d.ts +46 -96
- package/dist/src/providers/openai/OpenAIProvider.js +580 -1392
- package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
- package/dist/src/providers/openai/buildResponsesRequest.d.ts +3 -3
- package/dist/src/providers/openai/buildResponsesRequest.js +67 -37
- package/dist/src/providers/openai/buildResponsesRequest.js.map +1 -1
- package/dist/src/providers/openai/estimateRemoteTokens.d.ts +2 -2
- package/dist/src/providers/openai/estimateRemoteTokens.js +21 -8
- package/dist/src/providers/openai/estimateRemoteTokens.js.map +1 -1
- package/dist/src/providers/openai/parseResponsesStream.d.ts +6 -2
- package/dist/src/providers/openai/parseResponsesStream.js +99 -391
- package/dist/src/providers/openai/parseResponsesStream.js.map +1 -1
- package/dist/src/providers/openai/syntheticToolResponses.d.ts +5 -5
- package/dist/src/providers/openai/syntheticToolResponses.js +102 -91
- package/dist/src/providers/openai/syntheticToolResponses.js.map +1 -1
- package/dist/src/providers/openai-responses/OpenAIResponsesProvider.d.ts +89 -0
- package/dist/src/providers/openai-responses/OpenAIResponsesProvider.js +451 -0
- package/dist/src/providers/openai-responses/OpenAIResponsesProvider.js.map +1 -0
- package/dist/src/providers/openai-responses/index.d.ts +1 -0
- package/dist/src/providers/openai-responses/index.js +2 -0
- package/dist/src/providers/openai-responses/index.js.map +1 -0
- package/dist/src/providers/tokenizers/OpenAITokenizer.js +3 -3
- package/dist/src/providers/tokenizers/OpenAITokenizer.js.map +1 -1
- package/dist/src/providers/types.d.ts +1 -1
- package/dist/src/services/ClipboardService.d.ts +19 -0
- package/dist/src/services/ClipboardService.js +66 -0
- package/dist/src/services/ClipboardService.js.map +1 -0
- package/dist/src/services/history/ContentConverters.d.ts +43 -0
- package/dist/src/services/history/ContentConverters.js +325 -0
- package/dist/src/services/history/ContentConverters.js.map +1 -0
- package/dist/src/{providers/IMessage.d.ts → services/history/HistoryEvents.d.ts} +16 -22
- package/dist/src/{providers/IMessage.js → services/history/HistoryEvents.js} +1 -1
- package/dist/src/services/history/HistoryEvents.js.map +1 -0
- package/dist/src/services/history/HistoryService.d.ts +220 -0
- package/dist/src/services/history/HistoryService.js +673 -0
- package/dist/src/services/history/HistoryService.js.map +1 -0
- package/dist/src/services/history/IContent.d.ts +183 -0
- package/dist/src/services/history/IContent.js +104 -0
- package/dist/src/services/history/IContent.js.map +1 -0
- package/dist/src/services/index.d.ts +1 -0
- package/dist/src/services/index.js +1 -0
- package/dist/src/services/index.js.map +1 -1
- package/dist/src/settings/SettingsService.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +16 -4
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/tools/IToolFormatter.d.ts +2 -2
- package/dist/src/tools/ToolFormatter.d.ts +42 -4
- package/dist/src/tools/ToolFormatter.js +151 -64
- package/dist/src/tools/ToolFormatter.js.map +1 -1
- package/dist/src/tools/doubleEscapeUtils.d.ts +57 -0
- package/dist/src/tools/doubleEscapeUtils.js +241 -0
- package/dist/src/tools/doubleEscapeUtils.js.map +1 -0
- package/dist/src/tools/read-file.d.ts +6 -1
- package/dist/src/tools/read-file.js +25 -11
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/todo-schemas.d.ts +4 -4
- package/dist/src/tools/tool-registry.d.ts +8 -1
- package/dist/src/tools/tool-registry.js +79 -23
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tools.js +13 -0
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/write-file.d.ts +6 -1
- package/dist/src/tools/write-file.js +48 -26
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/types/modelParams.d.ts +12 -0
- package/dist/src/utils/bfsFileSearch.js +2 -6
- package/dist/src/utils/bfsFileSearch.js.map +1 -1
- package/dist/src/utils/schemaValidator.js +16 -1
- package/dist/src/utils/schemaValidator.js.map +1 -1
- package/package.json +8 -7
- package/dist/src/providers/IMessage.js.map +0 -1
- package/dist/src/providers/adapters/GeminiCompatibleWrapper.d.ts +0 -69
- package/dist/src/providers/adapters/GeminiCompatibleWrapper.js +0 -577
- package/dist/src/providers/adapters/GeminiCompatibleWrapper.js.map +0 -1
@@ -16,6 +16,71 @@
|
|
16
16
|
import { DebugLogger } from '../debug/DebugLogger.js';
|
17
17
|
export class ToolFormatter {
|
18
18
|
logger = new DebugLogger('llxprt:tools:formatter');
|
19
|
+
/**
|
20
|
+
* Convert Gemini format tools directly to OpenAI format
|
21
|
+
* @param geminiTools Tools in Gemini format with functionDeclarations
|
22
|
+
* @returns Tools in OpenAI format with type: "function" wrapper
|
23
|
+
*/
|
24
|
+
convertGeminiToOpenAI(geminiTools) {
|
25
|
+
if (!geminiTools) {
|
26
|
+
this.logger.debug(() => `convertGeminiToOpenAI called with undefined tools`);
|
27
|
+
return undefined;
|
28
|
+
}
|
29
|
+
if (this.logger.enabled) {
|
30
|
+
this.logger.debug(() => `convertGeminiToOpenAI input:`, {
|
31
|
+
toolGroupCount: geminiTools.length,
|
32
|
+
hasFirstGroup: !!geminiTools[0],
|
33
|
+
firstGroupFunctionCount: geminiTools[0]?.functionDeclarations?.length || 0,
|
34
|
+
});
|
35
|
+
}
|
36
|
+
const openAITools = geminiTools.flatMap((toolGroup) => toolGroup.functionDeclarations.map((decl) => {
|
37
|
+
const convertedParams = this.convertGeminiSchemaToStandard(decl.parametersJsonSchema || {});
|
38
|
+
return {
|
39
|
+
type: 'function',
|
40
|
+
function: {
|
41
|
+
name: decl.name,
|
42
|
+
description: decl.description || '',
|
43
|
+
parameters: convertedParams,
|
44
|
+
},
|
45
|
+
};
|
46
|
+
}));
|
47
|
+
if (this.logger.enabled) {
|
48
|
+
this.logger.debug(() => `Converted ${openAITools.length} tools from Gemini to OpenAI format`, {
|
49
|
+
toolNames: openAITools.map((t) => t.function.name),
|
50
|
+
hasFirstTool: !!openAITools[0],
|
51
|
+
firstToolName: openAITools[0]?.function?.name,
|
52
|
+
});
|
53
|
+
}
|
54
|
+
return openAITools;
|
55
|
+
}
|
56
|
+
/**
|
57
|
+
* Convert Gemini format tools directly to Anthropic format
|
58
|
+
* @param geminiTools Tools in Gemini format with functionDeclarations
|
59
|
+
* @returns Tools in Anthropic format with input_schema
|
60
|
+
*/
|
61
|
+
convertGeminiToAnthropic(geminiTools) {
|
62
|
+
if (!geminiTools)
|
63
|
+
return undefined;
|
64
|
+
const anthropicTools = geminiTools.flatMap((toolGroup) => toolGroup.functionDeclarations.map((decl) => {
|
65
|
+
const convertedParams = this.convertGeminiSchemaToStandard(decl.parametersJsonSchema || {});
|
66
|
+
// Remove verbose per-tool logging
|
67
|
+
return {
|
68
|
+
name: decl.name,
|
69
|
+
description: decl.description || '',
|
70
|
+
input_schema: {
|
71
|
+
type: 'object',
|
72
|
+
...convertedParams,
|
73
|
+
},
|
74
|
+
};
|
75
|
+
}));
|
76
|
+
if (this.logger.enabled) {
|
77
|
+
this.logger.debug(() => `Converted ${anthropicTools.length} tools from Gemini to Anthropic format`, {
|
78
|
+
toolNames: anthropicTools.map((t) => t.name),
|
79
|
+
hasFirstTool: !!anthropicTools[0],
|
80
|
+
});
|
81
|
+
}
|
82
|
+
return anthropicTools;
|
83
|
+
}
|
19
84
|
/**
|
20
85
|
* Converts Gemini schema format (with uppercase Type enums) to standard JSON Schema format
|
21
86
|
*/
|
@@ -45,6 +110,31 @@ export class ToolFormatter {
|
|
45
110
|
if (newSchema.type) {
|
46
111
|
newSchema.type = String(newSchema.type).toLowerCase();
|
47
112
|
}
|
113
|
+
// Convert enum values if present (they should remain as-is)
|
114
|
+
// But ensure they're arrays of strings, not some other type
|
115
|
+
if (newSchema.enum && Array.isArray(newSchema.enum)) {
|
116
|
+
newSchema.enum = newSchema.enum.map((v) => String(v));
|
117
|
+
}
|
118
|
+
// Convert minLength from string to number if present
|
119
|
+
if (newSchema.minLength && typeof newSchema.minLength === 'string') {
|
120
|
+
const minLengthNum = parseInt(newSchema.minLength, 10);
|
121
|
+
if (!isNaN(minLengthNum)) {
|
122
|
+
newSchema.minLength = minLengthNum;
|
123
|
+
}
|
124
|
+
else {
|
125
|
+
delete newSchema.minLength;
|
126
|
+
}
|
127
|
+
}
|
128
|
+
// Convert maxLength from string to number if present
|
129
|
+
if (newSchema.maxLength && typeof newSchema.maxLength === 'string') {
|
130
|
+
const maxLengthNum = parseInt(newSchema.maxLength, 10);
|
131
|
+
if (!isNaN(maxLengthNum)) {
|
132
|
+
newSchema.maxLength = maxLengthNum;
|
133
|
+
}
|
134
|
+
else {
|
135
|
+
delete newSchema.maxLength;
|
136
|
+
}
|
137
|
+
}
|
48
138
|
return newSchema;
|
49
139
|
}
|
50
140
|
toProviderFormat(tools, format) {
|
@@ -52,20 +142,20 @@ export class ToolFormatter {
|
|
52
142
|
case 'openai':
|
53
143
|
case 'deepseek': // DeepSeek uses same format as OpenAI for now
|
54
144
|
case 'qwen': // Qwen uses same format as OpenAI for now
|
55
|
-
|
145
|
+
// Guard verbose conversion logging
|
146
|
+
if (this.logger.enabled) {
|
147
|
+
this.logger.debug(() => `Converting ${tools.length} tools to ${format} format`);
|
148
|
+
}
|
56
149
|
return tools.map((tool) => {
|
150
|
+
const convertedParams = this.convertGeminiSchemaToStandard(tool.function.parameters);
|
57
151
|
const converted = {
|
58
152
|
type: 'function',
|
59
153
|
function: {
|
60
154
|
name: tool.function.name,
|
61
155
|
description: tool.function.description,
|
62
|
-
parameters:
|
156
|
+
parameters: convertedParams,
|
63
157
|
},
|
64
158
|
};
|
65
|
-
this.logger.debug(() => `Converted tool ${tool.function.name} to ${format} format:`, {
|
66
|
-
original: tool.function.parameters,
|
67
|
-
converted: converted.function.parameters,
|
68
|
-
});
|
69
159
|
return converted;
|
70
160
|
});
|
71
161
|
case 'anthropic':
|
@@ -120,17 +210,15 @@ export class ToolFormatter {
|
|
120
210
|
!openAiToolCall.function.arguments) {
|
121
211
|
throw new Error(`Invalid ${format} tool call format`);
|
122
212
|
}
|
123
|
-
//
|
124
|
-
this.logger.
|
125
|
-
format
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
rawArguments: openAiToolCall.function.arguments,
|
133
|
-
});
|
213
|
+
// Only log tool call conversions if debug is enabled to avoid performance overhead
|
214
|
+
if (this.logger.enabled) {
|
215
|
+
this.logger.debug(() => `Converting ${format} tool call from provider format:`, {
|
216
|
+
format,
|
217
|
+
toolName: openAiToolCall.function.name,
|
218
|
+
argumentsType: typeof openAiToolCall.function.arguments,
|
219
|
+
argumentsLength: openAiToolCall.function.arguments.length,
|
220
|
+
});
|
221
|
+
}
|
134
222
|
// Check if arguments look double-stringified
|
135
223
|
if (format === 'qwen') {
|
136
224
|
const args = openAiToolCall.function.arguments;
|
@@ -158,12 +246,10 @@ export class ToolFormatter {
|
|
158
246
|
}
|
159
247
|
return [
|
160
248
|
{
|
249
|
+
type: 'tool_call',
|
161
250
|
id: openAiToolCall.id,
|
162
|
-
|
163
|
-
|
164
|
-
name: openAiToolCall.function.name,
|
165
|
-
arguments: openAiToolCall.function.arguments,
|
166
|
-
},
|
251
|
+
name: openAiToolCall.function.name,
|
252
|
+
parameters: JSON.parse(openAiToolCall.function.arguments),
|
167
253
|
},
|
168
254
|
];
|
169
255
|
}
|
@@ -176,14 +262,10 @@ export class ToolFormatter {
|
|
176
262
|
}
|
177
263
|
return [
|
178
264
|
{
|
265
|
+
type: 'tool_call',
|
179
266
|
id: anthropicToolCall.id,
|
180
|
-
|
181
|
-
|
182
|
-
name: anthropicToolCall.name,
|
183
|
-
arguments: anthropicToolCall.input
|
184
|
-
? JSON.stringify(anthropicToolCall.input)
|
185
|
-
: '',
|
186
|
-
},
|
267
|
+
name: anthropicToolCall.name,
|
268
|
+
parameters: anthropicToolCall.input || {},
|
187
269
|
},
|
188
270
|
];
|
189
271
|
}
|
@@ -195,12 +277,10 @@ export class ToolFormatter {
|
|
195
277
|
}
|
196
278
|
return [
|
197
279
|
{
|
280
|
+
type: 'tool_call',
|
198
281
|
id: `hermes_${Date.now()}_${Math.random().toString(36).substring(7)}`,
|
199
|
-
|
200
|
-
|
201
|
-
name: hermesToolCall.name,
|
202
|
-
arguments: JSON.stringify(hermesToolCall.arguments || {}),
|
203
|
-
},
|
282
|
+
name: hermesToolCall.name,
|
283
|
+
parameters: hermesToolCall.arguments || {},
|
204
284
|
},
|
205
285
|
];
|
206
286
|
}
|
@@ -212,12 +292,10 @@ export class ToolFormatter {
|
|
212
292
|
}
|
213
293
|
return [
|
214
294
|
{
|
295
|
+
type: 'tool_call',
|
215
296
|
id: `xml_${Date.now()}_${Math.random().toString(36).substring(7)}`,
|
216
|
-
|
217
|
-
|
218
|
-
name: xmlToolCall.name,
|
219
|
-
arguments: JSON.stringify(xmlToolCall.arguments || {}),
|
220
|
-
},
|
297
|
+
name: xmlToolCall.name,
|
298
|
+
parameters: xmlToolCall.arguments || {},
|
221
299
|
},
|
222
300
|
];
|
223
301
|
}
|
@@ -239,31 +317,34 @@ export class ToolFormatter {
|
|
239
317
|
if (deltaToolCall.index !== undefined) {
|
240
318
|
if (!accumulatedToolCalls[deltaToolCall.index]) {
|
241
319
|
accumulatedToolCalls[deltaToolCall.index] = {
|
320
|
+
type: 'tool_call',
|
242
321
|
id: deltaToolCall.id || '',
|
243
|
-
|
244
|
-
|
322
|
+
name: '',
|
323
|
+
parameters: {},
|
245
324
|
};
|
246
325
|
}
|
247
326
|
const tc = accumulatedToolCalls[deltaToolCall.index];
|
248
327
|
if (deltaToolCall.id)
|
249
328
|
tc.id = deltaToolCall.id;
|
250
329
|
if (deltaToolCall.function?.name)
|
251
|
-
tc.
|
330
|
+
tc.name = deltaToolCall.function.name;
|
252
331
|
if (deltaToolCall.function?.arguments) {
|
253
332
|
// Enhanced debug logging for all formats, especially Qwen
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
333
|
+
// Store accumulated arguments as string first, will parse at the end
|
334
|
+
if (!('_argumentsString' in tc)) {
|
335
|
+
tc._argumentsString =
|
336
|
+
'';
|
337
|
+
}
|
338
|
+
// Only log argument accumulation in debug mode to prevent performance issues
|
339
|
+
if (this.logger.enabled) {
|
340
|
+
this.logger.debug(() => `[${format}] Accumulating argument chunk for tool ${tc.name}`, {
|
341
|
+
format,
|
342
|
+
toolName: tc.name,
|
343
|
+
index: deltaToolCall.index,
|
344
|
+
chunkLength: deltaToolCall.function.arguments.length,
|
345
|
+
currentAccumulatedLength: tc._argumentsString.length,
|
346
|
+
});
|
347
|
+
}
|
267
348
|
// Special Qwen double-stringification detection
|
268
349
|
if (format === 'qwen') {
|
269
350
|
// Check if this looks like a double-stringified value
|
@@ -271,20 +352,26 @@ export class ToolFormatter {
|
|
271
352
|
if (chunk.includes('\\"[') ||
|
272
353
|
chunk.includes('\\\\"') ||
|
273
354
|
(chunk.startsWith('"\\"') && chunk.endsWith('\\""'))) {
|
274
|
-
this.logger.error(() => `[Qwen] Detected potential double-stringification in chunk for ${tc.
|
355
|
+
this.logger.error(() => `[Qwen] Detected potential double-stringification in chunk for ${tc.name}`, {
|
275
356
|
chunk,
|
276
357
|
pattern: 'Contains escaped quotes that suggest double-stringification',
|
277
358
|
});
|
278
359
|
}
|
279
360
|
}
|
280
|
-
tc.
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
361
|
+
tc._argumentsString +=
|
362
|
+
deltaToolCall.function.arguments;
|
363
|
+
// Remove excessive accumulation logging
|
364
|
+
// Try to parse parameters
|
365
|
+
try {
|
366
|
+
const argsStr = tc
|
367
|
+
._argumentsString;
|
368
|
+
if (argsStr.trim()) {
|
369
|
+
tc.parameters = JSON.parse(argsStr);
|
370
|
+
}
|
371
|
+
}
|
372
|
+
catch {
|
373
|
+
// Keep accumulating, parameters will be set when complete
|
374
|
+
}
|
288
375
|
}
|
289
376
|
}
|
290
377
|
break;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ToolFormatter.js","sourceRoot":"","sources":["../../../src/tools/ToolFormatter.ts"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"ToolFormatter.js","sourceRoot":"","sources":["../../../src/tools/ToolFormatter.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,57 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright 2025 Vybestack LLC
|
3
|
+
*
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
* you may not use this file except in compliance with the License.
|
6
|
+
* You may obtain a copy of the License at
|
7
|
+
*
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
*
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
* See the License for the specific language governing permissions and
|
14
|
+
* limitations under the License.
|
15
|
+
*/
|
16
|
+
/**
|
17
|
+
* Detects if a tool format should use double-escape handling
|
18
|
+
* @param toolFormat - The tool format to check
|
19
|
+
* @returns true if the format typically needs double-escape handling
|
20
|
+
*/
|
21
|
+
export declare function shouldUseDoubleEscapeHandling(toolFormat: string): boolean;
|
22
|
+
/**
|
23
|
+
* Checks if a JSON string appears to be double-stringified
|
24
|
+
* @param jsonString - The JSON string to check
|
25
|
+
* @returns Object with detection results and corrected value if applicable
|
26
|
+
*/
|
27
|
+
export declare function detectDoubleEscaping(jsonString: string): {
|
28
|
+
isDoubleEscaped: boolean;
|
29
|
+
correctedValue?: unknown;
|
30
|
+
originalValue: string;
|
31
|
+
detectionDetails: {
|
32
|
+
firstParse?: string;
|
33
|
+
secondParse?: unknown;
|
34
|
+
error?: string;
|
35
|
+
};
|
36
|
+
};
|
37
|
+
/**
|
38
|
+
* Detects double-escaping in streaming tool call chunks
|
39
|
+
* @param chunk - The streaming chunk to analyze
|
40
|
+
* @returns true if double-escaping patterns are detected
|
41
|
+
*/
|
42
|
+
export declare function detectDoubleEscapingInChunk(chunk: string): boolean;
|
43
|
+
/**
|
44
|
+
* Processes tool call parameters, fixing double-escaping if detected
|
45
|
+
* @param parametersString - The JSON string containing tool parameters
|
46
|
+
* @param toolName - Name of the tool (for logging)
|
47
|
+
* @param format - The tool format being used (for context)
|
48
|
+
* @returns Processed parameters object
|
49
|
+
*/
|
50
|
+
export declare function processToolParameters(parametersString: string, toolName: string, format: string): unknown;
|
51
|
+
/**
|
52
|
+
* Logs double-escaping detection in streaming chunks (for debugging)
|
53
|
+
* @param chunk - The chunk that contains potential double-escaping
|
54
|
+
* @param toolName - Name of the tool
|
55
|
+
* @param format - The tool format
|
56
|
+
*/
|
57
|
+
export declare function logDoubleEscapingInChunk(chunk: string, toolName: string, format: string): void;
|
@@ -0,0 +1,241 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright 2025 Vybestack LLC
|
3
|
+
*
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
* you may not use this file except in compliance with the License.
|
6
|
+
* You may obtain a copy of the License at
|
7
|
+
*
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
*
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
* See the License for the specific language governing permissions and
|
14
|
+
* limitations under the License.
|
15
|
+
*/
|
16
|
+
/**
|
17
|
+
* Utility functions for detecting and handling double-escaped tool calls
|
18
|
+
* Used by providers that need to work with models that double-escape JSON parameters
|
19
|
+
* (e.g., Qwen models, GLM-4.5 models)
|
20
|
+
*/
|
21
|
+
import { DebugLogger } from '../debug/index.js';
|
22
|
+
const logger = new DebugLogger('llxprt:tools:doubleEscape');
|
23
|
+
/**
|
24
|
+
* Detects if a tool format should use double-escape handling
|
25
|
+
* @param toolFormat - The tool format to check
|
26
|
+
* @returns true if the format typically needs double-escape handling
|
27
|
+
*/
|
28
|
+
export function shouldUseDoubleEscapeHandling(toolFormat) {
|
29
|
+
// Qwen format needs double-escape handling (includes GLM-4.5 which uses qwen format)
|
30
|
+
return toolFormat === 'qwen';
|
31
|
+
}
|
32
|
+
/**
|
33
|
+
* Checks if a JSON string appears to be double-stringified
|
34
|
+
* @param jsonString - The JSON string to check
|
35
|
+
* @returns Object with detection results and corrected value if applicable
|
36
|
+
*/
|
37
|
+
export function detectDoubleEscaping(jsonString) {
|
38
|
+
const result = {
|
39
|
+
isDoubleEscaped: false,
|
40
|
+
correctedValue: undefined,
|
41
|
+
originalValue: jsonString,
|
42
|
+
detectionDetails: {},
|
43
|
+
};
|
44
|
+
try {
|
45
|
+
const parsed = JSON.parse(jsonString);
|
46
|
+
if (typeof parsed === 'string') {
|
47
|
+
result.detectionDetails.firstParse = parsed;
|
48
|
+
// Arguments were stringified, let's check if they're double-stringified
|
49
|
+
try {
|
50
|
+
const doubleParsed = JSON.parse(parsed);
|
51
|
+
result.isDoubleEscaped = true;
|
52
|
+
result.correctedValue = doubleParsed;
|
53
|
+
result.detectionDetails.secondParse = doubleParsed;
|
54
|
+
logger.error(() => `Detected double-stringified JSON parameters`, {
|
55
|
+
firstParse: parsed,
|
56
|
+
secondParse: doubleParsed,
|
57
|
+
originalLength: jsonString.length,
|
58
|
+
});
|
59
|
+
}
|
60
|
+
catch (_secondParseError) {
|
61
|
+
// Not double-stringified, just single stringified
|
62
|
+
logger.debug(() => `JSON parameters are single-stringified (normal)`);
|
63
|
+
result.correctedValue = parsed;
|
64
|
+
}
|
65
|
+
}
|
66
|
+
else if (typeof parsed === 'object' && parsed !== null) {
|
67
|
+
// Check if it's an object with stringified values (common pattern)
|
68
|
+
const hasStringifiedValues = Object.values(parsed).some((value) => {
|
69
|
+
if (typeof value === 'string') {
|
70
|
+
try {
|
71
|
+
const testParse = JSON.parse(value);
|
72
|
+
// If we can parse it and it's an array or object, it's likely stringified
|
73
|
+
return typeof testParse === 'object';
|
74
|
+
}
|
75
|
+
catch {
|
76
|
+
return false;
|
77
|
+
}
|
78
|
+
}
|
79
|
+
return false;
|
80
|
+
});
|
81
|
+
if (hasStringifiedValues) {
|
82
|
+
// Fix stringified values
|
83
|
+
const fixed = { ...parsed };
|
84
|
+
for (const [key, value] of Object.entries(fixed)) {
|
85
|
+
if (typeof value === 'string') {
|
86
|
+
try {
|
87
|
+
const testParse = JSON.parse(value);
|
88
|
+
if (typeof testParse === 'object') {
|
89
|
+
fixed[key] = testParse;
|
90
|
+
result.isDoubleEscaped = true;
|
91
|
+
}
|
92
|
+
}
|
93
|
+
catch {
|
94
|
+
// Keep original value if can't parse
|
95
|
+
}
|
96
|
+
}
|
97
|
+
}
|
98
|
+
result.correctedValue = fixed;
|
99
|
+
if (result.isDoubleEscaped) {
|
100
|
+
logger.error(() => `Fixed stringified parameter values`, {
|
101
|
+
original: parsed,
|
102
|
+
fixed,
|
103
|
+
});
|
104
|
+
}
|
105
|
+
}
|
106
|
+
else {
|
107
|
+
result.correctedValue = parsed;
|
108
|
+
}
|
109
|
+
}
|
110
|
+
else {
|
111
|
+
// Already parsed correctly
|
112
|
+
result.correctedValue = parsed;
|
113
|
+
}
|
114
|
+
}
|
115
|
+
catch (parseError) {
|
116
|
+
result.detectionDetails.error = String(parseError);
|
117
|
+
logger.error(() => `Failed to parse JSON parameters:`, parseError);
|
118
|
+
}
|
119
|
+
return result;
|
120
|
+
}
|
121
|
+
/**
|
122
|
+
* Detects double-escaping in streaming tool call chunks
|
123
|
+
* @param chunk - The streaming chunk to analyze
|
124
|
+
* @returns true if double-escaping patterns are detected
|
125
|
+
*/
|
126
|
+
export function detectDoubleEscapingInChunk(chunk) {
|
127
|
+
// Check for common double-escaping patterns in streaming chunks
|
128
|
+
// Using String.raw to avoid eslint no-useless-escape issues
|
129
|
+
const backslashBracket = String.raw `\\[`;
|
130
|
+
const doubleBackslash = String.raw `\\\\`;
|
131
|
+
const backslashQuote = String.raw `\\"`;
|
132
|
+
const startPattern = String.raw `"\\`;
|
133
|
+
const endPattern = String.raw `\\"`;
|
134
|
+
return (chunk.includes(backslashBracket) ||
|
135
|
+
chunk.includes(doubleBackslash) ||
|
136
|
+
chunk.includes(backslashQuote) ||
|
137
|
+
(chunk.startsWith(startPattern) && chunk.endsWith(endPattern)));
|
138
|
+
}
|
139
|
+
/**
|
140
|
+
* Processes tool call parameters, fixing double-escaping if detected
|
141
|
+
* @param parametersString - The JSON string containing tool parameters
|
142
|
+
* @param toolName - Name of the tool (for logging)
|
143
|
+
* @param format - The tool format being used (for context)
|
144
|
+
* @returns Processed parameters object
|
145
|
+
*/
|
146
|
+
export function processToolParameters(parametersString, toolName, format) {
|
147
|
+
if (!parametersString.trim()) {
|
148
|
+
return {};
|
149
|
+
}
|
150
|
+
// Only apply double-escape handling for formats that need it
|
151
|
+
if (!shouldUseDoubleEscapeHandling(format)) {
|
152
|
+
// For formats that don't need double-escape handling, parse the JSON string
|
153
|
+
try {
|
154
|
+
return JSON.parse(parametersString);
|
155
|
+
}
|
156
|
+
catch (e) {
|
157
|
+
logger.debug(() => `Failed to parse tool parameters as JSON: ${e}`);
|
158
|
+
return parametersString; // Return as-is if not valid JSON
|
159
|
+
}
|
160
|
+
}
|
161
|
+
// Apply double-escape detection and fixing for qwen format
|
162
|
+
const detection = detectDoubleEscaping(parametersString);
|
163
|
+
if (detection.isDoubleEscaped) {
|
164
|
+
logger.error(() => `[${format}] Fixed double-escaped parameters for ${toolName}`, {
|
165
|
+
tool: toolName,
|
166
|
+
format,
|
167
|
+
originalLength: parametersString.length,
|
168
|
+
fixed: true,
|
169
|
+
});
|
170
|
+
// Convert string numbers to actual numbers for qwen format
|
171
|
+
return convertStringNumbersToNumbers(detection.correctedValue);
|
172
|
+
}
|
173
|
+
else if (detection.detectionDetails.error) {
|
174
|
+
logger.error(() => `[${format}] Failed to parse parameters for ${toolName}`, {
|
175
|
+
tool: toolName,
|
176
|
+
format,
|
177
|
+
error: detection.detectionDetails.error,
|
178
|
+
});
|
179
|
+
// Return the string as-is if parsing fails
|
180
|
+
return parametersString;
|
181
|
+
}
|
182
|
+
// Convert string numbers to actual numbers for qwen format
|
183
|
+
return convertStringNumbersToNumbers(detection.correctedValue);
|
184
|
+
}
|
185
|
+
/**
|
186
|
+
* Converts string numbers to actual numbers in an object
|
187
|
+
* This is needed for qwen models that stringify numeric parameters
|
188
|
+
* @param obj - The object to fix
|
189
|
+
* @returns The object with numeric strings converted to numbers
|
190
|
+
*/
|
191
|
+
function convertStringNumbersToNumbers(obj) {
|
192
|
+
if (obj === null || obj === undefined) {
|
193
|
+
return obj;
|
194
|
+
}
|
195
|
+
if (typeof obj === 'string') {
|
196
|
+
// Check if it's a numeric string
|
197
|
+
if (/^-?\d+$/.test(obj)) {
|
198
|
+
// Integer
|
199
|
+
const num = parseInt(obj, 10);
|
200
|
+
if (!isNaN(num))
|
201
|
+
return num;
|
202
|
+
}
|
203
|
+
else if (/^-?\d*\.?\d+$/.test(obj)) {
|
204
|
+
// Float
|
205
|
+
const num = parseFloat(obj);
|
206
|
+
if (!isNaN(num))
|
207
|
+
return num;
|
208
|
+
}
|
209
|
+
return obj;
|
210
|
+
}
|
211
|
+
if (Array.isArray(obj)) {
|
212
|
+
return obj.map(convertStringNumbersToNumbers);
|
213
|
+
}
|
214
|
+
if (typeof obj === 'object') {
|
215
|
+
const result = {};
|
216
|
+
for (const [key, value] of Object.entries(obj)) {
|
217
|
+
result[key] = convertStringNumbersToNumbers(value);
|
218
|
+
}
|
219
|
+
return result;
|
220
|
+
}
|
221
|
+
return obj;
|
222
|
+
}
|
223
|
+
/**
|
224
|
+
* Logs double-escaping detection in streaming chunks (for debugging)
|
225
|
+
* @param chunk - The chunk that contains potential double-escaping
|
226
|
+
* @param toolName - Name of the tool
|
227
|
+
* @param format - The tool format
|
228
|
+
*/
|
229
|
+
export function logDoubleEscapingInChunk(chunk, toolName, format) {
|
230
|
+
// Only log for formats that use double-escape handling
|
231
|
+
if (shouldUseDoubleEscapeHandling(format) &&
|
232
|
+
detectDoubleEscapingInChunk(chunk)) {
|
233
|
+
logger.error(() => `[${format}] Detected potential double-escaping in streaming chunk for ${toolName}`, {
|
234
|
+
chunk,
|
235
|
+
tool: toolName,
|
236
|
+
format,
|
237
|
+
pattern: 'Contains escaped quotes that suggest double-stringification',
|
238
|
+
});
|
239
|
+
}
|
240
|
+
}
|
241
|
+
//# sourceMappingURL=doubleEscapeUtils.js.map
|