@gaunt-sloth/agent 0.1.8 → 2.0.0-alpha.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 +14 -5
- package/cli-acp.js +35 -0
- package/cli.js +35 -0
- package/dist/builtInToolsConfig.d.ts +26 -0
- package/dist/builtInToolsConfig.js +148 -0
- package/dist/builtInToolsConfig.js.map +1 -0
- package/dist/core/GthDeepAgent.d.ts +76 -0
- package/dist/core/GthDeepAgent.js +368 -0
- package/dist/core/GthDeepAgent.js.map +1 -0
- package/dist/core/debugCapture.d.ts +51 -0
- package/dist/core/debugCapture.js +2 -0
- package/dist/core/debugCapture.js.map +1 -0
- package/dist/core/deepAgentPermissions.d.ts +55 -0
- package/dist/core/deepAgentPermissions.js +120 -0
- package/dist/core/deepAgentPermissions.js.map +1 -0
- package/dist/core/gthAcpServer.d.ts +27 -0
- package/dist/core/gthAcpServer.js +71 -0
- package/dist/core/gthAcpServer.js.map +1 -0
- package/dist/core/gthDeepAgentFactory.d.ts +8 -0
- package/dist/core/gthDeepAgentFactory.js +9 -0
- package/dist/core/gthDeepAgentFactory.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/OAuthClientProviderImpl.d.ts +37 -0
- package/dist/mcp/OAuthClientProviderImpl.js +223 -0
- package/dist/mcp/OAuthClientProviderImpl.js.map +1 -0
- package/dist/middleware/binaryContentInjectionMiddleware.d.ts +22 -0
- package/dist/middleware/binaryContentInjectionMiddleware.js +125 -0
- package/dist/middleware/binaryContentInjectionMiddleware.js.map +1 -0
- package/dist/middleware/registry.d.ts +34 -0
- package/dist/middleware/registry.js +124 -0
- package/dist/middleware/registry.js.map +1 -0
- package/dist/middleware/types.d.ts +89 -0
- package/dist/middleware/types.js +9 -0
- package/dist/middleware/types.js.map +1 -0
- package/dist/modules/a2a/A2AClientWrapper.d.ts +22 -0
- package/dist/modules/a2a/A2AClientWrapper.js +63 -0
- package/dist/modules/a2a/A2AClientWrapper.js.map +1 -0
- package/dist/modules/acpModule.d.ts +37 -0
- package/dist/modules/acpModule.js +67 -0
- package/dist/modules/acpModule.js.map +1 -0
- package/dist/modules/apiAgUiModule.d.ts +2 -0
- package/dist/modules/apiAgUiModule.js +417 -0
- package/dist/modules/apiAgUiModule.js.map +1 -0
- package/dist/modules/interactiveSessionModule.d.ts +9 -0
- package/dist/modules/interactiveSessionModule.js +99 -0
- package/dist/modules/interactiveSessionModule.js.map +1 -0
- package/dist/resolvers.d.ts +18 -0
- package/dist/resolvers.js +140 -0
- package/dist/resolvers.js.map +1 -0
- package/dist/tools/A2AAgentTool.d.ts +24 -0
- package/dist/tools/A2AAgentTool.js +37 -0
- package/dist/tools/A2AAgentTool.js.map +1 -0
- package/dist/tools/GthCustomToolkit.d.ts +41 -0
- package/dist/tools/GthCustomToolkit.js +289 -0
- package/dist/tools/GthCustomToolkit.js.map +1 -0
- package/dist/tools/GthDevToolkit.d.ts +24 -0
- package/dist/tools/GthDevToolkit.js +189 -0
- package/dist/tools/GthDevToolkit.js.map +1 -0
- package/dist/tools/GthFileSystemToolkit.d.ts +36 -0
- package/dist/tools/GthFileSystemToolkit.js +775 -0
- package/dist/tools/GthFileSystemToolkit.js.map +1 -0
- package/dist/tools/binaryUtils.d.ts +13 -0
- package/dist/tools/binaryUtils.js +55 -0
- package/dist/tools/binaryUtils.js.map +1 -0
- package/dist/tools/gthStatusUpdateTool.d.ts +2 -0
- package/dist/tools/gthStatusUpdateTool.js +15 -0
- package/dist/tools/gthStatusUpdateTool.js.map +1 -0
- package/dist/tools/gthWebFetchTool.d.ts +2 -0
- package/dist/tools/gthWebFetchTool.js +47 -0
- package/dist/tools/gthWebFetchTool.js.map +1 -0
- package/dist/tools/showA2UISurfaceTool.d.ts +9 -0
- package/dist/tools/showA2UISurfaceTool.js +25 -0
- package/dist/tools/showA2UISurfaceTool.js.map +1 -0
- package/dist/utils/mcpUtils.d.ts +13 -0
- package/dist/utils/mcpUtils.js +225 -0
- package/dist/utils/mcpUtils.js.map +1 -0
- package/package.json +49 -10
- package/index.js +0 -6
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module GthDevToolkit
|
|
3
|
+
*/
|
|
4
|
+
import { BaseToolkit, tool } from '@langchain/core/tools';
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { spawn } from 'child_process';
|
|
7
|
+
import path from 'node:path';
|
|
8
|
+
import { displayInfo, displayError } from '@gaunt-sloth/core/utils/consoleUtils.js';
|
|
9
|
+
import { stdout } from '@gaunt-sloth/core/utils/systemUtils.js';
|
|
10
|
+
// Helper function to create a tool with dev type
|
|
11
|
+
function createGthTool(fn, config, gthDevType) {
|
|
12
|
+
const toolInstance = tool(fn, config);
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
14
|
+
toolInstance.gthDevType = gthDevType;
|
|
15
|
+
return toolInstance;
|
|
16
|
+
}
|
|
17
|
+
// Schema definitions for built-in tools
|
|
18
|
+
const RunTestsArgsSchema = z.object({});
|
|
19
|
+
const RunLintArgsSchema = z.object({});
|
|
20
|
+
const RunBuildArgsSchema = z.object({});
|
|
21
|
+
const RunSingleTestArgsSchema = z.object({
|
|
22
|
+
testPath: z.string().describe('Relative path to the test file to run'),
|
|
23
|
+
});
|
|
24
|
+
const TEST_PATH_PLACEHOLDER = '${testPath}';
|
|
25
|
+
export default class GthDevToolkit extends BaseToolkit {
|
|
26
|
+
tools;
|
|
27
|
+
commands;
|
|
28
|
+
constructor(commands = {}) {
|
|
29
|
+
super();
|
|
30
|
+
this.commands = commands;
|
|
31
|
+
this.tools = this.createTools();
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get tools filtered by operation type
|
|
35
|
+
*/
|
|
36
|
+
getFilteredTools(allowedOperations) {
|
|
37
|
+
return this.tools.filter((tool) => {
|
|
38
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
39
|
+
const toolType = tool.gthDevType;
|
|
40
|
+
return allowedOperations.includes(toolType);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Validate parameter value to prevent security issues
|
|
45
|
+
*/
|
|
46
|
+
validateParameterValue(paramValue, paramName) {
|
|
47
|
+
// Check for absolute paths
|
|
48
|
+
if (path.isAbsolute(paramValue)) {
|
|
49
|
+
throw new Error(`Absolute paths are not allowed for parameter '${paramName}'`);
|
|
50
|
+
}
|
|
51
|
+
// Check for directory traversal attempts
|
|
52
|
+
if (paramValue.includes('..') || paramValue.includes('\\..\\') || paramValue.includes('/../')) {
|
|
53
|
+
throw new Error(`Directory traversal attempts are not allowed in parameter '${paramName}'`);
|
|
54
|
+
}
|
|
55
|
+
// Check for pipe attempts and other shell injection
|
|
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}'`);
|
|
65
|
+
}
|
|
66
|
+
// Check for null bytes
|
|
67
|
+
if (paramValue.includes('\0')) {
|
|
68
|
+
throw new Error(`Null bytes are not allowed in parameter '${paramName}'`);
|
|
69
|
+
}
|
|
70
|
+
// Normalize the path to remove any redundant separators
|
|
71
|
+
const normalizedValue = path.normalize(paramValue);
|
|
72
|
+
// Double-check after normalization
|
|
73
|
+
if (normalizedValue.includes('..')) {
|
|
74
|
+
throw new Error(`Directory traversal attempts are not allowed in parameter '${paramName}'`);
|
|
75
|
+
}
|
|
76
|
+
return normalizedValue;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Build the command for running a single test file
|
|
80
|
+
*/
|
|
81
|
+
buildSingleTestCommand(testPath) {
|
|
82
|
+
if (this.commands.run_single_test) {
|
|
83
|
+
if (this.commands.run_single_test.includes(TEST_PATH_PLACEHOLDER)) {
|
|
84
|
+
// Interpolate if placeholder is available
|
|
85
|
+
return this.commands.run_single_test.replace(TEST_PATH_PLACEHOLDER, testPath);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
// Concatenate if no placeholder
|
|
89
|
+
return `${this.commands.run_single_test} ${testPath}`;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
throw new Error('No test command configured');
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async executeCommand(command, toolName) {
|
|
97
|
+
displayInfo(`\n🔧 Executing ${toolName}: ${command}`);
|
|
98
|
+
return new Promise((resolve, reject) => {
|
|
99
|
+
const child = spawn(command, {
|
|
100
|
+
shell: true,
|
|
101
|
+
});
|
|
102
|
+
let output = '';
|
|
103
|
+
// Capture output if available (when stdio is not 'inherit')
|
|
104
|
+
if (child.stdout) {
|
|
105
|
+
child.stdout.on('data', (data) => {
|
|
106
|
+
const chunk = data.toString();
|
|
107
|
+
stdout.write(chunk);
|
|
108
|
+
output += chunk;
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
if (child.stderr) {
|
|
112
|
+
child.stderr.on('data', (data) => {
|
|
113
|
+
const chunk = data.toString();
|
|
114
|
+
stdout.write(chunk);
|
|
115
|
+
output += chunk;
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
child.on('close', (code) => {
|
|
119
|
+
if (code === 0) {
|
|
120
|
+
resolve(`Executing '${command}'...\n\n` +
|
|
121
|
+
`<COMMAND_OUTPUT>\n` +
|
|
122
|
+
output +
|
|
123
|
+
`</COMMAND_OUTPUT>\n` +
|
|
124
|
+
`\n\nCommand '${command}' completed successfully`);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
resolve(`Executing '${command}'...\n\n` +
|
|
128
|
+
`<COMMAND_OUTPUT>\n` +
|
|
129
|
+
output +
|
|
130
|
+
`</COMMAND_OUTPUT>\n` +
|
|
131
|
+
`\n\nCommand '${command}' exited with code ${code}`);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
child.on('error', (error) => {
|
|
135
|
+
const errorMsg = `Failed to execute command '${command}': ${error.message}`;
|
|
136
|
+
displayError(errorMsg);
|
|
137
|
+
reject(new Error(errorMsg));
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
createTools() {
|
|
142
|
+
const tools = [];
|
|
143
|
+
if (this.commands.run_tests) {
|
|
144
|
+
tools.push(createGthTool(async (_args) => {
|
|
145
|
+
return await this.executeCommand(this.commands.run_tests, 'run_tests');
|
|
146
|
+
}, {
|
|
147
|
+
name: 'run_tests',
|
|
148
|
+
description: 'Execute the test suite for this project. Runs the configured test command and returns the output.' +
|
|
149
|
+
`\nThe configured command is [${this.commands.run_tests}].`,
|
|
150
|
+
schema: RunTestsArgsSchema,
|
|
151
|
+
}, 'execute'));
|
|
152
|
+
}
|
|
153
|
+
if (this.commands.run_single_test) {
|
|
154
|
+
tools.push(createGthTool(async (args) => {
|
|
155
|
+
const validatedPath = this.validateParameterValue(args.testPath, 'testPath');
|
|
156
|
+
const command = this.buildSingleTestCommand(validatedPath);
|
|
157
|
+
return await this.executeCommand(command, 'run_single_test');
|
|
158
|
+
}, {
|
|
159
|
+
name: 'run_single_test',
|
|
160
|
+
description: 'Execute a single test file. Runs the configured test command with the specified test file path. ' +
|
|
161
|
+
'The test path must be relative and cannot contain directory traversal attempts or shell injection. ' +
|
|
162
|
+
`\nThe base command is [${this.commands.run_single_test}].`,
|
|
163
|
+
schema: RunSingleTestArgsSchema,
|
|
164
|
+
}, 'execute'));
|
|
165
|
+
}
|
|
166
|
+
if (this.commands.run_lint) {
|
|
167
|
+
tools.push(createGthTool(async (_args) => {
|
|
168
|
+
return await this.executeCommand(this.commands.run_lint, 'run_lint');
|
|
169
|
+
}, {
|
|
170
|
+
name: 'run_lint',
|
|
171
|
+
description: 'Run the linter on the project code. Executes the configured lint command and returns any linting errors or warnings.' +
|
|
172
|
+
`\nThe configured command is [${this.commands.run_lint}].`,
|
|
173
|
+
schema: RunLintArgsSchema,
|
|
174
|
+
}, 'execute'));
|
|
175
|
+
}
|
|
176
|
+
if (this.commands.run_build) {
|
|
177
|
+
tools.push(createGthTool(async (_args) => {
|
|
178
|
+
return await this.executeCommand(this.commands.run_build, 'run_build');
|
|
179
|
+
}, {
|
|
180
|
+
name: 'run_build',
|
|
181
|
+
description: 'Build the project. Executes the configured build command and returns the build output.' +
|
|
182
|
+
`\nThe configured command is [${this.commands.run_build}].`,
|
|
183
|
+
schema: RunBuildArgsSchema,
|
|
184
|
+
}, 'execute'));
|
|
185
|
+
}
|
|
186
|
+
return tools;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=GthDevToolkit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GthDevToolkit.js","sourceRoot":"","sources":["../../src/tools/GthDevToolkit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { BaseToolkit, StructuredToolInterface } from '@langchain/core/tools';
|
|
2
|
+
import type { BinaryFormatConfig } from '@gaunt-sloth/core/config.js';
|
|
3
|
+
export interface GthFileSystemToolkitOptions {
|
|
4
|
+
allowedDirectories?: string[];
|
|
5
|
+
aiignoreConfig?: {
|
|
6
|
+
enabled?: boolean;
|
|
7
|
+
patterns?: string[];
|
|
8
|
+
};
|
|
9
|
+
binaryFormats?: false | BinaryFormatConfig[];
|
|
10
|
+
}
|
|
11
|
+
export default class GthFileSystemToolkit extends BaseToolkit {
|
|
12
|
+
tools: StructuredToolInterface[];
|
|
13
|
+
private allowedDirectories;
|
|
14
|
+
private aiignoreConfig?;
|
|
15
|
+
private binaryFormats?;
|
|
16
|
+
constructor(options?: GthFileSystemToolkitOptions);
|
|
17
|
+
/**
|
|
18
|
+
* Get tools filtered by operation type
|
|
19
|
+
*/
|
|
20
|
+
getFilteredTools(allowedOperations: ('read' | 'write')[]): StructuredToolInterface[];
|
|
21
|
+
private normalizePath;
|
|
22
|
+
private isProtectedDirectory;
|
|
23
|
+
private expandHome;
|
|
24
|
+
private sanitizeRequestedPath;
|
|
25
|
+
private validatePath;
|
|
26
|
+
private getFileStats;
|
|
27
|
+
private searchFiles;
|
|
28
|
+
private normalizeLineEndings;
|
|
29
|
+
private createUnifiedDiff;
|
|
30
|
+
private applyFileEdits;
|
|
31
|
+
private formatSize;
|
|
32
|
+
private tailFile;
|
|
33
|
+
private headFile;
|
|
34
|
+
private createReadBinaryTool;
|
|
35
|
+
private createTools;
|
|
36
|
+
}
|