centaurus-cli 2.6.2 → 2.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli-adapter.d.ts +13 -22
- package/dist/cli-adapter.d.ts.map +1 -1
- package/dist/cli-adapter.js +383 -240
- package/dist/cli-adapter.js.map +1 -1
- package/dist/config/defaultConfig.d.ts +1 -0
- package/dist/config/defaultConfig.d.ts.map +1 -1
- package/dist/config/defaultConfig.js +3 -1
- package/dist/config/defaultConfig.js.map +1 -1
- package/dist/config/types.d.ts +1 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +1 -0
- package/dist/config/types.js.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/services/ai-service-client.d.ts +1 -1
- package/dist/services/ai-service-client.d.ts.map +1 -1
- package/dist/services/ai-service-client.js +7 -2
- package/dist/services/ai-service-client.js.map +1 -1
- package/dist/services/api-client.d.ts +6 -0
- package/dist/services/api-client.d.ts.map +1 -1
- package/dist/services/api-client.js +16 -0
- package/dist/services/api-client.js.map +1 -1
- package/dist/tools/command.d.ts.map +1 -1
- package/dist/tools/command.js +77 -25
- package/dist/tools/command.js.map +1 -1
- package/dist/tools/file-ops.d.ts.map +1 -1
- package/dist/tools/file-ops.js +28 -4
- package/dist/tools/file-ops.js.map +1 -1
- package/dist/tools/registry.d.ts +1 -0
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +25 -1
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/task-complete.d.ts +3 -0
- package/dist/tools/task-complete.d.ts.map +1 -0
- package/dist/tools/task-complete.js +48 -0
- package/dist/tools/task-complete.js.map +1 -0
- package/dist/tools/types.d.ts +1 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/web-search.d.ts.map +1 -1
- package/dist/tools/web-search.js +16 -2
- package/dist/tools/web-search.js.map +1 -1
- package/dist/ui/components/AgentTimer.d.ts +7 -0
- package/dist/ui/components/AgentTimer.d.ts.map +1 -0
- package/dist/ui/components/AgentTimer.js +27 -0
- package/dist/ui/components/AgentTimer.js.map +1 -0
- package/dist/ui/components/App.d.ts +2 -0
- package/dist/ui/components/App.d.ts.map +1 -1
- package/dist/ui/components/App.js +229 -53
- package/dist/ui/components/App.js.map +1 -1
- package/dist/ui/components/InputBox.d.ts.map +1 -1
- package/dist/ui/components/InputBox.js +579 -130
- package/dist/ui/components/InputBox.js.map +1 -1
- package/dist/ui/components/InteractiveShell.d.ts +16 -0
- package/dist/ui/components/InteractiveShell.d.ts.map +1 -0
- package/dist/ui/components/InteractiveShell.js +152 -0
- package/dist/ui/components/InteractiveShell.js.map +1 -0
- package/dist/ui/components/LoadingIndicator.js +1 -1
- package/dist/ui/components/LoadingIndicator.js.map +1 -1
- package/dist/ui/components/MarkdownRenderer.js +1 -1
- package/dist/ui/components/StreamingMessageDisplay.js +1 -1
- package/dist/ui/components/StreamingMessageDisplay.js.map +1 -1
- package/dist/ui/components/ToolExecutionMessage.d.ts.map +1 -1
- package/dist/ui/components/ToolExecutionMessage.js +43 -47
- package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
- package/dist/utils/ansi-encoder.d.ts +2 -0
- package/dist/utils/ansi-encoder.d.ts.map +1 -0
- package/dist/utils/ansi-encoder.js +57 -0
- package/dist/utils/ansi-encoder.js.map +1 -0
- package/dist/utils/command-history.d.ts +14 -0
- package/dist/utils/command-history.d.ts.map +1 -0
- package/dist/utils/command-history.js +140 -0
- package/dist/utils/command-history.js.map +1 -0
- package/dist/utils/input-classifier.d.ts +26 -0
- package/dist/utils/input-classifier.d.ts.map +1 -0
- package/dist/utils/input-classifier.js +154 -0
- package/dist/utils/input-classifier.js.map +1 -0
- package/dist/utils/markdown-parser.d.ts.map +1 -1
- package/dist/utils/markdown-parser.js +6 -5
- package/dist/utils/markdown-parser.js.map +1 -1
- package/dist/utils/shell.d.ts +7 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +97 -37
- package/dist/utils/shell.js.map +1 -1
- package/models-config.json +30 -0
- package/package.json +2 -1
- package/prompts/system-prompt-autonomous.md +428 -0
- package/dist/tools/ToolRegistry.d.ts +0 -55
- package/dist/tools/ToolRegistry.d.ts.map +0 -1
- package/dist/tools/ToolRegistry.js +0 -600
- package/dist/tools/ToolRegistry.js.map +0 -1
- package/prompts/system-prompt-enhanced.md +0 -659
- package/prompts/system-prompt.md +0 -206
|
@@ -1,600 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tool Registry
|
|
3
|
-
* Manages all available tools and their execution
|
|
4
|
-
*/
|
|
5
|
-
export class ToolRegistry {
|
|
6
|
-
tools = new Map();
|
|
7
|
-
executionHistory = [];
|
|
8
|
-
constructor() {
|
|
9
|
-
this.registerBuiltInTools();
|
|
10
|
-
}
|
|
11
|
-
registerBuiltInTools() {
|
|
12
|
-
// File Operations
|
|
13
|
-
this.register({
|
|
14
|
-
name: 'read_file',
|
|
15
|
-
description: 'Read file contents with optional line ranges',
|
|
16
|
-
category: 'file',
|
|
17
|
-
parameters: {
|
|
18
|
-
type: 'object',
|
|
19
|
-
properties: {
|
|
20
|
-
path: { type: 'string', description: 'File path to read' },
|
|
21
|
-
startLine: { type: 'number', description: 'Start line (optional)' },
|
|
22
|
-
endLine: { type: 'number', description: 'End line (optional)' }
|
|
23
|
-
},
|
|
24
|
-
required: ['path']
|
|
25
|
-
},
|
|
26
|
-
requiresApproval: false,
|
|
27
|
-
execute: async (params, context) => {
|
|
28
|
-
const { readFileTool } = await import('./file-ops.js');
|
|
29
|
-
const execContext = context || { cwd: process.cwd(), requireApproval: async () => true };
|
|
30
|
-
try {
|
|
31
|
-
const result = await readFileTool.execute({
|
|
32
|
-
file_path: params.path,
|
|
33
|
-
start_line: params.startLine,
|
|
34
|
-
end_line: params.endLine
|
|
35
|
-
}, execContext);
|
|
36
|
-
return { success: true, result };
|
|
37
|
-
}
|
|
38
|
-
catch (error) {
|
|
39
|
-
return { success: false, error: error.message };
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
this.register({
|
|
44
|
-
name: 'write_file',
|
|
45
|
-
description: 'Create or overwrite a file',
|
|
46
|
-
category: 'file',
|
|
47
|
-
parameters: {
|
|
48
|
-
type: 'object',
|
|
49
|
-
properties: {
|
|
50
|
-
path: { type: 'string', description: 'File path' },
|
|
51
|
-
content: { type: 'string', description: 'File content' }
|
|
52
|
-
},
|
|
53
|
-
required: ['path', 'content']
|
|
54
|
-
},
|
|
55
|
-
requiresApproval: true,
|
|
56
|
-
execute: async (params, context) => {
|
|
57
|
-
const { writeFileTool } = await import('./file-ops.js');
|
|
58
|
-
const execContext = context || { cwd: process.cwd(), requireApproval: async () => true };
|
|
59
|
-
try {
|
|
60
|
-
const result = await writeFileTool.execute({
|
|
61
|
-
file_path: params.path,
|
|
62
|
-
content: params.content
|
|
63
|
-
}, execContext);
|
|
64
|
-
// Check if operation was cancelled
|
|
65
|
-
if (result && result.includes('cancelled')) {
|
|
66
|
-
return { success: false, error: result };
|
|
67
|
-
}
|
|
68
|
-
return { success: true, result };
|
|
69
|
-
}
|
|
70
|
-
catch (error) {
|
|
71
|
-
return { success: false, error: error.message };
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
this.register({
|
|
76
|
-
name: 'edit_file',
|
|
77
|
-
description: 'Search and replace text in a file',
|
|
78
|
-
category: 'file',
|
|
79
|
-
parameters: {
|
|
80
|
-
type: 'object',
|
|
81
|
-
properties: {
|
|
82
|
-
path: { type: 'string', description: 'File path' },
|
|
83
|
-
search: { type: 'string', description: 'Text to search for' },
|
|
84
|
-
replace: { type: 'string', description: 'Replacement text' },
|
|
85
|
-
replaceAll: { type: 'boolean', description: 'Replace all occurrences' }
|
|
86
|
-
},
|
|
87
|
-
required: ['path', 'search', 'replace']
|
|
88
|
-
},
|
|
89
|
-
requiresApproval: true,
|
|
90
|
-
execute: async (params, context) => {
|
|
91
|
-
const { editFileTool } = await import('./file-ops.js');
|
|
92
|
-
const execContext = context || { cwd: process.cwd(), requireApproval: async () => true };
|
|
93
|
-
try {
|
|
94
|
-
const result = await editFileTool.execute({
|
|
95
|
-
file_path: params.path,
|
|
96
|
-
search_pattern: params.search,
|
|
97
|
-
replacement: params.replace
|
|
98
|
-
}, execContext);
|
|
99
|
-
// Check if operation was cancelled
|
|
100
|
-
if (result && result.includes('cancelled')) {
|
|
101
|
-
return { success: false, error: result };
|
|
102
|
-
}
|
|
103
|
-
return { success: true, result };
|
|
104
|
-
}
|
|
105
|
-
catch (error) {
|
|
106
|
-
return { success: false, error: error.message };
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
this.register({
|
|
111
|
-
name: 'multi_edit',
|
|
112
|
-
description: 'Edit multiple files in one operation',
|
|
113
|
-
category: 'file',
|
|
114
|
-
parameters: {
|
|
115
|
-
type: 'object',
|
|
116
|
-
properties: {
|
|
117
|
-
edits: {
|
|
118
|
-
type: 'array',
|
|
119
|
-
items: {
|
|
120
|
-
type: 'object',
|
|
121
|
-
properties: {
|
|
122
|
-
path: { type: 'string' },
|
|
123
|
-
search: { type: 'string' },
|
|
124
|
-
replace: { type: 'string' }
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
},
|
|
129
|
-
required: ['edits']
|
|
130
|
-
},
|
|
131
|
-
requiresApproval: true,
|
|
132
|
-
execute: async (params, context) => {
|
|
133
|
-
// Multi-edit implementation
|
|
134
|
-
const { editFileTool } = await import('./file-ops.js');
|
|
135
|
-
const execContext = context || { cwd: process.cwd(), requireApproval: async () => true };
|
|
136
|
-
const results = [];
|
|
137
|
-
for (const edit of params.edits) {
|
|
138
|
-
try {
|
|
139
|
-
const result = await editFileTool.execute({
|
|
140
|
-
file_path: edit.path,
|
|
141
|
-
search_pattern: edit.search,
|
|
142
|
-
replacement: edit.replace
|
|
143
|
-
}, execContext);
|
|
144
|
-
results.push({ file: edit.path, success: true, result });
|
|
145
|
-
}
|
|
146
|
-
catch (error) {
|
|
147
|
-
results.push({ file: edit.path, success: false, error: error.message });
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
return { success: results.every(r => r.success), result: results };
|
|
151
|
-
}
|
|
152
|
-
});
|
|
153
|
-
this.register({
|
|
154
|
-
name: 'list_directory',
|
|
155
|
-
description: 'List directory contents',
|
|
156
|
-
category: 'file',
|
|
157
|
-
parameters: {
|
|
158
|
-
type: 'object',
|
|
159
|
-
properties: {
|
|
160
|
-
path: { type: 'string', description: 'Directory path' },
|
|
161
|
-
recursive: { type: 'boolean', description: 'List recursively' },
|
|
162
|
-
pattern: { type: 'string', description: 'Filter pattern' }
|
|
163
|
-
},
|
|
164
|
-
required: ['path']
|
|
165
|
-
},
|
|
166
|
-
requiresApproval: false,
|
|
167
|
-
execute: async (params, context) => {
|
|
168
|
-
const { listDirectoryTool } = await import('./file-ops.js');
|
|
169
|
-
const execContext = context || { cwd: process.cwd(), requireApproval: async () => true };
|
|
170
|
-
try {
|
|
171
|
-
const result = await listDirectoryTool.execute({
|
|
172
|
-
directory_path: params.path,
|
|
173
|
-
recursive: params.recursive
|
|
174
|
-
}, execContext);
|
|
175
|
-
return { success: true, result };
|
|
176
|
-
}
|
|
177
|
-
catch (error) {
|
|
178
|
-
return { success: false, error: error.message };
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
});
|
|
182
|
-
// Search Tools
|
|
183
|
-
this.register({
|
|
184
|
-
name: 'grep_search',
|
|
185
|
-
description: `Search for text patterns across files in the codebase using regex.
|
|
186
|
-
|
|
187
|
-
USE THIS TOOL WHEN:
|
|
188
|
-
- User asks "where is X defined"
|
|
189
|
-
- You need to find all occurrences of a function, class, or variable
|
|
190
|
-
- You need to locate TODO comments or specific code patterns
|
|
191
|
-
- You want to understand how a feature is implemented across files
|
|
192
|
-
|
|
193
|
-
BEFORE using read_file on multiple files, use this to find relevant files first.
|
|
194
|
-
|
|
195
|
-
EXAMPLES:
|
|
196
|
-
- Find class definition: pattern="class User"
|
|
197
|
-
- Find function calls: pattern="connectDatabase\\\\("
|
|
198
|
-
- Find TODO comments: pattern="TODO.*auth"
|
|
199
|
-
- Find imports: pattern="import.*express"`,
|
|
200
|
-
category: 'search',
|
|
201
|
-
parameters: {
|
|
202
|
-
type: 'object',
|
|
203
|
-
properties: {
|
|
204
|
-
pattern: { type: 'string', description: 'Regex pattern to search for. Use \\\\ to escape special characters.' },
|
|
205
|
-
caseSensitive: { type: 'boolean', description: 'Whether search should be case-sensitive. Default: false' },
|
|
206
|
-
filePattern: { type: 'string', description: 'Glob pattern to filter files (e.g., "*.ts", "src/**/*.py"). Optional.' },
|
|
207
|
-
excludePattern: { type: 'string', description: 'Glob pattern to exclude files (e.g., "*.test.ts", "dist/**"). Optional.' }
|
|
208
|
-
},
|
|
209
|
-
required: ['pattern']
|
|
210
|
-
},
|
|
211
|
-
requiresApproval: false,
|
|
212
|
-
execute: async (params, context) => {
|
|
213
|
-
const { grepSearchTool } = await import('./grep-search.js');
|
|
214
|
-
const execContext = context || { cwd: process.cwd(), requireApproval: async () => true };
|
|
215
|
-
try {
|
|
216
|
-
const result = await grepSearchTool.execute(params, execContext);
|
|
217
|
-
return { success: true, result };
|
|
218
|
-
}
|
|
219
|
-
catch (error) {
|
|
220
|
-
return { success: false, error: error.message };
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
});
|
|
224
|
-
this.register({
|
|
225
|
-
name: 'semantic_search',
|
|
226
|
-
description: 'AI-powered semantic code search',
|
|
227
|
-
category: 'search',
|
|
228
|
-
parameters: {
|
|
229
|
-
type: 'object',
|
|
230
|
-
properties: {
|
|
231
|
-
query: { type: 'string', description: 'Natural language search query' },
|
|
232
|
-
path: { type: 'string', description: 'Directory to search in' },
|
|
233
|
-
limit: { type: 'number', description: 'Max results to return' }
|
|
234
|
-
},
|
|
235
|
-
required: ['query']
|
|
236
|
-
},
|
|
237
|
-
requiresApproval: false,
|
|
238
|
-
execute: async (params, context) => {
|
|
239
|
-
// Semantic search implementation stub
|
|
240
|
-
return {
|
|
241
|
-
success: false,
|
|
242
|
-
error: 'Semantic search not yet implemented'
|
|
243
|
-
};
|
|
244
|
-
}
|
|
245
|
-
});
|
|
246
|
-
this.register({
|
|
247
|
-
name: 'find_files',
|
|
248
|
-
description: `Find files by name using glob patterns without knowing exact paths.
|
|
249
|
-
|
|
250
|
-
USE THIS TOOL WHEN:
|
|
251
|
-
- User mentions a file name without providing the full path
|
|
252
|
-
- You need to locate a file but don't know which directory it's in
|
|
253
|
-
- You want to find all files matching a pattern (e.g., all test files)
|
|
254
|
-
|
|
255
|
-
EXAMPLES:
|
|
256
|
-
- Find user controller: pattern="*user*controller*"
|
|
257
|
-
- Find specific file: pattern="database.ts"
|
|
258
|
-
- Find all test files: pattern="**/*.test.ts"
|
|
259
|
-
- Find Python models: pattern="**/models/*.py"
|
|
260
|
-
|
|
261
|
-
Use this BEFORE trying to read a file when you don't know its exact path.`,
|
|
262
|
-
category: 'search',
|
|
263
|
-
parameters: {
|
|
264
|
-
type: 'object',
|
|
265
|
-
properties: {
|
|
266
|
-
pattern: { type: 'string', description: 'Glob pattern to match file names. Use * for wildcards, ** for recursive search.' },
|
|
267
|
-
maxResults: { type: 'number', description: 'Maximum number of results to return. Default: 10' }
|
|
268
|
-
},
|
|
269
|
-
required: ['pattern']
|
|
270
|
-
},
|
|
271
|
-
requiresApproval: false,
|
|
272
|
-
execute: async (params, context) => {
|
|
273
|
-
const { findFilesTool } = await import('./find-files.js');
|
|
274
|
-
const execContext = context || { cwd: process.cwd(), requireApproval: async () => true };
|
|
275
|
-
try {
|
|
276
|
-
const result = await findFilesTool.execute(params, execContext);
|
|
277
|
-
return { success: true, result };
|
|
278
|
-
}
|
|
279
|
-
catch (error) {
|
|
280
|
-
return { success: false, error: error.message };
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
});
|
|
284
|
-
// Command Execution
|
|
285
|
-
this.register({
|
|
286
|
-
name: 'execute_command',
|
|
287
|
-
description: 'Execute a shell command',
|
|
288
|
-
category: 'command',
|
|
289
|
-
parameters: {
|
|
290
|
-
type: 'object',
|
|
291
|
-
properties: {
|
|
292
|
-
command: { type: 'string', description: 'Command to execute' },
|
|
293
|
-
cwd: { type: 'string', description: 'Working directory' },
|
|
294
|
-
timeout: { type: 'number', description: 'Timeout in milliseconds' }
|
|
295
|
-
},
|
|
296
|
-
required: ['command']
|
|
297
|
-
},
|
|
298
|
-
requiresApproval: true,
|
|
299
|
-
execute: async (params, context) => {
|
|
300
|
-
const commandTool = await import('./command.js');
|
|
301
|
-
const execContext = context || { cwd: process.cwd(), requireApproval: async () => true };
|
|
302
|
-
try {
|
|
303
|
-
const result = await commandTool.executeCommandTool.execute({
|
|
304
|
-
command: params.command,
|
|
305
|
-
cwd: params.cwd
|
|
306
|
-
}, execContext);
|
|
307
|
-
// Check if operation was cancelled
|
|
308
|
-
if (result && result.includes('cancelled')) {
|
|
309
|
-
return { success: false, error: result };
|
|
310
|
-
}
|
|
311
|
-
return { success: true, result };
|
|
312
|
-
}
|
|
313
|
-
catch (error) {
|
|
314
|
-
return { success: false, error: error.message };
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
});
|
|
318
|
-
this.register({
|
|
319
|
-
name: 'run_background',
|
|
320
|
-
description: 'Run a command in the background',
|
|
321
|
-
category: 'command',
|
|
322
|
-
parameters: {
|
|
323
|
-
type: 'object',
|
|
324
|
-
properties: {
|
|
325
|
-
command: { type: 'string', description: 'Command to run' },
|
|
326
|
-
name: { type: 'string', description: 'Process name' }
|
|
327
|
-
},
|
|
328
|
-
required: ['command', 'name']
|
|
329
|
-
},
|
|
330
|
-
requiresApproval: true,
|
|
331
|
-
execute: async (params, context) => {
|
|
332
|
-
// Background command implementation stub
|
|
333
|
-
return {
|
|
334
|
-
success: false,
|
|
335
|
-
error: 'Background commands not yet implemented'
|
|
336
|
-
};
|
|
337
|
-
}
|
|
338
|
-
});
|
|
339
|
-
// Task Management
|
|
340
|
-
this.register({
|
|
341
|
-
name: 'todo_write',
|
|
342
|
-
description: 'Manage TODO list for complex tasks',
|
|
343
|
-
category: 'task',
|
|
344
|
-
parameters: {
|
|
345
|
-
type: 'object',
|
|
346
|
-
properties: {
|
|
347
|
-
action: { type: 'string', enum: ['add', 'complete', 'list', 'clear'] },
|
|
348
|
-
item: { type: 'string', description: 'TODO item text' },
|
|
349
|
-
id: { type: 'string', description: 'TODO item ID' }
|
|
350
|
-
},
|
|
351
|
-
required: ['action']
|
|
352
|
-
},
|
|
353
|
-
requiresApproval: false,
|
|
354
|
-
execute: async (params, context) => {
|
|
355
|
-
// TODO management stub
|
|
356
|
-
return {
|
|
357
|
-
success: false,
|
|
358
|
-
error: 'TODO management not yet implemented'
|
|
359
|
-
};
|
|
360
|
-
}
|
|
361
|
-
});
|
|
362
|
-
this.register({
|
|
363
|
-
name: 'task_breakdown',
|
|
364
|
-
description: 'Break down complex task into steps',
|
|
365
|
-
category: 'task',
|
|
366
|
-
parameters: {
|
|
367
|
-
type: 'object',
|
|
368
|
-
properties: {
|
|
369
|
-
task: { type: 'string', description: 'Task description' },
|
|
370
|
-
context: { type: 'string', description: 'Additional context' }
|
|
371
|
-
},
|
|
372
|
-
required: ['task']
|
|
373
|
-
},
|
|
374
|
-
requiresApproval: false,
|
|
375
|
-
execute: async (params, context) => {
|
|
376
|
-
// Task breakdown stub
|
|
377
|
-
return {
|
|
378
|
-
success: false,
|
|
379
|
-
error: 'Task breakdown not yet implemented'
|
|
380
|
-
};
|
|
381
|
-
}
|
|
382
|
-
});
|
|
383
|
-
this.register({
|
|
384
|
-
name: 'inspect_symbol',
|
|
385
|
-
description: `List functions, classes, and exports in a file WITHOUT reading the full implementation.
|
|
386
|
-
|
|
387
|
-
USE THIS TOOL WHEN:
|
|
388
|
-
- You want to understand the structure of a file before reading it
|
|
389
|
-
- User asks "what functions are in this file"
|
|
390
|
-
- You need to find a specific function but don't want to read 500 lines of code
|
|
391
|
-
- You want to map out a module's public API
|
|
392
|
-
|
|
393
|
-
This tool returns ONLY the signatures/headers, not the implementation details.
|
|
394
|
-
It's much more token-efficient than read_file for surveying code structure.
|
|
395
|
-
|
|
396
|
-
WORKFLOW:
|
|
397
|
-
1. Use inspect_symbol to see what's in a file
|
|
398
|
-
2. Identify the relevant function/class
|
|
399
|
-
3. Use read_file only if you need to see the implementation
|
|
400
|
-
|
|
401
|
-
Supported languages: TypeScript, JavaScript, Python, Java`,
|
|
402
|
-
category: 'search',
|
|
403
|
-
parameters: {
|
|
404
|
-
type: 'object',
|
|
405
|
-
properties: {
|
|
406
|
-
filePath: { type: 'string', description: 'Path to the file to inspect (relative to workspace root)' }
|
|
407
|
-
},
|
|
408
|
-
required: ['filePath']
|
|
409
|
-
},
|
|
410
|
-
requiresApproval: false,
|
|
411
|
-
execute: async (params, context) => {
|
|
412
|
-
const { InspectSymbolTool } = await import('./inspect-symbol.js');
|
|
413
|
-
const execContext = context || { cwd: process.cwd(), requireApproval: async () => true };
|
|
414
|
-
try {
|
|
415
|
-
const tool = new InspectSymbolTool();
|
|
416
|
-
const result = await tool.execute(params, execContext.cwd);
|
|
417
|
-
return { success: true, result };
|
|
418
|
-
}
|
|
419
|
-
catch (error) {
|
|
420
|
-
return { success: false, error: error.message };
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
});
|
|
424
|
-
// Git Operations
|
|
425
|
-
this.register({
|
|
426
|
-
name: 'get_diff',
|
|
427
|
-
description: `Show git diff to verify changes made to files.
|
|
428
|
-
|
|
429
|
-
USE THIS TOOL:
|
|
430
|
-
- AFTER making changes to verify what was modified
|
|
431
|
-
- BEFORE claiming a task is complete
|
|
432
|
-
- When user asks "what changed" or "show me the diff"
|
|
433
|
-
- To ensure you didn't accidentally modify unintended code
|
|
434
|
-
|
|
435
|
-
BEST PRACTICE: Always check the diff after editing files to verify:
|
|
436
|
-
1. Changes are in the correct locations
|
|
437
|
-
2. No unintended modifications were made
|
|
438
|
-
3. All required changes are present
|
|
439
|
-
|
|
440
|
-
This is a critical verification step for professional-grade output.`,
|
|
441
|
-
category: 'git',
|
|
442
|
-
parameters: {
|
|
443
|
-
type: 'object',
|
|
444
|
-
properties: {
|
|
445
|
-
filePath: { type: 'string', description: 'Optional: specific file to show diff for. Omit to see all changes.' },
|
|
446
|
-
staged: { type: 'boolean', description: 'Show staged changes instead of unstaged. Default: false' }
|
|
447
|
-
},
|
|
448
|
-
required: []
|
|
449
|
-
},
|
|
450
|
-
requiresApproval: false,
|
|
451
|
-
execute: async (params, context) => {
|
|
452
|
-
const { GetDiffTool } = await import('./get-diff.js');
|
|
453
|
-
const execContext = context || { cwd: process.cwd(), requireApproval: async () => true };
|
|
454
|
-
try {
|
|
455
|
-
const tool = new GetDiffTool();
|
|
456
|
-
const result = await tool.execute(params, execContext.cwd);
|
|
457
|
-
return { success: true, result };
|
|
458
|
-
}
|
|
459
|
-
catch (error) {
|
|
460
|
-
return { success: false, error: error.message };
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
});
|
|
464
|
-
this.register({
|
|
465
|
-
name: 'apply_diff',
|
|
466
|
-
description: 'Apply a patch/diff to files',
|
|
467
|
-
category: 'git',
|
|
468
|
-
parameters: {
|
|
469
|
-
type: 'object',
|
|
470
|
-
properties: {
|
|
471
|
-
diff: { type: 'string', description: 'Diff/patch content' },
|
|
472
|
-
reverse: { type: 'boolean', description: 'Apply in reverse' }
|
|
473
|
-
},
|
|
474
|
-
required: ['diff']
|
|
475
|
-
},
|
|
476
|
-
requiresApproval: true,
|
|
477
|
-
execute: async (params, context) => {
|
|
478
|
-
// Apply diff stub
|
|
479
|
-
return {
|
|
480
|
-
success: false,
|
|
481
|
-
error: 'Git operations not yet implemented'
|
|
482
|
-
};
|
|
483
|
-
}
|
|
484
|
-
});
|
|
485
|
-
// Web Operations
|
|
486
|
-
this.register({
|
|
487
|
-
name: 'web_search',
|
|
488
|
-
description: 'Search the web for current information beyond the AI knowledge cutoff',
|
|
489
|
-
category: 'web',
|
|
490
|
-
parameters: {
|
|
491
|
-
type: 'object',
|
|
492
|
-
properties: {
|
|
493
|
-
query: { type: 'string', description: 'Search query (2-200 characters)' },
|
|
494
|
-
limit: { type: 'number', description: 'Max results (1-10)' },
|
|
495
|
-
allowed_domains: { type: 'array', items: { type: 'string' }, description: 'Only include results from these domains' },
|
|
496
|
-
blocked_domains: { type: 'array', items: { type: 'string' }, description: 'Never include results from these domains' }
|
|
497
|
-
},
|
|
498
|
-
required: ['query']
|
|
499
|
-
},
|
|
500
|
-
requiresApproval: false,
|
|
501
|
-
execute: async (params, context) => {
|
|
502
|
-
const { webSearchTool } = await import('./web-search.js');
|
|
503
|
-
const execContext = context || { cwd: process.cwd(), requireApproval: async () => true };
|
|
504
|
-
try {
|
|
505
|
-
const result = await webSearchTool.execute(params, execContext);
|
|
506
|
-
return { success: true, result };
|
|
507
|
-
}
|
|
508
|
-
catch (error) {
|
|
509
|
-
return { success: false, error: error.message };
|
|
510
|
-
}
|
|
511
|
-
}
|
|
512
|
-
});
|
|
513
|
-
this.register({
|
|
514
|
-
name: 'fetch_url',
|
|
515
|
-
description: 'Fetch and extract content from a URL',
|
|
516
|
-
category: 'web',
|
|
517
|
-
parameters: {
|
|
518
|
-
type: 'object',
|
|
519
|
-
properties: {
|
|
520
|
-
url: { type: 'string', description: 'URL to fetch' },
|
|
521
|
-
extract_code: { type: 'boolean', description: 'Try to extract code blocks' }
|
|
522
|
-
},
|
|
523
|
-
required: ['url']
|
|
524
|
-
},
|
|
525
|
-
requiresApproval: true,
|
|
526
|
-
execute: async (params, context) => {
|
|
527
|
-
const { fetchUrlTool } = await import('./web-search.js');
|
|
528
|
-
const execContext = context || { cwd: process.cwd(), requireApproval: async () => true };
|
|
529
|
-
try {
|
|
530
|
-
const result = await fetchUrlTool.execute(params, execContext);
|
|
531
|
-
return { success: true, result };
|
|
532
|
-
}
|
|
533
|
-
catch (error) {
|
|
534
|
-
return { success: false, error: error.message };
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
|
-
});
|
|
538
|
-
}
|
|
539
|
-
register(tool) {
|
|
540
|
-
this.tools.set(tool.name, tool);
|
|
541
|
-
}
|
|
542
|
-
get(name) {
|
|
543
|
-
return this.tools.get(name);
|
|
544
|
-
}
|
|
545
|
-
list() {
|
|
546
|
-
return Array.from(this.tools.values());
|
|
547
|
-
}
|
|
548
|
-
listByCategory(category) {
|
|
549
|
-
return this.list().filter(tool => tool.category === category);
|
|
550
|
-
}
|
|
551
|
-
async execute(name, params, context) {
|
|
552
|
-
const tool = this.get(name);
|
|
553
|
-
if (!tool) {
|
|
554
|
-
return {
|
|
555
|
-
success: false,
|
|
556
|
-
error: `Tool ${name} not found`
|
|
557
|
-
};
|
|
558
|
-
}
|
|
559
|
-
try {
|
|
560
|
-
const result = await tool.execute(params, context);
|
|
561
|
-
// Store in history
|
|
562
|
-
this.executionHistory.push({
|
|
563
|
-
tool: name,
|
|
564
|
-
params,
|
|
565
|
-
result,
|
|
566
|
-
timestamp: new Date()
|
|
567
|
-
});
|
|
568
|
-
// Keep only last 100 executions
|
|
569
|
-
if (this.executionHistory.length > 100) {
|
|
570
|
-
this.executionHistory = this.executionHistory.slice(-100);
|
|
571
|
-
}
|
|
572
|
-
return result;
|
|
573
|
-
}
|
|
574
|
-
catch (error) {
|
|
575
|
-
return {
|
|
576
|
-
success: false,
|
|
577
|
-
error: `Tool execution failed: ${error.message}`
|
|
578
|
-
};
|
|
579
|
-
}
|
|
580
|
-
}
|
|
581
|
-
getHistory() {
|
|
582
|
-
return this.executionHistory;
|
|
583
|
-
}
|
|
584
|
-
clearHistory() {
|
|
585
|
-
this.executionHistory = [];
|
|
586
|
-
}
|
|
587
|
-
// Convert to AI provider tool format
|
|
588
|
-
toAITools() {
|
|
589
|
-
return this.list().map(tool => ({
|
|
590
|
-
type: 'function',
|
|
591
|
-
function: {
|
|
592
|
-
name: tool.name,
|
|
593
|
-
description: tool.description,
|
|
594
|
-
parameters: tool.parameters
|
|
595
|
-
}
|
|
596
|
-
}));
|
|
597
|
-
}
|
|
598
|
-
}
|
|
599
|
-
export default ToolRegistry;
|
|
600
|
-
//# sourceMappingURL=ToolRegistry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ToolRegistry.js","sourceRoot":"","sources":["../../src/tools/ToolRegistry.ts"],"names":[],"mappings":"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"}
|