diff options
Diffstat (limited to 'packages/server/src/tools')
| -rw-r--r-- | packages/server/src/tools/shell.json | 18 | ||||
| -rw-r--r-- | packages/server/src/tools/shell.md | 1 | ||||
| -rw-r--r-- | packages/server/src/tools/shell.ts | 44 |
3 files changed, 63 insertions, 0 deletions
diff --git a/packages/server/src/tools/shell.json b/packages/server/src/tools/shell.json new file mode 100644 index 00000000..f1ba372e --- /dev/null +++ b/packages/server/src/tools/shell.json @@ -0,0 +1,18 @@ +{ + "type": "object", + "properties": { + "command": { + "description": "The exact bash command or sequence of commands (using ';' or '&&') to execute. Must adhere to usage guidelines. Example: 'npm install && npm run build'", + "type": "string" + }, + "description": { + "description": "Optional: A brief, user-centric explanation of what the command does and why it's being run. Used for logging and confirmation prompts. Example: 'Install project dependencies'", + "type": "string" + }, + "runInBackground": { + "description": "If true, execute the command in the background using '&'. Defaults to false. Use for servers or long tasks.", + "type": "boolean" + } + }, + "required": ["command"] +} diff --git a/packages/server/src/tools/shell.md b/packages/server/src/tools/shell.md new file mode 100644 index 00000000..ce71e42c --- /dev/null +++ b/packages/server/src/tools/shell.md @@ -0,0 +1 @@ +This is a minimal shell tool. diff --git a/packages/server/src/tools/shell.ts b/packages/server/src/tools/shell.ts new file mode 100644 index 00000000..658293b0 --- /dev/null +++ b/packages/server/src/tools/shell.ts @@ -0,0 +1,44 @@ +/** + * @license + * Copyright 2025 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +import path from 'path'; +import fs from 'fs'; +import { Config } from '../config/config.js'; +import { BaseTool, ToolResult } from './tools.js'; + +export interface ShellToolParams { + command: string; + description?: string; +} + +export class ShellTool extends BaseTool<ShellToolParams, ToolResult> { + static Name: string = 'execute_bash_command'; + private readonly rootDirectory: string; + private readonly config: Config; + + constructor(rootDirectory: string, config: Config) { + const toolDisplayName = 'Shell'; + const descriptionUrl = new URL('shell.md', import.meta.url); + const toolDescription = fs.readFileSync(descriptionUrl, 'utf-8'); + const schemaUrl = new URL('shell.json', import.meta.url); + const toolParameterSchema = JSON.parse(fs.readFileSync(schemaUrl, 'utf-8')); + super( + ShellTool.Name, + toolDisplayName, + toolDescription, + toolParameterSchema, + ); + this.config = config; + this.rootDirectory = path.resolve(rootDirectory); + } + + async execute(_params: ShellToolParams): Promise<ToolResult> { + return { + llmContent: 'hello', + returnDisplay: 'hello', + }; + } +} |
