Skip to content

Commit c78dfce

Browse files
authored
Merge pull request #6501 from continuedev/pe/required-tool-tests
test: check for required params on tool defs
2 parents d4ed9a4 + 32b4cbf commit c78dfce

File tree

3 files changed

+91
-32
lines changed

3 files changed

+91
-32
lines changed

core/tools/definitions/index.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
export { codebaseTool } from "./codebaseTool";
2+
export { createNewFileTool } from "./createNewFile";
3+
export { createRuleBlock } from "./createRuleBlock";
4+
export { editFileTool } from "./editFile";
5+
export { fetchUrlContentTool } from "./fetchUrlContent";
6+
export { globSearchTool } from "./globSearch";
7+
export { grepSearchTool } from "./grepSearch";
8+
export { lsTool } from "./ls";
9+
export { readCurrentlyOpenFileTool } from "./readCurrentlyOpenFile";
10+
export { readFileTool } from "./readFile";
11+
export { requestRuleTool } from "./requestRule";
12+
export { runTerminalCommandTool } from "./runTerminalCommand";
13+
export { searchAndReplaceInFileTool } from "./searchAndReplaceInFile";
14+
export { searchWebTool } from "./searchWeb";
15+
export { viewDiffTool } from "./viewDiff";
16+
export { viewRepoMapTool } from "./viewRepoMap";
17+
export { viewSubdirectoryTool } from "./viewSubdirectory";
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import { describe, expect, it } from "@jest/globals";
2+
import { ConfigDependentToolParams, GetTool, Tool } from "../..";
3+
import * as toolDefinitions from "./index";
4+
5+
describe("Tool Definitions", () => {
6+
// Mock params for tools that need them
7+
const mockParams: ConfigDependentToolParams = {
8+
rules: [],
9+
enableExperimentalTools: false,
10+
};
11+
12+
// Helper function to get the actual tool object
13+
const getToolObject = (toolDefinition: Tool | GetTool): Tool => {
14+
if (typeof toolDefinition === "function") {
15+
return toolDefinition(mockParams);
16+
}
17+
return toolDefinition;
18+
};
19+
20+
it("should have all required parameters defined in properties for each tool", () => {
21+
const exportedTools = Object.values(toolDefinitions);
22+
23+
exportedTools.forEach((toolDefinition) => {
24+
const tool = getToolObject(toolDefinition);
25+
26+
// Each tool should have the required structure
27+
expect(tool).toHaveProperty("type", "function");
28+
expect(tool).toHaveProperty("function");
29+
expect(tool.function).toHaveProperty("parameters");
30+
31+
const parameters = tool.function.parameters;
32+
33+
// If there are required parameters, they should be defined in properties
34+
if (
35+
parameters &&
36+
parameters.required &&
37+
Array.isArray(parameters.required)
38+
) {
39+
expect(parameters).toHaveProperty("properties");
40+
expect(typeof parameters.properties).toBe("object");
41+
42+
// Check each required parameter is defined in properties
43+
parameters.required.forEach((requiredParam: string) => {
44+
expect(parameters.properties).toHaveProperty(requiredParam);
45+
46+
// Each property should have at least a type
47+
const property = parameters.properties[requiredParam];
48+
expect(property).toHaveProperty("type");
49+
expect(typeof property.type).toBe("string");
50+
});
51+
}
52+
});
53+
});
54+
});

core/tools/index.ts

Lines changed: 20 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,38 @@
11
import { ConfigDependentToolParams, IDE, Tool } from "..";
2-
import { codebaseTool } from "./definitions/codebaseTool";
3-
import { createNewFileTool } from "./definitions/createNewFile";
4-
import { createRuleBlock } from "./definitions/createRuleBlock";
5-
import { editFileTool } from "./definitions/editFile";
6-
import { fetchUrlContentTool } from "./definitions/fetchUrlContent";
7-
import { globSearchTool } from "./definitions/globSearch";
8-
import { grepSearchTool } from "./definitions/grepSearch";
9-
import { lsTool } from "./definitions/ls";
10-
import { readCurrentlyOpenFileTool } from "./definitions/readCurrentlyOpenFile";
11-
import { readFileTool } from "./definitions/readFile";
12-
import { requestRuleTool } from "./definitions/requestRule";
13-
import { runTerminalCommandTool } from "./definitions/runTerminalCommand";
14-
import { searchAndReplaceInFileTool } from "./definitions/searchAndReplaceInFile";
15-
import { searchWebTool } from "./definitions/searchWeb";
16-
import { viewDiffTool } from "./definitions/viewDiff";
17-
import { viewRepoMapTool } from "./definitions/viewRepoMap";
18-
import { viewSubdirectoryTool } from "./definitions/viewSubdirectory";
2+
import * as toolDefinitions from "./definitions";
193

204
// I'm writing these as functions because we've messed up 3 TIMES by pushing to const, causing duplicate tool definitions on subsequent config loads.
215

226
// missing support for remote os calls: https://github.com/microsoft/vscode/issues/252269
23-
const getLocalOnlyToolDefinitions = () => [grepSearchTool];
7+
const getLocalOnlyToolDefinitions = () => [toolDefinitions.grepSearchTool];
248

259
const getBaseToolDefinitions = () => [
26-
readFileTool,
27-
createNewFileTool,
28-
runTerminalCommandTool,
29-
globSearchTool,
30-
searchWebTool,
31-
viewDiffTool,
32-
readCurrentlyOpenFileTool,
33-
lsTool,
34-
createRuleBlock,
35-
fetchUrlContentTool,
10+
toolDefinitions.readFileTool,
11+
toolDefinitions.createNewFileTool,
12+
toolDefinitions.runTerminalCommandTool,
13+
toolDefinitions.globSearchTool,
14+
toolDefinitions.searchWebTool,
15+
toolDefinitions.viewDiffTool,
16+
toolDefinitions.readCurrentlyOpenFileTool,
17+
toolDefinitions.lsTool,
18+
toolDefinitions.createRuleBlock,
19+
toolDefinitions.fetchUrlContentTool,
3620
];
3721

3822
export const getConfigDependentToolDefinitions = (
3923
params: ConfigDependentToolParams,
4024
): Tool[] => [
41-
requestRuleTool(params),
25+
toolDefinitions.requestRuleTool(params),
4226
// Search and replace is now generally available
43-
searchAndReplaceInFileTool,
27+
toolDefinitions.searchAndReplaceInFileTool,
4428
// Keep edit file tool available for models that need it
45-
editFileTool,
29+
toolDefinitions.editFileTool,
4630
...(params.enableExperimentalTools
47-
? [viewRepoMapTool, viewSubdirectoryTool, codebaseTool]
31+
? [
32+
toolDefinitions.viewRepoMapTool,
33+
toolDefinitions.viewSubdirectoryTool,
34+
toolDefinitions.codebaseTool,
35+
]
4836
: []),
4937
];
5038

0 commit comments

Comments
 (0)