gaunt-sloth-assistant 1.0.6 → 1.1.0
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 +32 -1
- package/dist/builtInToolsConfig.js +33 -1
- package/dist/builtInToolsConfig.js.map +1 -1
- package/dist/config.d.ts +39 -2
- package/dist/config.js.map +1 -1
- package/dist/tools/GthCustomToolkit.d.ts +32 -0
- package/dist/tools/GthCustomToolkit.js +181 -0
- package/dist/tools/GthCustomToolkit.js.map +1 -0
- package/dist/tools/GthDevToolkit.d.ts +2 -2
- package/dist/tools/GthDevToolkit.js +23 -19
- package/dist/tools/GthDevToolkit.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -39,6 +39,7 @@ The promise of Gaunt Sloth:
|
|
|
39
39
|
- Answers questions about provided code;
|
|
40
40
|
- Writes code;
|
|
41
41
|
- Connects to MCP server (including remote MCP with OAuth);
|
|
42
|
+
- Executes custom shell commands (deployments, migrations, tests, etc.) with security validation;
|
|
42
43
|
- Saves all responses in timestamped `.md` files (override with `-w/--write-output-to-file`);
|
|
43
44
|
- Anything else you need, when combined with other command line tools.
|
|
44
45
|
|
|
@@ -50,7 +51,7 @@ The promise of Gaunt Sloth:
|
|
|
50
51
|
- Google AI Studio and Google Vertex AI;
|
|
51
52
|
- Anthropic;
|
|
52
53
|
- OpenAI (and other providers using OpenAI format, such as Inception);
|
|
53
|
-
- LM Studio (
|
|
54
|
+
- Local AI: LM Studio, Ollama, llama.cpp (Via OpenAI compatibitlity)
|
|
54
55
|
- Ollama with JS config (some of the models, see https://github.com/Galvanized-Pukeko/gaunt-sloth-assistant/discussions/107)
|
|
55
56
|
- xAI;
|
|
56
57
|
|
|
@@ -154,6 +155,36 @@ For OpenAI-compatible providers like Inception, use `gsloth init openai` and mod
|
|
|
154
155
|
|
|
155
156
|
More detailed information on configuration can be found in [CONFIGURATION.md](./docs/CONFIGURATION.md)
|
|
156
157
|
|
|
158
|
+
### Custom Tools
|
|
159
|
+
|
|
160
|
+
Gaunt Sloth supports defining custom shell commands that the AI can execute. These custom tools:
|
|
161
|
+
- Work across all commands (`pr`, `review`, `code`, `ask`, `chat`)
|
|
162
|
+
- Can be configured globally or per-command
|
|
163
|
+
- Support parameters with security validation
|
|
164
|
+
- Are useful for deployments, migrations, automation, and more
|
|
165
|
+
|
|
166
|
+
**Example configuration:**
|
|
167
|
+
```json
|
|
168
|
+
{
|
|
169
|
+
"llm": {"type": "vertexai", "model": "gemini-2.5-pro"},
|
|
170
|
+
"customTools": {
|
|
171
|
+
"deploy": {
|
|
172
|
+
"command": "npm run deploy",
|
|
173
|
+
"description": "Deploy the application"
|
|
174
|
+
},
|
|
175
|
+
"run_migration": {
|
|
176
|
+
"command": "npm run migrate -- ${name}",
|
|
177
|
+
"description": "Run a database migration",
|
|
178
|
+
"parameters": {
|
|
179
|
+
"name": {"description": "Migration name"}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
See [Custom Tools Configuration](./docs/CONFIGURATION.md#custom-tools-configuration) for complete documentation.
|
|
187
|
+
|
|
157
188
|
### Google GenAI (AI Studio)
|
|
158
189
|
|
|
159
190
|
```bash
|
|
@@ -6,6 +6,7 @@ import GthFileSystemToolkit from '#src/tools/GthFileSystemToolkit.js';
|
|
|
6
6
|
import { displayWarning } from '#src/utils/consoleUtils.js';
|
|
7
7
|
import { getProjectDir } from '#src/utils/systemUtils.js';
|
|
8
8
|
import GthDevToolkit from '#src/tools/GthDevToolkit.js';
|
|
9
|
+
import GthCustomToolkit from '#src/tools/GthCustomToolkit.js';
|
|
9
10
|
/**
|
|
10
11
|
* Available built-in tools may be configured in JSON config, see `builtInTools` of {@link GthConfig}.
|
|
11
12
|
*
|
|
@@ -33,7 +34,8 @@ export async function getDefaultTools(config, command) {
|
|
|
33
34
|
const filesystemTools = filterFilesystemTools(config.filesystem);
|
|
34
35
|
const builtInTools = await getBuiltInTools(config);
|
|
35
36
|
const devTools = await filterDevTools(command, config.commands?.code?.devTools);
|
|
36
|
-
|
|
37
|
+
const customTools = getCustomTools(config, command);
|
|
38
|
+
return [...filesystemTools, ...devTools, ...customTools, ...builtInTools];
|
|
37
39
|
}
|
|
38
40
|
async function filterDevTools(command, devToolConfig) {
|
|
39
41
|
if (command != 'code' || !devToolConfig) {
|
|
@@ -42,6 +44,36 @@ async function filterDevTools(command, devToolConfig) {
|
|
|
42
44
|
const toolkit = new GthDevToolkit(devToolConfig);
|
|
43
45
|
return [...toolkit.getTools()];
|
|
44
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Get custom tools based on configuration.
|
|
49
|
+
* Supports global customTools and per-command overrides.
|
|
50
|
+
*/
|
|
51
|
+
function getCustomTools(config, command) {
|
|
52
|
+
// Determine which custom tools to use
|
|
53
|
+
let toolsConfig;
|
|
54
|
+
if (command && config.commands?.[command]) {
|
|
55
|
+
const cmdConfig = config.commands[command];
|
|
56
|
+
// Check if command has customTools override
|
|
57
|
+
if ('customTools' in cmdConfig) {
|
|
58
|
+
toolsConfig = cmdConfig.customTools;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
// No override, use root-level
|
|
62
|
+
toolsConfig = config.customTools;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
// No command specified or no command config, use root-level
|
|
67
|
+
toolsConfig = config.customTools;
|
|
68
|
+
}
|
|
69
|
+
// If explicitly disabled or empty, return no tools
|
|
70
|
+
if (toolsConfig === false || !toolsConfig || Object.keys(toolsConfig).length === 0) {
|
|
71
|
+
return [];
|
|
72
|
+
}
|
|
73
|
+
// Create toolkit with the determined config
|
|
74
|
+
const toolkit = new GthCustomToolkit(toolsConfig);
|
|
75
|
+
return toolkit.getTools();
|
|
76
|
+
}
|
|
45
77
|
/**
|
|
46
78
|
* Filter filesystem tools based on configuration
|
|
47
79
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtInToolsConfig.js","sourceRoot":"","sources":["../src/builtInToolsConfig.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,oBAAoB,MAAM,oCAAoC,CAAC;AAGtE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,aAAa,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"builtInToolsConfig.js","sourceRoot":"","sources":["../src/builtInToolsConfig.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -117,7 +117,7 @@ export interface GthConfig {
|
|
|
117
117
|
* use llm.verbose or `gth --verbose` as more intrusive option, setting verbose to LangChain / LangGraph
|
|
118
118
|
*/
|
|
119
119
|
debugLog?: boolean;
|
|
120
|
-
|
|
120
|
+
customTools?: CustomToolsConfig;
|
|
121
121
|
requirementsProviderConfig?: Record<string, unknown>;
|
|
122
122
|
contentProviderConfig?: Record<string, unknown>;
|
|
123
123
|
/**
|
|
@@ -141,6 +141,7 @@ export interface GthConfig {
|
|
|
141
141
|
requirementsProvider?: string;
|
|
142
142
|
filesystem?: string[] | 'all' | 'read' | 'none';
|
|
143
143
|
builtInTools?: string[];
|
|
144
|
+
customTools?: CustomToolsConfig | false;
|
|
144
145
|
logWorkForReviewInSeconds?: number;
|
|
145
146
|
rating?: RatingConfig;
|
|
146
147
|
};
|
|
@@ -149,19 +150,23 @@ export interface GthConfig {
|
|
|
149
150
|
contentProvider?: string;
|
|
150
151
|
filesystem?: string[] | 'all' | 'read' | 'none';
|
|
151
152
|
builtInTools?: string[];
|
|
153
|
+
customTools?: CustomToolsConfig | false;
|
|
152
154
|
rating?: RatingConfig;
|
|
153
155
|
};
|
|
154
156
|
ask?: {
|
|
155
157
|
filesystem?: string[] | 'all' | 'read' | 'none';
|
|
156
158
|
builtInTools?: string[];
|
|
159
|
+
customTools?: CustomToolsConfig | false;
|
|
157
160
|
};
|
|
158
161
|
chat?: {
|
|
159
162
|
filesystem?: string[] | 'all' | 'read' | 'none';
|
|
160
163
|
builtInTools?: string[];
|
|
164
|
+
customTools?: CustomToolsConfig | false;
|
|
161
165
|
};
|
|
162
166
|
code?: {
|
|
163
167
|
filesystem?: string[] | 'all' | 'read' | 'none';
|
|
164
168
|
builtInTools?: string[];
|
|
169
|
+
customTools?: CustomToolsConfig | false;
|
|
165
170
|
devTools?: GthDevToolsConfig;
|
|
166
171
|
};
|
|
167
172
|
};
|
|
@@ -183,7 +188,7 @@ export interface ServerTool extends Record<string, unknown> {
|
|
|
183
188
|
export interface RawGthConfig extends Omit<GthConfig, 'llm'> {
|
|
184
189
|
llm: LLMConfig;
|
|
185
190
|
}
|
|
186
|
-
export type CustomToolsConfig = Record<string,
|
|
191
|
+
export type CustomToolsConfig = Record<string, CustomCommandConfig>;
|
|
187
192
|
export type BuiltInToolsConfig = {
|
|
188
193
|
jira: JiraConfig;
|
|
189
194
|
};
|
|
@@ -219,6 +224,38 @@ export interface RatingConfig {
|
|
|
219
224
|
*/
|
|
220
225
|
errorOnReviewFail?: boolean;
|
|
221
226
|
}
|
|
227
|
+
/**
|
|
228
|
+
* Configuration for a custom command parameter.
|
|
229
|
+
* Parameters allow the model to provide dynamic values to commands.
|
|
230
|
+
*/
|
|
231
|
+
export interface CustomCommandParameter {
|
|
232
|
+
/**
|
|
233
|
+
* Description of the parameter shown to the model.
|
|
234
|
+
*/
|
|
235
|
+
description: string;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Configuration for a custom command.
|
|
239
|
+
* Custom commands can be executed with or without parameters.
|
|
240
|
+
*/
|
|
241
|
+
export interface CustomCommandConfig {
|
|
242
|
+
/**
|
|
243
|
+
* The shell command to execute.
|
|
244
|
+
* Can include placeholders like ${paramName} that will be replaced with parameter values.
|
|
245
|
+
* If no placeholder is present and parameters are provided, they are appended to the command.
|
|
246
|
+
*/
|
|
247
|
+
command: string;
|
|
248
|
+
/**
|
|
249
|
+
* Description of what this command does, shown to the model.
|
|
250
|
+
*/
|
|
251
|
+
description: string;
|
|
252
|
+
/**
|
|
253
|
+
* Optional parameters that the model can provide when calling this command.
|
|
254
|
+
* Each parameter has a name (the key) and a description.
|
|
255
|
+
* Parameters are validated for security (no shell injection, directory traversal, etc.).
|
|
256
|
+
*/
|
|
257
|
+
parameters?: Record<string, CustomCommandParameter>;
|
|
258
|
+
}
|
|
222
259
|
/**
|
|
223
260
|
* Config for {@link GthDevToolkit}.
|
|
224
261
|
* Tools are not applied when config is not provided.
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EACL,kBAAkB,EAClB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,cAAc,GACf,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,kBAAkB,EAClB,gCAAgC,GACjC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAI7E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module GthCustomToolkit
|
|
3
|
+
* Toolkit for user-defined custom shell commands.
|
|
4
|
+
* Provides secure execution of shell commands with parameter validation.
|
|
5
|
+
*/
|
|
6
|
+
import { BaseToolkit, StructuredToolInterface } from '@langchain/core/tools';
|
|
7
|
+
import { CustomToolsConfig } from '#src/config.js';
|
|
8
|
+
export default class GthCustomToolkit extends BaseToolkit {
|
|
9
|
+
tools: StructuredToolInterface[];
|
|
10
|
+
private customTools;
|
|
11
|
+
constructor(customTools?: CustomToolsConfig);
|
|
12
|
+
/**
|
|
13
|
+
* Validate parameter value to prevent security issues
|
|
14
|
+
*/
|
|
15
|
+
validateParameterValue(paramValue: string, paramName: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* Build a custom command with parameter interpolation
|
|
18
|
+
*/
|
|
19
|
+
buildCustomCommand(commandTemplate: string, parameters: Record<string, string>, parameterConfig?: Record<string, {
|
|
20
|
+
description: string;
|
|
21
|
+
}>): string;
|
|
22
|
+
private executeCommand;
|
|
23
|
+
/**
|
|
24
|
+
* Create a Zod schema for a custom command's parameters
|
|
25
|
+
*/
|
|
26
|
+
private createCustomCommandSchema;
|
|
27
|
+
/**
|
|
28
|
+
* Create a tool for a custom command
|
|
29
|
+
*/
|
|
30
|
+
private createCustomCommandTool;
|
|
31
|
+
private createTools;
|
|
32
|
+
}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module GthCustomToolkit
|
|
3
|
+
* Toolkit for user-defined custom shell commands.
|
|
4
|
+
* Provides secure execution of shell commands with parameter validation.
|
|
5
|
+
*/
|
|
6
|
+
import { BaseToolkit, tool } from '@langchain/core/tools';
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import { spawn } from 'child_process';
|
|
9
|
+
import path from 'node:path';
|
|
10
|
+
import { displayInfo, displayError } from '#src/utils/consoleUtils.js';
|
|
11
|
+
import { stdout } from '#src/utils/systemUtils.js';
|
|
12
|
+
// Helper function to create a tool with execute type
|
|
13
|
+
function createCustomTool(fn, config) {
|
|
14
|
+
const toolInstance = tool(fn, config);
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
16
|
+
toolInstance.gthCustomType = 'execute';
|
|
17
|
+
return toolInstance;
|
|
18
|
+
}
|
|
19
|
+
export default class GthCustomToolkit extends BaseToolkit {
|
|
20
|
+
tools;
|
|
21
|
+
customTools;
|
|
22
|
+
constructor(customTools = {}) {
|
|
23
|
+
super();
|
|
24
|
+
this.customTools = customTools;
|
|
25
|
+
this.tools = this.createTools();
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Validate parameter value to prevent security issues
|
|
29
|
+
*/
|
|
30
|
+
validateParameterValue(paramValue, paramName) {
|
|
31
|
+
// Check for absolute paths
|
|
32
|
+
if (path.isAbsolute(paramValue)) {
|
|
33
|
+
throw new Error(`Absolute paths are not allowed for parameter '${paramName}'`);
|
|
34
|
+
}
|
|
35
|
+
// Check for directory traversal attempts
|
|
36
|
+
if (paramValue.includes('..') || paramValue.includes('\\..\\') || paramValue.includes('/../')) {
|
|
37
|
+
throw new Error(`Directory traversal attempts are not allowed in parameter '${paramName}'`);
|
|
38
|
+
}
|
|
39
|
+
// Check for pipe attempts and other shell injection
|
|
40
|
+
if (paramValue.includes('|') ||
|
|
41
|
+
paramValue.includes('&') ||
|
|
42
|
+
paramValue.includes(';') ||
|
|
43
|
+
paramValue.includes('`') ||
|
|
44
|
+
paramValue.includes('$') ||
|
|
45
|
+
paramValue.includes('$(') ||
|
|
46
|
+
paramValue.includes('\n') ||
|
|
47
|
+
paramValue.includes('\r')) {
|
|
48
|
+
throw new Error(`Shell injection attempts are not allowed in parameter '${paramName}'`);
|
|
49
|
+
}
|
|
50
|
+
// Check for null bytes
|
|
51
|
+
if (paramValue.includes('\0')) {
|
|
52
|
+
throw new Error(`Null bytes are not allowed in parameter '${paramName}'`);
|
|
53
|
+
}
|
|
54
|
+
// Normalize the path to remove any redundant separators
|
|
55
|
+
const normalizedValue = path.normalize(paramValue);
|
|
56
|
+
// Double-check after normalization
|
|
57
|
+
if (normalizedValue.includes('..')) {
|
|
58
|
+
throw new Error(`Directory traversal attempts are not allowed in parameter '${paramName}'`);
|
|
59
|
+
}
|
|
60
|
+
return normalizedValue;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Build a custom command with parameter interpolation
|
|
64
|
+
*/
|
|
65
|
+
buildCustomCommand(commandTemplate, parameters, parameterConfig) {
|
|
66
|
+
let command = commandTemplate;
|
|
67
|
+
const paramNames = Object.keys(parameters);
|
|
68
|
+
// Check if all provided parameters have placeholders or should be appended
|
|
69
|
+
const hasPlaceholders = paramNames.some((name) => command.includes(`\${${name}}`));
|
|
70
|
+
if (hasPlaceholders) {
|
|
71
|
+
// Replace all placeholders with validated parameter values
|
|
72
|
+
for (const [name, value] of Object.entries(parameters)) {
|
|
73
|
+
const validatedValue = this.validateParameterValue(value, name);
|
|
74
|
+
const placeholder = `\${${name}}`;
|
|
75
|
+
command = command.replace(new RegExp(placeholder.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g'), validatedValue);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else if (paramNames.length > 0 && parameterConfig) {
|
|
79
|
+
// Append parameters in the order defined in the config
|
|
80
|
+
const orderedParams = Object.keys(parameterConfig);
|
|
81
|
+
const appendValues = [];
|
|
82
|
+
for (const name of orderedParams) {
|
|
83
|
+
if (parameters[name] !== undefined) {
|
|
84
|
+
const validatedValue = this.validateParameterValue(parameters[name], name);
|
|
85
|
+
appendValues.push(validatedValue);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (appendValues.length > 0) {
|
|
89
|
+
command = `${command} ${appendValues.join(' ')}`;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return command;
|
|
93
|
+
}
|
|
94
|
+
async executeCommand(command, toolName) {
|
|
95
|
+
displayInfo(`\n🔧 Executing ${toolName}: ${command}`);
|
|
96
|
+
return new Promise((resolve, reject) => {
|
|
97
|
+
const child = spawn(command, {
|
|
98
|
+
shell: true,
|
|
99
|
+
});
|
|
100
|
+
let output = '';
|
|
101
|
+
// Capture output if available (when stdio is not 'inherit')
|
|
102
|
+
if (child.stdout) {
|
|
103
|
+
child.stdout.on('data', (data) => {
|
|
104
|
+
const chunk = data.toString();
|
|
105
|
+
stdout.write(chunk);
|
|
106
|
+
output += chunk;
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
if (child.stderr) {
|
|
110
|
+
child.stderr.on('data', (data) => {
|
|
111
|
+
const chunk = data.toString();
|
|
112
|
+
stdout.write(chunk);
|
|
113
|
+
output += chunk;
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
child.on('close', (code) => {
|
|
117
|
+
if (code === 0) {
|
|
118
|
+
resolve(`Executing '${command}'...\n\n` +
|
|
119
|
+
`<COMMAND_OUTPUT>\n` +
|
|
120
|
+
output +
|
|
121
|
+
`</COMMAND_OUTPUT>\n` +
|
|
122
|
+
`\n\nCommand '${command}' completed successfully`);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
resolve(`Executing '${command}'...\n\n` +
|
|
126
|
+
`<COMMAND_OUTPUT>\n` +
|
|
127
|
+
output +
|
|
128
|
+
`</COMMAND_OUTPUT>\n` +
|
|
129
|
+
`\n\nCommand '${command}' exited with code ${code}`);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
child.on('error', (error) => {
|
|
133
|
+
const errorMsg = `Failed to execute command '${command}': ${error.message}`;
|
|
134
|
+
displayError(errorMsg);
|
|
135
|
+
reject(new Error(errorMsg));
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Create a Zod schema for a custom command's parameters
|
|
141
|
+
*/
|
|
142
|
+
createCustomCommandSchema(config
|
|
143
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
144
|
+
) {
|
|
145
|
+
if (!config.parameters || Object.keys(config.parameters).length === 0) {
|
|
146
|
+
return z.object({});
|
|
147
|
+
}
|
|
148
|
+
const shape = {};
|
|
149
|
+
for (const [paramName, paramConfig] of Object.entries(config.parameters)) {
|
|
150
|
+
shape[paramName] = z.string().describe(paramConfig.description);
|
|
151
|
+
}
|
|
152
|
+
return z.object(shape);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Create a tool for a custom command
|
|
156
|
+
*/
|
|
157
|
+
createCustomCommandTool(name, config) {
|
|
158
|
+
const schema = this.createCustomCommandSchema(config);
|
|
159
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
160
|
+
const toolFn = async (args) => {
|
|
161
|
+
// All parameters are strings, safe to cast
|
|
162
|
+
const stringArgs = args;
|
|
163
|
+
const command = this.buildCustomCommand(config.command, stringArgs, config.parameters);
|
|
164
|
+
return await this.executeCommand(command, name);
|
|
165
|
+
};
|
|
166
|
+
return createCustomTool(toolFn, {
|
|
167
|
+
name,
|
|
168
|
+
description: config.description + `\nThe configured command is [${config.command}].`,
|
|
169
|
+
schema,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
createTools() {
|
|
173
|
+
const tools = [];
|
|
174
|
+
// Create tools for custom commands
|
|
175
|
+
for (const [name, config] of Object.entries(this.customTools)) {
|
|
176
|
+
tools.push(this.createCustomCommandTool(name, config));
|
|
177
|
+
}
|
|
178
|
+
return tools;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=GthCustomToolkit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GthCustomToolkit.js","sourceRoot":"","sources":["../../src/tools/GthCustomToolkit.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,9 +12,9 @@ export default class GthDevToolkit extends BaseToolkit {
|
|
|
12
12
|
*/
|
|
13
13
|
getFilteredTools(allowedOperations: 'execute'[]): StructuredToolInterface[];
|
|
14
14
|
/**
|
|
15
|
-
* Validate
|
|
15
|
+
* Validate parameter value to prevent security issues
|
|
16
16
|
*/
|
|
17
|
-
|
|
17
|
+
validateParameterValue(paramValue: string, paramName: string): string;
|
|
18
18
|
/**
|
|
19
19
|
* Build the command for running a single test file
|
|
20
20
|
*/
|
|
@@ -14,7 +14,7 @@ function createGthTool(fn, config, gthDevType) {
|
|
|
14
14
|
toolInstance.gthDevType = gthDevType;
|
|
15
15
|
return toolInstance;
|
|
16
16
|
}
|
|
17
|
-
// Schema definitions
|
|
17
|
+
// Schema definitions for built-in tools
|
|
18
18
|
const RunTestsArgsSchema = z.object({});
|
|
19
19
|
const RunLintArgsSchema = z.object({});
|
|
20
20
|
const RunBuildArgsSchema = z.object({});
|
|
@@ -41,35 +41,39 @@ export default class GthDevToolkit extends BaseToolkit {
|
|
|
41
41
|
});
|
|
42
42
|
}
|
|
43
43
|
/**
|
|
44
|
-
* Validate
|
|
44
|
+
* Validate parameter value to prevent security issues
|
|
45
45
|
*/
|
|
46
|
-
|
|
46
|
+
validateParameterValue(paramValue, paramName) {
|
|
47
47
|
// Check for absolute paths
|
|
48
|
-
if (path.isAbsolute(
|
|
49
|
-
throw new Error(
|
|
48
|
+
if (path.isAbsolute(paramValue)) {
|
|
49
|
+
throw new Error(`Absolute paths are not allowed for parameter '${paramName}'`);
|
|
50
50
|
}
|
|
51
51
|
// Check for directory traversal attempts
|
|
52
|
-
if (
|
|
53
|
-
throw new Error(
|
|
52
|
+
if (paramValue.includes('..') || paramValue.includes('\\..\\') || paramValue.includes('/../')) {
|
|
53
|
+
throw new Error(`Directory traversal attempts are not allowed in parameter '${paramName}'`);
|
|
54
54
|
}
|
|
55
55
|
// Check for pipe attempts and other shell injection
|
|
56
|
-
if (
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
56
|
+
if (paramValue.includes('|') ||
|
|
57
|
+
paramValue.includes('&') ||
|
|
58
|
+
paramValue.includes(';') ||
|
|
59
|
+
paramValue.includes('`') ||
|
|
60
|
+
paramValue.includes('$') ||
|
|
61
|
+
paramValue.includes('$(') ||
|
|
62
|
+
paramValue.includes('\n') ||
|
|
63
|
+
paramValue.includes('\r')) {
|
|
64
|
+
throw new Error(`Shell injection attempts are not allowed in parameter '${paramName}'`);
|
|
61
65
|
}
|
|
62
66
|
// Check for null bytes
|
|
63
|
-
if (
|
|
64
|
-
throw new Error(
|
|
67
|
+
if (paramValue.includes('\0')) {
|
|
68
|
+
throw new Error(`Null bytes are not allowed in parameter '${paramName}'`);
|
|
65
69
|
}
|
|
66
70
|
// Normalize the path to remove any redundant separators
|
|
67
|
-
const
|
|
71
|
+
const normalizedValue = path.normalize(paramValue);
|
|
68
72
|
// Double-check after normalization
|
|
69
|
-
if (
|
|
70
|
-
throw new Error(
|
|
73
|
+
if (normalizedValue.includes('..')) {
|
|
74
|
+
throw new Error(`Directory traversal attempts are not allowed in parameter '${paramName}'`);
|
|
71
75
|
}
|
|
72
|
-
return
|
|
76
|
+
return normalizedValue;
|
|
73
77
|
}
|
|
74
78
|
/**
|
|
75
79
|
* Build the command for running a single test file
|
|
@@ -148,7 +152,7 @@ export default class GthDevToolkit extends BaseToolkit {
|
|
|
148
152
|
}
|
|
149
153
|
if (this.commands.run_single_test) {
|
|
150
154
|
tools.push(createGthTool(async (args) => {
|
|
151
|
-
const validatedPath = this.
|
|
155
|
+
const validatedPath = this.validateParameterValue(args.testPath, 'testPath');
|
|
152
156
|
const command = this.buildSingleTestCommand(validatedPath);
|
|
153
157
|
return await this.executeCommand(command, 'run_single_test');
|
|
154
158
|
}, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GthDevToolkit.js","sourceRoot":"","sources":["../../src/tools/GthDevToolkit.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,WAAW,EAA2B,IAAI,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAEvE,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAEnD,iDAAiD;AACjD,SAAS,aAAa,CACpB,EAAyC,EACzC,MAIC,EACD,UAAqB;IAErB,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACtC,8DAA8D;IAC7D,YAAoB,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9C,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"GthDevToolkit.js","sourceRoot":"","sources":["../../src/tools/GthDevToolkit.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gaunt-sloth-assistant",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Andrew Kondratev",
|
|
@@ -42,14 +42,14 @@
|
|
|
42
42
|
"dependencies": {
|
|
43
43
|
"@a2a-js/sdk": "^0.3.7",
|
|
44
44
|
"@langchain/anthropic": "^1.3.3",
|
|
45
|
-
"@langchain/core": "^1.1.
|
|
45
|
+
"@langchain/core": "^1.1.8",
|
|
46
46
|
"@langchain/deepseek": "^1.0.3",
|
|
47
47
|
"@langchain/google-genai": "^2.1.3",
|
|
48
48
|
"@langchain/google-vertexai": "^2.1.3",
|
|
49
49
|
"@langchain/groq": "^1.0.2",
|
|
50
50
|
"@langchain/langgraph": "^1.0.7",
|
|
51
51
|
"@langchain/mcp-adapters": "^1.1.1",
|
|
52
|
-
"@langchain/openai": "^1.
|
|
52
|
+
"@langchain/openai": "^1.2.0",
|
|
53
53
|
"@langchain/xai": "^1.1.0",
|
|
54
54
|
"@modelcontextprotocol/sdk": "^1.25.1",
|
|
55
55
|
"commander": "^14.0.2",
|