erosolar-cli 1.7.414 → 1.7.415
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/agents/erosolar-code.rules.json +1 -1
- package/agents/general.rules.json +1 -1
- package/dist/core/bashCommandGuidance.d.ts +16 -0
- package/dist/core/bashCommandGuidance.d.ts.map +1 -0
- package/dist/core/bashCommandGuidance.js +40 -0
- package/dist/core/bashCommandGuidance.js.map +1 -0
- package/dist/core/toolPreconditions.d.ts +42 -0
- package/dist/core/toolPreconditions.d.ts.map +1 -0
- package/dist/core/toolPreconditions.js +347 -0
- package/dist/core/toolPreconditions.js.map +1 -0
- package/dist/core/toolRuntime.d.ts +158 -0
- package/dist/core/toolRuntime.d.ts.map +1 -0
- package/dist/core/toolRuntime.js +415 -0
- package/dist/core/toolRuntime.js.map +1 -0
- package/dist/core/toolValidation.d.ts +116 -0
- package/dist/core/toolValidation.d.ts.map +1 -0
- package/dist/core/toolValidation.js +282 -0
- package/dist/core/toolValidation.js.map +1 -0
- package/dist/shell/systemPrompt.d.ts +3 -0
- package/dist/shell/systemPrompt.d.ts.map +1 -0
- package/dist/shell/systemPrompt.js +81 -0
- package/dist/shell/systemPrompt.js.map +1 -0
- package/dist/tools/bashTools.d.ts +8 -0
- package/dist/tools/bashTools.d.ts.map +1 -0
- package/dist/tools/bashTools.js +240 -0
- package/dist/tools/bashTools.js.map +1 -0
- package/dist/ui/toolDisplay.d.ts +195 -0
- package/dist/ui/toolDisplay.d.ts.map +1 -0
- package/dist/ui/toolDisplay.js +1526 -0
- package/dist/ui/toolDisplay.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolRuntime.d.ts","sourceRoot":"","sources":["../../src/core/toolRuntime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
import { ToolArgumentValidationError, validateToolArguments, } from './schemaValidator.js';
|
|
2
|
+
import { globalPerformanceMonitor } from './performanceMonitor.js';
|
|
3
|
+
import { validateToolPreconditions, validateAIFlowPatterns } from './toolPreconditions.js';
|
|
4
|
+
// Idempotent tools that can be safely cached
|
|
5
|
+
const CACHEABLE_TOOLS = new Set([
|
|
6
|
+
'Read',
|
|
7
|
+
'read_file',
|
|
8
|
+
'Glob',
|
|
9
|
+
'glob_search',
|
|
10
|
+
'Grep',
|
|
11
|
+
'grep_search',
|
|
12
|
+
'find_definition',
|
|
13
|
+
'analyze_code_quality',
|
|
14
|
+
'extract_exports',
|
|
15
|
+
]);
|
|
16
|
+
function buildOptimizationHint(warning) {
|
|
17
|
+
const code = warning.code;
|
|
18
|
+
const suggestion = warning.suggestion || warning.message;
|
|
19
|
+
switch (code) {
|
|
20
|
+
case 'SEARCH_NO_LIMIT':
|
|
21
|
+
case 'SEARCH_BROAD_PATTERN':
|
|
22
|
+
case 'SEARCH_OVERLY_BROAD':
|
|
23
|
+
return (`\n\n<optimization-hint>\n` +
|
|
24
|
+
`⚡ SEARCH SCOPE OPTIMIZATION: ${suggestion}\n` +
|
|
25
|
+
`Prefer targeted globs (e.g., "src/**/*.ts") and include head_limit to avoid context blowups.\n` +
|
|
26
|
+
`</optimization-hint>`);
|
|
27
|
+
case 'EDIT_WITHOUT_READ':
|
|
28
|
+
case 'EDIT_PLACEHOLDER':
|
|
29
|
+
case 'EDIT_NO_CONTEXT':
|
|
30
|
+
return (`\n\n<optimization-hint>\n` +
|
|
31
|
+
`⚡ EDIT RELIABILITY: Read the file immediately before editing to copy the exact whitespace and context. ${suggestion}\n` +
|
|
32
|
+
`</optimization-hint>`);
|
|
33
|
+
case 'DEFERRED_VALIDATION_REMINDER':
|
|
34
|
+
case 'EXCESSIVE_VALIDATION':
|
|
35
|
+
return (`\n\n<optimization-hint>\n` +
|
|
36
|
+
`⚡ VALIDATION STRATEGY: Batch your edits, then run a single validation pass at the end to save cycles. ${suggestion}\n` +
|
|
37
|
+
`</optimization-hint>`);
|
|
38
|
+
case 'GIT_EFFICIENCY_OPTIMIZATION':
|
|
39
|
+
return (`\n\n<optimization-hint>\n` +
|
|
40
|
+
`⚡ GIT EFFICIENCY: Combine git commands when possible (e.g., "git add -A && git commit -m \\"msg\\" && git push").\n` +
|
|
41
|
+
`</optimization-hint>`);
|
|
42
|
+
case 'NPM_INCOMPLETE_WORKFLOW':
|
|
43
|
+
case 'NPM_INCOMPLETE_PUBLISH':
|
|
44
|
+
return (`\n\n<optimization-hint>\n` +
|
|
45
|
+
`⚡ PUBLISH WORKFLOW: Confirm release steps cover auth, version bump, build/tests, publish, and git push per this repo; prefer npm_publish or documented scripts over rigid chains.\n` +
|
|
46
|
+
`</optimization-hint>`);
|
|
47
|
+
default:
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Type-safe utility functions for tool runtime operations
|
|
53
|
+
*/
|
|
54
|
+
export var ToolRuntimeUtils;
|
|
55
|
+
(function (ToolRuntimeUtils) {
|
|
56
|
+
/**
|
|
57
|
+
* Creates a type-safe tool definition with inferred parameter types
|
|
58
|
+
*/
|
|
59
|
+
function createToolDefinition(definition) {
|
|
60
|
+
return definition;
|
|
61
|
+
}
|
|
62
|
+
ToolRuntimeUtils.createToolDefinition = createToolDefinition;
|
|
63
|
+
/**
|
|
64
|
+
* Creates a type-safe tool suite with inferred tool types
|
|
65
|
+
*/
|
|
66
|
+
function createToolSuite(suite) {
|
|
67
|
+
return suite;
|
|
68
|
+
}
|
|
69
|
+
ToolRuntimeUtils.createToolSuite = createToolSuite;
|
|
70
|
+
/**
|
|
71
|
+
* Type guard to check if a tool definition matches expected parameter schema
|
|
72
|
+
*/
|
|
73
|
+
function isToolDefinition(__tool, expectedSchema) {
|
|
74
|
+
if (!expectedSchema)
|
|
75
|
+
return true;
|
|
76
|
+
// In a real implementation, this would validate against the schema
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
ToolRuntimeUtils.isToolDefinition = isToolDefinition;
|
|
80
|
+
})(ToolRuntimeUtils || (ToolRuntimeUtils = {}));
|
|
81
|
+
export class ToolRuntime {
|
|
82
|
+
registry = new Map();
|
|
83
|
+
registrationOrder = [];
|
|
84
|
+
observer;
|
|
85
|
+
contextManager;
|
|
86
|
+
cache = new Map();
|
|
87
|
+
enableCache;
|
|
88
|
+
cacheTTLMs;
|
|
89
|
+
toolHistory = [];
|
|
90
|
+
maxHistorySize = 50; // Keep last 50 tool calls for AI flow pattern detection
|
|
91
|
+
constructor(baseTools = [], options = {}) {
|
|
92
|
+
this.observer = options.observer ?? null;
|
|
93
|
+
this.contextManager = options.contextManager ?? null;
|
|
94
|
+
this.enableCache = options.enableCache ?? true;
|
|
95
|
+
this.cacheTTLMs = options.cacheTTLMs ?? 5 * 60 * 1000; // 5 minutes default
|
|
96
|
+
if (baseTools.length) {
|
|
97
|
+
this.registerSuite({
|
|
98
|
+
id: 'runtime.core',
|
|
99
|
+
description: 'Core runtime metadata tools',
|
|
100
|
+
tools: baseTools,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
registerSuite(suite) {
|
|
105
|
+
if (!suite?.id?.trim()) {
|
|
106
|
+
throw new Error('Tool suite id cannot be blank.');
|
|
107
|
+
}
|
|
108
|
+
this.unregisterSuite(suite.id);
|
|
109
|
+
for (const definition of suite.tools ?? []) {
|
|
110
|
+
this.addTool(definition, suite.id);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
unregisterSuite(id) {
|
|
114
|
+
if (!id?.trim()) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
for (const [name, record] of this.registry.entries()) {
|
|
118
|
+
if (record.suiteId === id) {
|
|
119
|
+
this.registry.delete(name);
|
|
120
|
+
this.removeFromOrder(name);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
listProviderTools() {
|
|
125
|
+
return this.registrationOrder
|
|
126
|
+
.map((name) => this.registry.get(name))
|
|
127
|
+
.filter((record) => Boolean(record))
|
|
128
|
+
.map(({ definition }) => ({
|
|
129
|
+
name: definition.name,
|
|
130
|
+
description: definition.description,
|
|
131
|
+
...(definition.parameters && { parameters: definition.parameters }),
|
|
132
|
+
}));
|
|
133
|
+
}
|
|
134
|
+
async execute(call, context) {
|
|
135
|
+
const record = this.registry.get(call.name);
|
|
136
|
+
// Parse args early to create augmented call for observer
|
|
137
|
+
const args = normalizeToolArguments(call.arguments);
|
|
138
|
+
const augmentedCall = { ...call, args };
|
|
139
|
+
if (!record) {
|
|
140
|
+
const message = `Tool "${call.name}" is not available.`;
|
|
141
|
+
this.observer?.onToolError?.(augmentedCall, message);
|
|
142
|
+
globalPerformanceMonitor.recordToolError(call, message, context ?? undefined);
|
|
143
|
+
return message;
|
|
144
|
+
}
|
|
145
|
+
// Check if tool is cacheable
|
|
146
|
+
const isCacheable = record.definition.cacheable ?? CACHEABLE_TOOLS.has(call.name);
|
|
147
|
+
// Try to get from cache
|
|
148
|
+
if (this.enableCache && isCacheable) {
|
|
149
|
+
const cacheKey = this.getCacheKey(call);
|
|
150
|
+
const cached = this.cache.get(cacheKey);
|
|
151
|
+
if (cached && Date.now() - cached.timestamp < this.cacheTTLMs) {
|
|
152
|
+
this.observer?.onCacheHit?.(augmentedCall);
|
|
153
|
+
this.observer?.onToolResult?.(augmentedCall, cached.result);
|
|
154
|
+
// Record cache hit as successful execution with 0ms time
|
|
155
|
+
globalPerformanceMonitor.startToolCall(call, context)();
|
|
156
|
+
return cached.result;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
this.observer?.onToolStart?.(augmentedCall);
|
|
160
|
+
// Start performance monitoring
|
|
161
|
+
const finishToolCall = globalPerformanceMonitor.startToolCall(call, context);
|
|
162
|
+
try {
|
|
163
|
+
validateToolArguments(record.definition.name, record.definition.parameters, args);
|
|
164
|
+
// Pre-flight AI flow validation - catch common tool usage failures
|
|
165
|
+
const preflightWarnings = validateToolPreconditions(call.name, args);
|
|
166
|
+
for (const warning of preflightWarnings) {
|
|
167
|
+
this.observer?.onToolWarning?.(augmentedCall, warning);
|
|
168
|
+
}
|
|
169
|
+
// Advanced AI flow pattern validation using tool history
|
|
170
|
+
const aiFlowWarnings = validateAIFlowPatterns(call.name, args, this.toolHistory);
|
|
171
|
+
for (const warning of aiFlowWarnings) {
|
|
172
|
+
this.observer?.onToolWarning?.(augmentedCall, warning);
|
|
173
|
+
}
|
|
174
|
+
// Collect optimization hints to inject into result
|
|
175
|
+
const optimizationHints = [];
|
|
176
|
+
const seenOptimizationCodes = new Set();
|
|
177
|
+
for (const warning of [...preflightWarnings, ...aiFlowWarnings]) {
|
|
178
|
+
if (warning.code && seenOptimizationCodes.has(warning.code)) {
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
const hint = buildOptimizationHint(warning);
|
|
182
|
+
if (hint) {
|
|
183
|
+
if (warning.code) {
|
|
184
|
+
seenOptimizationCodes.add(warning.code);
|
|
185
|
+
}
|
|
186
|
+
optimizationHints.push(hint);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// Track this tool call in history for AI flow pattern detection
|
|
190
|
+
this.toolHistory.push({
|
|
191
|
+
toolName: call.name,
|
|
192
|
+
args,
|
|
193
|
+
timestamp: Date.now(),
|
|
194
|
+
});
|
|
195
|
+
// Keep history bounded to prevent memory growth
|
|
196
|
+
if (this.toolHistory.length > this.maxHistorySize) {
|
|
197
|
+
this.toolHistory.shift();
|
|
198
|
+
}
|
|
199
|
+
const result = await record.definition.handler(args);
|
|
200
|
+
let output = typeof result === 'string' ? result : JSON.stringify(result, null, 2);
|
|
201
|
+
// Truncate output if context manager is available
|
|
202
|
+
if (this.contextManager) {
|
|
203
|
+
const truncated = this.contextManager.truncateToolOutput(output, call.name);
|
|
204
|
+
if (truncated.wasTruncated) {
|
|
205
|
+
output = truncated.content;
|
|
206
|
+
// Log truncation for debugging
|
|
207
|
+
if (process.env['DEBUG_CONTEXT']) {
|
|
208
|
+
console.warn(`[Context Manager] Truncated ${call.name} output: ${truncated.originalLength} -> ${truncated.truncatedLength} chars`);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
// Cache the result if cacheable
|
|
213
|
+
if (this.enableCache && isCacheable) {
|
|
214
|
+
const cacheKey = this.getCacheKey(call);
|
|
215
|
+
this.cache.set(cacheKey, {
|
|
216
|
+
result: output,
|
|
217
|
+
timestamp: Date.now(),
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
// Append optimization hints to guide future LLM behavior
|
|
221
|
+
if (optimizationHints.length > 0) {
|
|
222
|
+
output = output + optimizationHints.join('');
|
|
223
|
+
}
|
|
224
|
+
this.observer?.onToolResult?.(augmentedCall, output);
|
|
225
|
+
// Record successful execution
|
|
226
|
+
finishToolCall();
|
|
227
|
+
return output;
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
let formatted;
|
|
231
|
+
if (error instanceof ToolArgumentValidationError) {
|
|
232
|
+
formatted = error.message;
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
236
|
+
formatted = `Failed to run "${call.name}": ${message}`;
|
|
237
|
+
}
|
|
238
|
+
this.observer?.onToolError?.(augmentedCall, formatted);
|
|
239
|
+
// Record failed execution
|
|
240
|
+
globalPerformanceMonitor.recordToolError(call, formatted, context ?? undefined);
|
|
241
|
+
return formatted;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
getCacheKey(call) {
|
|
245
|
+
return `${call.name}:${JSON.stringify(call.arguments)}`;
|
|
246
|
+
}
|
|
247
|
+
clearCache() {
|
|
248
|
+
this.cache.clear();
|
|
249
|
+
}
|
|
250
|
+
getCacheStats() {
|
|
251
|
+
let totalSize = 0;
|
|
252
|
+
for (const entry of this.cache.values()) {
|
|
253
|
+
totalSize += entry.result.length;
|
|
254
|
+
}
|
|
255
|
+
return {
|
|
256
|
+
size: totalSize,
|
|
257
|
+
entries: this.cache.size,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
clearToolHistory() {
|
|
261
|
+
this.toolHistory.length = 0;
|
|
262
|
+
}
|
|
263
|
+
getToolHistory() {
|
|
264
|
+
return this.toolHistory;
|
|
265
|
+
}
|
|
266
|
+
addTool(definition, suiteId) {
|
|
267
|
+
if (!definition?.name?.trim()) {
|
|
268
|
+
throw new Error(`Tool names cannot be blank (suite "${suiteId}").`);
|
|
269
|
+
}
|
|
270
|
+
if (this.registry.has(definition.name)) {
|
|
271
|
+
const owner = this.registry.get(definition.name)?.suiteId ?? 'unknown';
|
|
272
|
+
throw new Error(`Tool "${definition.name}" already registered by suite "${owner}".`);
|
|
273
|
+
}
|
|
274
|
+
this.registry.set(definition.name, {
|
|
275
|
+
suiteId,
|
|
276
|
+
definition,
|
|
277
|
+
});
|
|
278
|
+
this.registrationOrder.push(definition.name);
|
|
279
|
+
}
|
|
280
|
+
removeFromOrder(name) {
|
|
281
|
+
const index = this.registrationOrder.indexOf(name);
|
|
282
|
+
if (index >= 0) {
|
|
283
|
+
this.registrationOrder.splice(index, 1);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
export function createDefaultToolRuntime(context, toolSuites = [], options = {}) {
|
|
288
|
+
const runtime = new ToolRuntime([
|
|
289
|
+
buildContextSnapshotTool(context.workspaceContext),
|
|
290
|
+
buildCapabilitiesTool(context),
|
|
291
|
+
buildProfileInspectorTool(context),
|
|
292
|
+
], options);
|
|
293
|
+
for (const suite of toolSuites) {
|
|
294
|
+
runtime.registerSuite(suite);
|
|
295
|
+
}
|
|
296
|
+
return runtime;
|
|
297
|
+
}
|
|
298
|
+
function buildContextSnapshotTool(workspaceContext) {
|
|
299
|
+
return {
|
|
300
|
+
name: 'context_snapshot',
|
|
301
|
+
description: 'Returns a summary of the repository context. NOTE: Full context is already in your system prompt - only use this if you need to refresh or verify the context.',
|
|
302
|
+
parameters: {
|
|
303
|
+
type: 'object',
|
|
304
|
+
properties: {
|
|
305
|
+
format: {
|
|
306
|
+
type: 'string',
|
|
307
|
+
description: 'Use "plain" for raw text or "markdown" for a fenced block.',
|
|
308
|
+
enum: ['plain', 'markdown'],
|
|
309
|
+
},
|
|
310
|
+
},
|
|
311
|
+
},
|
|
312
|
+
handler: (args) => {
|
|
313
|
+
if (!workspaceContext?.trim()) {
|
|
314
|
+
return 'Workspace context is unavailable.';
|
|
315
|
+
}
|
|
316
|
+
// CRITICAL: Return only summary to prevent context duplication
|
|
317
|
+
// Full context is already in system prompt
|
|
318
|
+
const lines = workspaceContext.trim().split('\n');
|
|
319
|
+
const totalLines = lines.length;
|
|
320
|
+
// Return just first 20 lines + summary
|
|
321
|
+
const preview = lines.slice(0, 20).join('\n');
|
|
322
|
+
const summary = [
|
|
323
|
+
preview,
|
|
324
|
+
'',
|
|
325
|
+
`[Workspace context: ${totalLines} total lines]`,
|
|
326
|
+
`[Full context already available in system prompt - use Read/Glob tools for specific files]`
|
|
327
|
+
].join('\n');
|
|
328
|
+
const format = args['format'] === 'markdown' ? 'markdown' : 'plain';
|
|
329
|
+
if (format === 'markdown') {
|
|
330
|
+
return ['```text', summary, '```'].join('\n');
|
|
331
|
+
}
|
|
332
|
+
return summary;
|
|
333
|
+
},
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
function buildCapabilitiesTool(context) {
|
|
337
|
+
return {
|
|
338
|
+
name: 'capabilities_overview',
|
|
339
|
+
description: 'Summarizes the agent runtime capabilities including available tools and features.',
|
|
340
|
+
parameters: {
|
|
341
|
+
type: 'object',
|
|
342
|
+
properties: {
|
|
343
|
+
audience: {
|
|
344
|
+
type: 'string',
|
|
345
|
+
enum: ['developer', 'model'],
|
|
346
|
+
description: 'Tailors the tone of the description.',
|
|
347
|
+
},
|
|
348
|
+
},
|
|
349
|
+
},
|
|
350
|
+
handler: (args) => {
|
|
351
|
+
const audience = args['audience'];
|
|
352
|
+
const adjective = audience === 'developer' ? 'Operator facing' : 'Model facing';
|
|
353
|
+
return [
|
|
354
|
+
`${adjective} capabilities summary:`,
|
|
355
|
+
'- Full file system access (read, write, list, search).',
|
|
356
|
+
'- Bash command execution for running scripts and tools.',
|
|
357
|
+
'- Advanced code search and pattern matching.',
|
|
358
|
+
'- Deterministic workspace context snapshot appended to the system prompt.',
|
|
359
|
+
'- Tool invocations are logged in realtime for transparency.',
|
|
360
|
+
`- Active provider: ${context.provider} (${context.model}).`,
|
|
361
|
+
].join('\n');
|
|
362
|
+
},
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
function buildProfileInspectorTool(context) {
|
|
366
|
+
return {
|
|
367
|
+
name: 'profile_details',
|
|
368
|
+
description: 'Returns the configuration of the active CLI profile.',
|
|
369
|
+
parameters: {
|
|
370
|
+
type: 'object',
|
|
371
|
+
properties: {
|
|
372
|
+
includeWorkspaceContext: {
|
|
373
|
+
type: 'boolean',
|
|
374
|
+
description: 'Set true to append the workspace context snapshot if available.',
|
|
375
|
+
},
|
|
376
|
+
},
|
|
377
|
+
additionalProperties: false,
|
|
378
|
+
},
|
|
379
|
+
handler: (args) => {
|
|
380
|
+
const payload = {
|
|
381
|
+
profile: context.profileName,
|
|
382
|
+
provider: context.provider,
|
|
383
|
+
model: context.model,
|
|
384
|
+
workspaceContext: args['includeWorkspaceContext'] ? context.workspaceContext ?? null : null,
|
|
385
|
+
};
|
|
386
|
+
return JSON.stringify(payload, null, 2);
|
|
387
|
+
},
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
function normalizeToolArguments(value) {
|
|
391
|
+
if (value instanceof Map) {
|
|
392
|
+
return Object.fromEntries(value.entries());
|
|
393
|
+
}
|
|
394
|
+
if (isRecord(value)) {
|
|
395
|
+
return value;
|
|
396
|
+
}
|
|
397
|
+
if (typeof value === 'string') {
|
|
398
|
+
const trimmed = value.trim();
|
|
399
|
+
if (!trimmed) {
|
|
400
|
+
return {};
|
|
401
|
+
}
|
|
402
|
+
try {
|
|
403
|
+
const parsed = JSON.parse(trimmed);
|
|
404
|
+
return isRecord(parsed) ? parsed : {};
|
|
405
|
+
}
|
|
406
|
+
catch {
|
|
407
|
+
return {};
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
return {};
|
|
411
|
+
}
|
|
412
|
+
function isRecord(value) {
|
|
413
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
414
|
+
}
|
|
415
|
+
//# sourceMappingURL=toolRuntime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolRuntime.js","sourceRoot":"","sources":["../../src/core/toolRuntime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comprehensive Tool Validation System
|
|
3
|
+
*
|
|
4
|
+
* Provides proactive validation for AI tool usage with:
|
|
5
|
+
* - Pre-flight validation before tool execution
|
|
6
|
+
* - Real-time AI flow guidance
|
|
7
|
+
* - Pattern-based anti-pattern detection
|
|
8
|
+
* - Recovery suggestions for common failures
|
|
9
|
+
*/
|
|
10
|
+
import type { ToolDefinition } from './toolRuntime.js';
|
|
11
|
+
/**
|
|
12
|
+
* Tool validation result
|
|
13
|
+
*/
|
|
14
|
+
export interface ToolValidationResult {
|
|
15
|
+
readonly valid: boolean;
|
|
16
|
+
readonly warnings: ToolValidationWarning[];
|
|
17
|
+
readonly suggestions: ToolValidationSuggestion[];
|
|
18
|
+
readonly criticalErrors: ToolValidationError[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Tool validation warning
|
|
22
|
+
*/
|
|
23
|
+
export interface ToolValidationWarning {
|
|
24
|
+
readonly code: string;
|
|
25
|
+
readonly message: string;
|
|
26
|
+
readonly severity: 'low' | 'medium' | 'high';
|
|
27
|
+
readonly suggestion?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Tool validation error
|
|
31
|
+
*/
|
|
32
|
+
export interface ToolValidationError {
|
|
33
|
+
readonly code: string;
|
|
34
|
+
readonly message: string;
|
|
35
|
+
readonly recovery?: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Tool validation suggestion
|
|
39
|
+
*/
|
|
40
|
+
export interface ToolValidationSuggestion {
|
|
41
|
+
readonly code: string;
|
|
42
|
+
readonly message: string;
|
|
43
|
+
readonly action: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* AI flow guidance patterns
|
|
47
|
+
*/
|
|
48
|
+
export interface AIFlowPattern {
|
|
49
|
+
readonly pattern: string;
|
|
50
|
+
readonly description: string;
|
|
51
|
+
readonly guidance: string;
|
|
52
|
+
readonly examples: string[];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Tool usage context
|
|
56
|
+
*/
|
|
57
|
+
export interface ToolUsageContext {
|
|
58
|
+
readonly toolName: string;
|
|
59
|
+
readonly parameters: Record<string, unknown>;
|
|
60
|
+
readonly workspaceContext?: {
|
|
61
|
+
readonly currentFiles: string[];
|
|
62
|
+
readonly recentOperations: string[];
|
|
63
|
+
readonly workspacePath: string;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Comprehensive tool validator
|
|
68
|
+
*/
|
|
69
|
+
export declare class ToolValidator {
|
|
70
|
+
private readonly patterns;
|
|
71
|
+
/**
|
|
72
|
+
* Validate tool usage before execution
|
|
73
|
+
*/
|
|
74
|
+
validateToolUsage(tool: ToolDefinition, context: ToolUsageContext): ToolValidationResult;
|
|
75
|
+
/**
|
|
76
|
+
* Validate tool-specific patterns
|
|
77
|
+
*/
|
|
78
|
+
private validateToolSpecific;
|
|
79
|
+
/**
|
|
80
|
+
* Validate Edit tool usage
|
|
81
|
+
*/
|
|
82
|
+
private validateEditTool;
|
|
83
|
+
/**
|
|
84
|
+
* Validate search tools (Glob, Grep)
|
|
85
|
+
*/
|
|
86
|
+
private validateSearchTools;
|
|
87
|
+
/**
|
|
88
|
+
* Validate bash commands
|
|
89
|
+
*/
|
|
90
|
+
private validateBashCommands;
|
|
91
|
+
/**
|
|
92
|
+
* Validate AI flow patterns
|
|
93
|
+
*/
|
|
94
|
+
private validateAIFlowPatterns;
|
|
95
|
+
/**
|
|
96
|
+
* Validate performance optimizations
|
|
97
|
+
*/
|
|
98
|
+
private validatePerformance;
|
|
99
|
+
private containsPlaceholderPattern;
|
|
100
|
+
private isLongSingleLine;
|
|
101
|
+
private hasIndentationMismatch;
|
|
102
|
+
private detectIndentation;
|
|
103
|
+
private isOverlyBroadPattern;
|
|
104
|
+
private isBroadPattern;
|
|
105
|
+
private mapFlowSeverity;
|
|
106
|
+
/**
|
|
107
|
+
* Get AI flow guidance for a specific pattern
|
|
108
|
+
*/
|
|
109
|
+
getAIFlowGuidance(patternId: string): AIFlowPattern | undefined;
|
|
110
|
+
/**
|
|
111
|
+
* Get all AI flow patterns
|
|
112
|
+
*/
|
|
113
|
+
getAllAIFlowPatterns(): AIFlowPattern[];
|
|
114
|
+
}
|
|
115
|
+
export declare const globalToolValidator: ToolValidator;
|
|
116
|
+
//# sourceMappingURL=toolValidation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolValidation.d.ts","sourceRoot":"","sources":["../../src/core/toolValidation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,EAAE,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,wBAAwB,EAAE,CAAC;IACjD,QAAQ,CAAC,cAAc,EAAE,mBAAmB,EAAE,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC7C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,QAAQ,CAAC,gBAAgB,CAAC,EAAE;QAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;QAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,EAAE,CAAC;QACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;KAChC,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAuDvB;IAEF;;OAEG;IACH,iBAAiB,CACf,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,gBAAgB,GACxB,oBAAoB;IAsBvB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAqB5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuCxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA4B3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA6B5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAsB9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,0BAA0B;IAWlC,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,eAAe;IAWvB;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI/D;;OAEG;IACH,oBAAoB,IAAI,aAAa,EAAE;CAGxC;AAGD,eAAO,MAAM,mBAAmB,eAAsB,CAAC"}
|