Inline the description and schema of the shell tool in the source (#1709)
This commit is contained in:
parent
ad7839ea4c
commit
25cdf9b762
|
@ -1,18 +0,0 @@
|
||||||
{
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"command": {
|
|
||||||
"description": "Exact bash command to execute as `bash -c <command>`",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"description": {
|
|
||||||
"description": "Brief description of the command for the user. Be specific and concise. Ideally a single sentence. Can be up to 3 sentences for clarity. No line breaks.",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"directory": {
|
|
||||||
"description": "(OPTIONAL) Directory to run the command in, if not the project root directory. Must be relative to the project root directory and must already exist.",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["command"]
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
This tool executes a given shell command as `bash -c <command>`.
|
|
||||||
Command can start background processes using `&`.
|
|
||||||
Command is executed as a subprocess that leads its own process group.
|
|
||||||
Command process group can be terminated as `kill -- -PGID` or signaled as `kill -s SIGNAL -- -PGID`.
|
|
||||||
|
|
||||||
The following information is returned:
|
|
||||||
|
|
||||||
Command: Executed command.
|
|
||||||
Directory: Directory (relative to project root) where command was executed, or `(root)`.
|
|
||||||
Stdout: Output on stdout stream. Can be `(empty)` or partial on error and for any unwaited background processes.
|
|
||||||
Stderr: Output on stderr stream. Can be `(empty)` or partial on error and for any unwaited background processes.
|
|
||||||
Error: Error or `(none)` if no error was reported for the subprocess.
|
|
||||||
Exit Code: Exit code or `(none)` if terminated by signal.
|
|
||||||
Signal: Signal number or `(none)` if no signal was received.
|
|
||||||
Background PIDs: List of background processes started or `(none)`.
|
|
||||||
Process Group PGID: Process group started or `(none)`
|
|
|
@ -34,35 +34,42 @@ export class ShellTool extends BaseTool<ShellToolParams, ToolResult> {
|
||||||
private whitelist: Set<string> = new Set();
|
private whitelist: Set<string> = new Set();
|
||||||
|
|
||||||
constructor(private readonly config: Config) {
|
constructor(private readonly config: Config) {
|
||||||
const toolDisplayName = 'Shell';
|
|
||||||
|
|
||||||
let toolDescription: string;
|
|
||||||
let toolParameterSchema: Record<string, unknown>;
|
|
||||||
|
|
||||||
try {
|
|
||||||
const descriptionUrl = new URL('shell.md', import.meta.url);
|
|
||||||
toolDescription = fs.readFileSync(descriptionUrl, 'utf-8');
|
|
||||||
const schemaUrl = new URL('shell.json', import.meta.url);
|
|
||||||
toolParameterSchema = JSON.parse(fs.readFileSync(schemaUrl, 'utf-8'));
|
|
||||||
} catch {
|
|
||||||
// Fallback with minimal descriptions for tests when file reading fails
|
|
||||||
toolDescription = 'Execute shell commands';
|
|
||||||
toolParameterSchema = {
|
|
||||||
type: 'object',
|
|
||||||
properties: {
|
|
||||||
command: { type: 'string', description: 'Command to execute' },
|
|
||||||
description: { type: 'string', description: 'Command description' },
|
|
||||||
directory: { type: 'string', description: 'Working directory' },
|
|
||||||
},
|
|
||||||
required: ['command'],
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
super(
|
super(
|
||||||
ShellTool.Name,
|
ShellTool.Name,
|
||||||
toolDisplayName,
|
'Shell',
|
||||||
toolDescription,
|
`This tool executes a given shell command as \`bash -c <command>\`. Command can start background processes using \`&\`. Command is executed as a subprocess that leads its own process group. Command process group can be terminated as \`kill -- -PGID\` or signaled as \`kill -s SIGNAL -- -PGID\`.
|
||||||
toolParameterSchema,
|
|
||||||
|
The following information is returned:
|
||||||
|
|
||||||
|
Command: Executed command.
|
||||||
|
Directory: Directory (relative to project root) where command was executed, or \`(root)\`.
|
||||||
|
Stdout: Output on stdout stream. Can be \`(empty)\` or partial on error and for any unwaited background processes.
|
||||||
|
Stderr: Output on stderr stream. Can be \`(empty)\` or partial on error and for any unwaited background processes.
|
||||||
|
Error: Error or \`(none)\` if no error was reported for the subprocess.
|
||||||
|
Exit Code: Exit code or \`(none)\` if terminated by signal.
|
||||||
|
Signal: Signal number or \`(none)\` if no signal was received.
|
||||||
|
Background PIDs: List of background processes started or \`(none)\`.
|
||||||
|
Process Group PGID: Process group started or \`(none)\``,
|
||||||
|
{
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
command: {
|
||||||
|
type: 'string',
|
||||||
|
description: 'Exact bash command to execute as `bash -c <command>`',
|
||||||
|
},
|
||||||
|
description: {
|
||||||
|
type: 'string',
|
||||||
|
description:
|
||||||
|
'Brief description of the command for the user. Be specific and concise. Ideally a single sentence. Can be up to 3 sentences for clarity. No line breaks.',
|
||||||
|
},
|
||||||
|
directory: {
|
||||||
|
type: 'string',
|
||||||
|
description:
|
||||||
|
'(OPTIONAL) Directory to run the command in, if not the project root directory. Must be relative to the project root directory and must already exist.',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
required: ['command'],
|
||||||
|
},
|
||||||
false, // output is not markdown
|
false, // output is not markdown
|
||||||
true, // output can be updated
|
true, // output can be updated
|
||||||
);
|
);
|
||||||
|
|
|
@ -31,16 +31,6 @@ if (!existsSync(bundleDir)) {
|
||||||
mkdirSync(bundleDir);
|
mkdirSync(bundleDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy specific shell files to the root of the bundle directory
|
|
||||||
copyFileSync(
|
|
||||||
join(root, 'packages/core/src/tools/shell.md'),
|
|
||||||
join(bundleDir, 'shell.md'),
|
|
||||||
);
|
|
||||||
copyFileSync(
|
|
||||||
join(root, 'packages/core/src/tools/shell.json'),
|
|
||||||
join(bundleDir, 'shell.json'),
|
|
||||||
);
|
|
||||||
|
|
||||||
// Find and copy all .sb files from packages to the root of the bundle directory
|
// Find and copy all .sb files from packages to the root of the bundle directory
|
||||||
const sbFiles = glob.sync('packages/**/*.sb', { cwd: root });
|
const sbFiles = glob.sync('packages/**/*.sb', { cwd: root });
|
||||||
for (const file of sbFiles) {
|
for (const file of sbFiles) {
|
||||||
|
|
Loading…
Reference in New Issue