@vybestack/llxprt-code-core 0.4.2 → 0.4.3-nightly.251018.dbf36526
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/src/core/client.d.ts +1 -0
- package/dist/src/core/client.js +16 -3
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/geminiChat.d.ts +2 -0
- package/dist/src/core/geminiChat.js +103 -33
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/prompts.js +26 -4
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/prompt-config/defaults/core.md +2 -0
- package/dist/src/providers/BaseProvider.d.ts +2 -2
- package/dist/src/providers/BaseProvider.js +9 -0
- package/dist/src/providers/BaseProvider.js.map +1 -1
- package/dist/src/providers/ProviderManager.js +6 -0
- package/dist/src/providers/ProviderManager.js.map +1 -1
- package/dist/src/providers/anthropic/AnthropicProvider.js +68 -10
- package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -1
- package/dist/src/providers/gemini/GeminiProvider.d.ts +14 -0
- package/dist/src/providers/gemini/GeminiProvider.js +81 -2
- package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
- package/dist/src/providers/openai/OpenAIProvider.js +6 -12
- package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
- package/dist/src/providers/openai-responses/OpenAIResponsesProvider.js +5 -1
- package/dist/src/providers/openai-responses/OpenAIResponsesProvider.js.map +1 -1
- package/dist/src/providers/tokenizers/OpenAITokenizer.d.ts +1 -0
- package/dist/src/providers/tokenizers/OpenAITokenizer.js +5 -0
- package/dist/src/providers/tokenizers/OpenAITokenizer.js.map +1 -1
- package/dist/src/services/fileDiscoveryService.d.ts +2 -0
- package/dist/src/services/fileDiscoveryService.js +58 -20
- package/dist/src/services/fileDiscoveryService.js.map +1 -1
- package/dist/src/services/history/HistoryService.d.ts +8 -0
- package/dist/src/services/history/HistoryService.js +69 -0
- package/dist/src/services/history/HistoryService.js.map +1 -1
- package/dist/src/tools/glob.js +15 -5
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/read-many-files.js +9 -10
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/shell.d.ts +16 -0
- package/dist/src/tools/shell.js +154 -53
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/tool-registry.d.ts +3 -0
- package/dist/src/tools/tool-registry.js +87 -84
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/utils/toolOutputLimiter.d.ts +3 -0
- package/dist/src/utils/toolOutputLimiter.js +98 -18
- package/dist/src/utils/toolOutputLimiter.js.map +1 -1
- package/package.json +1 -1
package/dist/src/tools/shell.js
CHANGED
|
@@ -7,6 +7,7 @@ import fs from 'fs';
|
|
|
7
7
|
import path from 'path';
|
|
8
8
|
import os, { EOL } from 'os';
|
|
9
9
|
import crypto from 'crypto';
|
|
10
|
+
import { spawnSync } from 'child_process';
|
|
10
11
|
import { ToolErrorType } from './tool-error.js';
|
|
11
12
|
import { BaseDeclarativeTool, BaseToolInvocation, ToolConfirmationOutcome, Kind, } from './tools.js';
|
|
12
13
|
import { getErrorMessage } from '../utils/errors.js';
|
|
@@ -58,6 +59,21 @@ class ShellToolInvocation extends BaseToolInvocation {
|
|
|
58
59
|
return confirmationDetails;
|
|
59
60
|
}
|
|
60
61
|
async execute(signal, updateOutput, terminalColumns, terminalRows) {
|
|
62
|
+
// Validate filtering parameters
|
|
63
|
+
if (this.params.head_lines) {
|
|
64
|
+
validatePositiveInteger(this.params.head_lines, 'head_lines');
|
|
65
|
+
}
|
|
66
|
+
if (this.params.tail_lines) {
|
|
67
|
+
validatePositiveInteger(this.params.tail_lines, 'tail_lines');
|
|
68
|
+
}
|
|
69
|
+
if (this.params.grep_pattern) {
|
|
70
|
+
if (!this.params.grep_pattern.trim()) {
|
|
71
|
+
throw new Error('grep_pattern cannot be empty');
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (this.params.grep_flags) {
|
|
75
|
+
validateGrepFlags(this.params.grep_flags);
|
|
76
|
+
}
|
|
61
77
|
const strippedCommand = stripShellWrapper(this.params.command);
|
|
62
78
|
if (signal.aborted) {
|
|
63
79
|
return {
|
|
@@ -86,7 +102,7 @@ class ShellToolInvocation extends BaseToolInvocation {
|
|
|
86
102
|
let outputChunks = [cumulativeOutput];
|
|
87
103
|
let lastUpdateTime = Date.now();
|
|
88
104
|
let isBinaryStream = false;
|
|
89
|
-
const
|
|
105
|
+
const executionResult = await ShellExecutionService.execute(commandToExecute, cwd, (event) => {
|
|
90
106
|
if (!updateOutput) {
|
|
91
107
|
return;
|
|
92
108
|
}
|
|
@@ -126,9 +142,10 @@ class ShellToolInvocation extends BaseToolInvocation {
|
|
|
126
142
|
lastUpdateTime = Date.now();
|
|
127
143
|
}
|
|
128
144
|
}, signal, this.config.getShouldUseNodePtyShell(), terminalColumns, terminalRows);
|
|
129
|
-
const result = await
|
|
145
|
+
const result = await executionResult.result;
|
|
130
146
|
const backgroundPIDs = [];
|
|
131
|
-
|
|
147
|
+
let pgid = null;
|
|
148
|
+
if (os.platform() !== 'win32' && result) {
|
|
132
149
|
if (fs.existsSync(tempFilePath)) {
|
|
133
150
|
const pgrepLines = fs
|
|
134
151
|
.readFileSync(tempFilePath, 'utf8')
|
|
@@ -139,7 +156,7 @@ class ShellToolInvocation extends BaseToolInvocation {
|
|
|
139
156
|
console.error(`pgrep: ${line}`);
|
|
140
157
|
}
|
|
141
158
|
const pid = Number(line);
|
|
142
|
-
if (pid !== result.pid) {
|
|
159
|
+
if (result.pid && pid !== result.pid) {
|
|
143
160
|
backgroundPIDs.push(pid);
|
|
144
161
|
}
|
|
145
162
|
}
|
|
@@ -149,63 +166,91 @@ class ShellToolInvocation extends BaseToolInvocation {
|
|
|
149
166
|
console.error('missing pgrep output');
|
|
150
167
|
}
|
|
151
168
|
}
|
|
169
|
+
// Try to get the actual PGID
|
|
170
|
+
try {
|
|
171
|
+
const psResult = spawnSync('ps', [
|
|
172
|
+
'-o',
|
|
173
|
+
'pgid=',
|
|
174
|
+
'-p',
|
|
175
|
+
String(result.pid),
|
|
176
|
+
]);
|
|
177
|
+
if (psResult.status === 0 && psResult.stdout.toString().trim()) {
|
|
178
|
+
pgid = parseInt(psResult.stdout.toString().trim(), 10);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
// If we can't get the PGID, that's okay
|
|
183
|
+
console.error('Failed to get PGID:', error);
|
|
184
|
+
}
|
|
152
185
|
}
|
|
186
|
+
const rawOutput = result?.output ?? '';
|
|
187
|
+
const filterInfo = applyOutputFilters(rawOutput, this.params);
|
|
188
|
+
const filteredOutput = filterInfo.content;
|
|
153
189
|
let llmContent = '';
|
|
154
|
-
|
|
190
|
+
let returnDisplayMessage = '';
|
|
191
|
+
if (!result) {
|
|
192
|
+
llmContent = 'Command failed to execute.';
|
|
193
|
+
if (this.config.getDebugMode()) {
|
|
194
|
+
returnDisplayMessage = llmContent;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
else if (result.aborted) {
|
|
155
198
|
llmContent = 'Command was cancelled by user before it could complete.';
|
|
156
|
-
if (
|
|
157
|
-
llmContent += ` Below is the output before it was cancelled:\n${
|
|
199
|
+
if (rawOutput && rawOutput.trim()) {
|
|
200
|
+
llmContent += ` Below is the output before it was cancelled:\n${rawOutput}`;
|
|
158
201
|
}
|
|
159
202
|
else {
|
|
160
203
|
llmContent += ' There was no output before it was cancelled.';
|
|
161
204
|
}
|
|
205
|
+
if (this.config.getDebugMode()) {
|
|
206
|
+
returnDisplayMessage = llmContent;
|
|
207
|
+
}
|
|
208
|
+
else if (filteredOutput && filteredOutput.trim()) {
|
|
209
|
+
returnDisplayMessage = filteredOutput;
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
returnDisplayMessage = 'Command cancelled by user.';
|
|
213
|
+
}
|
|
162
214
|
}
|
|
163
215
|
else {
|
|
164
|
-
// Create a formatted error string for display, replacing the wrapper command
|
|
165
|
-
// with the user-facing command.
|
|
166
216
|
const finalError = result.error
|
|
167
217
|
? result.error.message.replace(commandToExecute, this.params.command)
|
|
168
218
|
: '(none)';
|
|
169
219
|
llmContent = [
|
|
170
220
|
`Command: ${this.params.command}`,
|
|
171
221
|
`Directory: ${this.params.directory || '(root)'}`,
|
|
172
|
-
`
|
|
173
|
-
`
|
|
222
|
+
`Stdout: ${filteredOutput || '(empty)'}`,
|
|
223
|
+
`Stderr: ${result.stderr || '(empty)'}`,
|
|
224
|
+
`Error: ${finalError}`,
|
|
174
225
|
`Exit Code: ${result.exitCode ?? '(none)'}`,
|
|
175
226
|
`Signal: ${result.signal ?? '(none)'}`,
|
|
176
227
|
`Background PIDs: ${backgroundPIDs.length ? backgroundPIDs.join(', ') : '(none)'}`,
|
|
177
|
-
`Process Group PGID: ${result.pid ?? '(none)'}`,
|
|
228
|
+
`Process Group PGID: ${pgid ?? result.pid ?? '(none)'}`,
|
|
178
229
|
].join('\n');
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
if (this.config.getDebugMode()) {
|
|
182
|
-
returnDisplayMessage = llmContent;
|
|
183
|
-
}
|
|
184
|
-
else {
|
|
185
|
-
if (result.output.trim()) {
|
|
186
|
-
returnDisplayMessage = result.output;
|
|
230
|
+
if (this.config.getDebugMode()) {
|
|
231
|
+
returnDisplayMessage = llmContent;
|
|
187
232
|
}
|
|
188
|
-
else {
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
returnDisplayMessage = `Command terminated by signal: ${result.signal}`;
|
|
194
|
-
}
|
|
195
|
-
else if (result.error) {
|
|
196
|
-
returnDisplayMessage = `Command failed: ${getErrorMessage(result.error)}`;
|
|
197
|
-
}
|
|
198
|
-
else if (result.exitCode !== null && result.exitCode !== 0) {
|
|
199
|
-
returnDisplayMessage = `Command exited with code: ${result.exitCode}`;
|
|
200
|
-
}
|
|
201
|
-
// If output is empty and command succeeded (code 0, no error/signal/abort),
|
|
202
|
-
// returnDisplayMessage will remain empty, which is fine.
|
|
233
|
+
else if (filteredOutput && filteredOutput.trim()) {
|
|
234
|
+
returnDisplayMessage = filteredOutput;
|
|
235
|
+
}
|
|
236
|
+
else if (result.signal) {
|
|
237
|
+
returnDisplayMessage = `Command terminated by signal: ${result.signal}`;
|
|
203
238
|
}
|
|
239
|
+
else if (result.error) {
|
|
240
|
+
returnDisplayMessage = `Command failed: ${getErrorMessage(result.error)}`;
|
|
241
|
+
}
|
|
242
|
+
else if (result.exitCode !== null && result.exitCode !== 0) {
|
|
243
|
+
returnDisplayMessage = `Command exited with code: ${result.exitCode}`;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
if (filterInfo.description && !this.config.getDebugMode()) {
|
|
247
|
+
returnDisplayMessage = returnDisplayMessage
|
|
248
|
+
? `[${filterInfo.description}]\n${returnDisplayMessage}`
|
|
249
|
+
: `[${filterInfo.description}]`;
|
|
204
250
|
}
|
|
205
|
-
let processedContent = llmContent;
|
|
206
251
|
// Check if summarization is configured
|
|
207
252
|
const summarizeConfig = this.config.getSummarizeToolOutputConfig();
|
|
208
|
-
const executionError = result
|
|
253
|
+
const executionError = result?.error
|
|
209
254
|
? {
|
|
210
255
|
error: {
|
|
211
256
|
message: result.error.message,
|
|
@@ -213,7 +258,11 @@ class ShellToolInvocation extends BaseToolInvocation {
|
|
|
213
258
|
},
|
|
214
259
|
}
|
|
215
260
|
: {};
|
|
216
|
-
|
|
261
|
+
let llmPayload = llmContent;
|
|
262
|
+
if (summarizeConfig &&
|
|
263
|
+
summarizeConfig[ShellTool.Name] &&
|
|
264
|
+
result &&
|
|
265
|
+
!result.aborted) {
|
|
217
266
|
// Get the ServerToolsProvider for summarization
|
|
218
267
|
const contentGenConfig = this.config.getContentGeneratorConfig();
|
|
219
268
|
if (contentGenConfig?.providerManager) {
|
|
@@ -223,14 +272,17 @@ class ShellToolInvocation extends BaseToolInvocation {
|
|
|
223
272
|
// TODO: Need to adapt summarizeToolOutput to use ServerToolsProvider
|
|
224
273
|
// For now, check if it's a Gemini provider and use the existing function
|
|
225
274
|
if (serverToolsProvider.name === 'gemini') {
|
|
226
|
-
|
|
275
|
+
const summary = await summarizeToolOutput(llmContent, this.config.getGeminiClient(), signal, summarizeConfig[ShellTool.Name].tokenBudget);
|
|
276
|
+
if (summary) {
|
|
277
|
+
llmPayload = summary;
|
|
278
|
+
}
|
|
227
279
|
}
|
|
228
280
|
// If not Gemini, we can't summarize yet - need provider-agnostic summarization
|
|
229
281
|
}
|
|
230
282
|
}
|
|
231
283
|
}
|
|
232
284
|
// ALWAYS apply token-based limiting at the end to protect the outer model
|
|
233
|
-
const limitedResult = limitOutputTokens(
|
|
285
|
+
const limitedResult = limitOutputTokens(llmPayload, this.config, 'run_shell_command');
|
|
234
286
|
if (limitedResult.wasTruncated) {
|
|
235
287
|
const formatted = formatLimitedOutput(limitedResult);
|
|
236
288
|
return {
|
|
@@ -252,20 +304,69 @@ class ShellToolInvocation extends BaseToolInvocation {
|
|
|
252
304
|
}
|
|
253
305
|
}
|
|
254
306
|
}
|
|
307
|
+
function applyOutputFilters(output, params) {
|
|
308
|
+
let content = output;
|
|
309
|
+
const descriptionParts = [];
|
|
310
|
+
// Apply grep filter first
|
|
311
|
+
if (params.grep_pattern) {
|
|
312
|
+
const lines = content.split('\n');
|
|
313
|
+
let filteredLines;
|
|
314
|
+
if (params.grep_flags?.includes('-v')) {
|
|
315
|
+
// Inverted grep
|
|
316
|
+
const options = params.grep_flags.includes('-i') ? 'i' : '';
|
|
317
|
+
const regex = new RegExp(params.grep_pattern, options);
|
|
318
|
+
filteredLines = lines.filter((line) => !regex.test(line));
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
// Normal grep
|
|
322
|
+
const options = params.grep_flags?.includes('-i') ? 'i' : '';
|
|
323
|
+
const regex = new RegExp(params.grep_pattern, options);
|
|
324
|
+
filteredLines = lines.filter((line) => regex.test(line));
|
|
325
|
+
}
|
|
326
|
+
content = filteredLines.join('\n');
|
|
327
|
+
descriptionParts.push(`grep_pattern filter: "${params.grep_pattern}"`);
|
|
328
|
+
if (params.grep_flags?.length) {
|
|
329
|
+
descriptionParts.push(`flags: [${params.grep_flags.join(', ')}]`);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
// Apply head_lines filter
|
|
333
|
+
if (params.head_lines) {
|
|
334
|
+
validatePositiveInteger(params.head_lines, 'head_lines');
|
|
335
|
+
const lines = content.split('\n');
|
|
336
|
+
const headLines = lines.slice(0, params.head_lines);
|
|
337
|
+
const wasTruncated = lines.length > params.head_lines;
|
|
338
|
+
content = headLines.join('\n');
|
|
339
|
+
descriptionParts.push(`head_lines filter: showing first ${params.head_lines} lines${wasTruncated ? ` (of ${lines.length} total)` : ''}`);
|
|
340
|
+
}
|
|
341
|
+
// Apply tail_lines filter
|
|
342
|
+
if (params.tail_lines) {
|
|
343
|
+
validatePositiveInteger(params.tail_lines, 'tail_lines');
|
|
344
|
+
const lines = content.split('\n');
|
|
345
|
+
const tailLines = lines.slice(-params.tail_lines);
|
|
346
|
+
const wasTruncated = lines.length > params.tail_lines;
|
|
347
|
+
content = tailLines.join('\n');
|
|
348
|
+
descriptionParts.push(`tail_lines filter: showing last ${params.tail_lines} lines${wasTruncated ? ` (of ${lines.length} total)` : ''}`);
|
|
349
|
+
}
|
|
350
|
+
return {
|
|
351
|
+
content,
|
|
352
|
+
description: descriptionParts.length > 0 ? descriptionParts.join('; ') : undefined,
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
function validatePositiveInteger(value, paramName) {
|
|
356
|
+
if (!Number.isInteger(value) || value <= 0) {
|
|
357
|
+
throw new Error(`${paramName} must be a positive integer, got: ${value}`);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
function validateGrepFlags(flags) {
|
|
361
|
+
const validFlags = ['-i', '-v', '-E', '-F', '-x', '-w'];
|
|
362
|
+
for (const flag of flags) {
|
|
363
|
+
if (!validFlags.includes(flag)) {
|
|
364
|
+
throw new Error(`Invalid grep flag: ${flag}. Valid flags: ${validFlags.join(', ')}`);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
}
|
|
255
368
|
function getShellToolDescription() {
|
|
256
|
-
const returnedInfo =
|
|
257
|
-
|
|
258
|
-
The following information is returned:
|
|
259
|
-
|
|
260
|
-
Command: Executed command.
|
|
261
|
-
Directory: Directory (relative to project root) where command was executed, or \`(root)\`.
|
|
262
|
-
Stdout: Output on stdout stream. Can be \`(empty)\` or partial on error and for any unwaited background processes.
|
|
263
|
-
Stderr: Output on stderr stream. Can be \`(empty)\` or partial on error and for any unwaited background processes.
|
|
264
|
-
Error: Error or \`(none)\` if no error was reported for the subprocess.
|
|
265
|
-
Exit Code: Exit code or \`(none)\` if terminated by signal.
|
|
266
|
-
Signal: Signal number or \`(none)\` if no signal was received.
|
|
267
|
-
Background PIDs: List of background processes started or \`(none)\`.
|
|
268
|
-
Process Group PGID: Process group started or \`(none)\``;
|
|
369
|
+
const returnedInfo = `\n\n The following information is returned:\n\n Command: Executed command.\n Directory: Directory (relative to project root) where command was executed, or \`(root)\`.\n Stdout: Output on stdout stream. Can be \`(empty)\` or partial on error and for any unwaited background processes.\n Stderr: Output on stderr stream. Can be \`(empty)\` or partial on error and for any unwaited background processes.\n Error: Error or \`(none)\` if no error was reported for the subprocess.\n Exit Code: Exit code or \`(none)\` if terminated by signal.\n Signal: Signal number or \`(none)\` if no signal was received.\n Background PIDs: List of background processes started or \`(none)\`.\n Process Group PGID: Process group started or \`(none)\``;
|
|
269
370
|
if (os.platform() === 'win32') {
|
|
270
371
|
return `This tool executes a given shell command as \`cmd.exe /c <command>\`. Command can start background processes using \`start /b\`.${returnedInfo}`;
|
|
271
372
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/tools/shell.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/tools/shell.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,7 @@ export declare class ToolRegistry {
|
|
|
28
28
|
private config;
|
|
29
29
|
private mcpClientManager;
|
|
30
30
|
private logger;
|
|
31
|
+
private discoveryLock;
|
|
31
32
|
constructor(config: Config, eventEmitter?: EventEmitter);
|
|
32
33
|
/**
|
|
33
34
|
* Registers a tool definition.
|
|
@@ -105,5 +106,7 @@ export declare class ToolRegistry {
|
|
|
105
106
|
* @param context Optional context to inject into the tool instance
|
|
106
107
|
*/
|
|
107
108
|
getTool(name: string, context?: ToolContext): AnyDeclarativeTool | undefined;
|
|
109
|
+
private registerToolIntoMap;
|
|
110
|
+
private withDiscoveryLock;
|
|
108
111
|
}
|
|
109
112
|
export {};
|
|
@@ -127,6 +127,7 @@ export class ToolRegistry {
|
|
|
127
127
|
config;
|
|
128
128
|
mcpClientManager;
|
|
129
129
|
logger = new DebugLogger('llxprt:tool-registry');
|
|
130
|
+
discoveryLock = null;
|
|
130
131
|
constructor(config, eventEmitter) {
|
|
131
132
|
this.config = config;
|
|
132
133
|
this.mcpClientManager = new McpClientManager(this.config.getMcpServers() ?? {}, this.config.getMcpServerCommand(), this, this.config.getPromptRegistry(), this.config.getDebugMode(), this.config.getWorkspaceContext(), eventEmitter);
|
|
@@ -136,16 +137,7 @@ export class ToolRegistry {
|
|
|
136
137
|
* @param tool - The tool object containing schema and execution logic.
|
|
137
138
|
*/
|
|
138
139
|
registerTool(tool) {
|
|
139
|
-
|
|
140
|
-
if (tool instanceof DiscoveredMCPTool) {
|
|
141
|
-
tool = tool.asFullyQualifiedTool();
|
|
142
|
-
}
|
|
143
|
-
else {
|
|
144
|
-
// Decide on behavior: throw error, log warning, or allow overwrite
|
|
145
|
-
this.logger.warn(() => `Tool with name "${tool.name}" is already registered. Overwriting.`);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
this.tools.set(tool.name, tool);
|
|
140
|
+
this.registerToolIntoMap(tool, this.tools);
|
|
149
141
|
}
|
|
150
142
|
/**
|
|
151
143
|
* Builds a new tool map with only non-discovered tools (core tools).
|
|
@@ -178,35 +170,20 @@ export class ToolRegistry {
|
|
|
178
170
|
* Uses truly atomic updates to prevent race conditions.
|
|
179
171
|
*/
|
|
180
172
|
async discoverAllTools() {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
registerTool: (tool) => {
|
|
187
|
-
newTools.set(tool.name, tool);
|
|
188
|
-
},
|
|
189
|
-
};
|
|
190
|
-
// Discover command tools into newTools
|
|
191
|
-
// For now, we'll use the existing method but need to modify it to accept a registry
|
|
192
|
-
const discoveryCmd = this.config.getToolDiscoveryCommand();
|
|
193
|
-
if (discoveryCmd) {
|
|
194
|
-
const oldRegisterTool = this.registerTool.bind(this);
|
|
195
|
-
this.registerTool = tempRegistry.registerTool;
|
|
173
|
+
await this.withDiscoveryLock(async () => {
|
|
174
|
+
const newTools = this.buildCoreToolsMap();
|
|
175
|
+
await this.config.getPromptRegistry().clear();
|
|
176
|
+
await this.discoverAndRegisterToolsFromCommand(newTools);
|
|
177
|
+
const previousTools = this.tools;
|
|
196
178
|
try {
|
|
197
|
-
|
|
179
|
+
this.tools = newTools;
|
|
180
|
+
await this.mcpClientManager.discoverAllMcpTools(this.config);
|
|
198
181
|
}
|
|
199
|
-
|
|
200
|
-
this.
|
|
182
|
+
catch (error) {
|
|
183
|
+
this.tools = previousTools;
|
|
184
|
+
throw error;
|
|
201
185
|
}
|
|
202
|
-
}
|
|
203
|
-
// Temporarily swap tools to newTools so MCP tools get registered to the right map
|
|
204
|
-
this.tools = newTools;
|
|
205
|
-
// Discover MCP tools into newTools
|
|
206
|
-
await this.mcpClientManager.discoverAllMcpTools(this.config);
|
|
207
|
-
// The tools are now already in the right place (this.tools === newTools)
|
|
208
|
-
// No need to swap again
|
|
209
|
-
// At this point, the update is truly atomic from the perspective of getFunctionDeclarations()
|
|
186
|
+
});
|
|
210
187
|
}
|
|
211
188
|
/**
|
|
212
189
|
* Discovers tools from project (if available and configured).
|
|
@@ -215,37 +192,31 @@ export class ToolRegistry {
|
|
|
215
192
|
* Uses truly atomic updates to prevent race conditions.
|
|
216
193
|
*/
|
|
217
194
|
async discoverMcpTools() {
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
195
|
+
await this.withDiscoveryLock(async () => {
|
|
196
|
+
const newTools = this.buildCoreToolsMap();
|
|
197
|
+
for (const tool of this.tools.values()) {
|
|
198
|
+
if (tool instanceof DiscoveredTool &&
|
|
199
|
+
!(tool instanceof DiscoveredMCPTool)) {
|
|
200
|
+
this.registerToolIntoMap(tool, newTools);
|
|
201
|
+
}
|
|
225
202
|
}
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
await this.mcpClientManager.discoverAllMcpTools(this.config);
|
|
238
|
-
this.registerTool = oldRegisterTool;
|
|
239
|
-
// Only NOW do we atomically swap the reference
|
|
240
|
-
// This ensures getFunctionDeclarations() never sees a partial tool map
|
|
241
|
-
this.tools = newTools;
|
|
242
|
-
// At this point, the update is truly atomic from the perspective of getFunctionDeclarations()
|
|
203
|
+
await this.config.getPromptRegistry().clear();
|
|
204
|
+
const previousTools = this.tools;
|
|
205
|
+
try {
|
|
206
|
+
this.tools = newTools;
|
|
207
|
+
await this.mcpClientManager.discoverAllMcpTools(this.config);
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
this.tools = previousTools;
|
|
211
|
+
throw error;
|
|
212
|
+
}
|
|
213
|
+
});
|
|
243
214
|
}
|
|
244
215
|
/**
|
|
245
216
|
* Restarts all MCP servers and re-discovers tools.
|
|
246
217
|
*/
|
|
247
218
|
async restartMcpServers() {
|
|
248
|
-
await this.
|
|
219
|
+
await this.discoverMcpTools();
|
|
249
220
|
}
|
|
250
221
|
/**
|
|
251
222
|
* Discover or re-discover tools for a single MCP server.
|
|
@@ -253,30 +224,34 @@ export class ToolRegistry {
|
|
|
253
224
|
* @param serverName - The name of the server to discover tools from.
|
|
254
225
|
*/
|
|
255
226
|
async discoverToolsForServer(serverName) {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
227
|
+
await this.withDiscoveryLock(async () => {
|
|
228
|
+
const newTools = new Map();
|
|
229
|
+
for (const tool of this.tools.values()) {
|
|
230
|
+
if (!(tool instanceof DiscoveredMCPTool && tool.serverName === serverName)) {
|
|
231
|
+
this.registerToolIntoMap(tool, newTools);
|
|
232
|
+
}
|
|
261
233
|
}
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
234
|
+
await this.config.getPromptRegistry().removePromptsByServer(serverName);
|
|
235
|
+
const mcpServers = this.config.getMcpServers() ?? {};
|
|
236
|
+
const serverConfig = mcpServers[serverName];
|
|
237
|
+
const previousTools = this.tools;
|
|
238
|
+
try {
|
|
239
|
+
this.tools = newTools;
|
|
240
|
+
if (serverConfig) {
|
|
241
|
+
const tempRegistry = Object.create(this);
|
|
242
|
+
tempRegistry.registerTool = (tool) => {
|
|
243
|
+
this.registerToolIntoMap(tool, newTools);
|
|
244
|
+
};
|
|
245
|
+
await connectAndDiscover(serverName, serverConfig, tempRegistry, this.config.getPromptRegistry(), this.config.getDebugMode(), this.config.getWorkspaceContext(), this.config);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
this.tools = previousTools;
|
|
250
|
+
throw error;
|
|
251
|
+
}
|
|
252
|
+
});
|
|
278
253
|
}
|
|
279
|
-
async discoverAndRegisterToolsFromCommand() {
|
|
254
|
+
async discoverAndRegisterToolsFromCommand(targetMap) {
|
|
280
255
|
const discoveryCmd = this.config.getToolDiscoveryCommand();
|
|
281
256
|
if (!discoveryCmd) {
|
|
282
257
|
return;
|
|
@@ -364,7 +339,7 @@ export class ToolRegistry {
|
|
|
364
339
|
!Array.isArray(func.parametersJsonSchema)
|
|
365
340
|
? func.parametersJsonSchema
|
|
366
341
|
: {};
|
|
367
|
-
this.
|
|
342
|
+
this.registerToolIntoMap(new DiscoveredTool(this.config, func.name, func.description ?? '', parameters), targetMap);
|
|
368
343
|
}
|
|
369
344
|
}
|
|
370
345
|
catch (e) {
|
|
@@ -469,5 +444,33 @@ export class ToolRegistry {
|
|
|
469
444
|
}
|
|
470
445
|
return tool;
|
|
471
446
|
}
|
|
447
|
+
registerToolIntoMap(tool, targetMap) {
|
|
448
|
+
let toolToRegister = tool;
|
|
449
|
+
if (targetMap.has(toolToRegister.name)) {
|
|
450
|
+
if (toolToRegister instanceof DiscoveredMCPTool) {
|
|
451
|
+
toolToRegister = toolToRegister.asFullyQualifiedTool();
|
|
452
|
+
}
|
|
453
|
+
else {
|
|
454
|
+
this.logger.warn(() => `Tool with name "${toolToRegister.name}" is already registered. Overwriting.`);
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
targetMap.set(toolToRegister.name, toolToRegister);
|
|
458
|
+
}
|
|
459
|
+
async withDiscoveryLock(task) {
|
|
460
|
+
while (this.discoveryLock) {
|
|
461
|
+
await this.discoveryLock;
|
|
462
|
+
}
|
|
463
|
+
let release = () => { };
|
|
464
|
+
this.discoveryLock = new Promise((resolve) => {
|
|
465
|
+
release = () => resolve();
|
|
466
|
+
});
|
|
467
|
+
try {
|
|
468
|
+
return await task();
|
|
469
|
+
}
|
|
470
|
+
finally {
|
|
471
|
+
release();
|
|
472
|
+
this.discoveryLock = null;
|
|
473
|
+
}
|
|
474
|
+
}
|
|
472
475
|
}
|
|
473
476
|
//# sourceMappingURL=tool-registry.js.map
|