summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/core/src/tools/shell.test.ts40
-rw-r--r--packages/core/src/tools/shell.ts46
2 files changed, 72 insertions, 14 deletions
diff --git a/packages/core/src/tools/shell.test.ts b/packages/core/src/tools/shell.test.ts
index 96ff49a1..1f469ede 100644
--- a/packages/core/src/tools/shell.test.ts
+++ b/packages/core/src/tools/shell.test.ts
@@ -391,6 +391,46 @@ describe('ShellTool', () => {
expect(() => shellTool.build({ command: '' })).toThrow();
});
});
+
+ describe('getDescription', () => {
+ it('should return the windows description when on windows', () => {
+ vi.mocked(os.platform).mockReturnValue('win32');
+ const shellTool = new ShellTool(mockConfig);
+ expect(shellTool.description)
+ .toEqual(`This tool executes a given shell command as \`cmd.exe /c <command>\`. Command can start background processes using \`start /b\`.
+
+ 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)\``);
+ });
+
+ it('should return the non-windows description when not on windows', () => {
+ vi.mocked(os.platform).mockReturnValue('linux');
+ const shellTool = new ShellTool(mockConfig);
+ expect(shellTool.description)
+ .toEqual(`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)\``);
+ });
+ });
});
describe('build', () => {
diff --git a/packages/core/src/tools/shell.ts b/packages/core/src/tools/shell.ts
index 5b01a82f..8db66339 100644
--- a/packages/core/src/tools/shell.ts
+++ b/packages/core/src/tools/shell.ts
@@ -293,18 +293,8 @@ class ShellToolInvocation extends BaseToolInvocation<
}
}
-export class ShellTool extends BaseDeclarativeTool<
- ShellToolParams,
- ToolResult
-> {
- static Name: string = 'run_shell_command';
- private allowlist: Set<string> = new Set();
-
- constructor(private readonly config: Config) {
- super(
- ShellTool.Name,
- 'Shell',
- `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\`.
+function getShellToolDescription(): string {
+ const returnedInfo = `
The following information is returned:
@@ -316,14 +306,42 @@ export class ShellTool extends BaseDeclarativeTool<
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)\``,
+ Process Group PGID: Process group started or \`(none)\``;
+
+ if (os.platform() === 'win32') {
+ return `This tool executes a given shell command as \`cmd.exe /c <command>\`. Command can start background processes using \`start /b\`.${returnedInfo}`;
+ } else {
+ return `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\`.${returnedInfo}`;
+ }
+}
+
+function getCommandDescription(): string {
+ if (os.platform() === 'win32') {
+ return 'Exact command to execute as `cmd.exe /c <command>`';
+ } else {
+ return 'Exact bash command to execute as `bash -c <command>`';
+ }
+}
+
+export class ShellTool extends BaseDeclarativeTool<
+ ShellToolParams,
+ ToolResult
+> {
+ static Name: string = 'run_shell_command';
+ private allowlist: Set<string> = new Set();
+
+ constructor(private readonly config: Config) {
+ super(
+ ShellTool.Name,
+ 'Shell',
+ getShellToolDescription(),
Kind.Execute,
{
type: 'object',
properties: {
command: {
type: 'string',
- description: 'Exact bash command to execute as `bash -c <command>`',
+ description: getCommandDescription(),
},
description: {
type: 'string',