diff options
| author | Jaana Dogan <[email protected]> | 2025-04-21 12:59:31 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-04-21 12:59:31 -0700 |
| commit | baf39042c8631d53dfac4e57148404749cde14b3 (patch) | |
| tree | 49fcfe890714b80d0f8bc5cace6869128ea25687 /packages/server/src/tools/tool-registry.ts | |
| parent | 2571e071751681338518c2bf65f25ad32b2f71f4 (diff) | |
Remove duplicate CLI tools module, remove the global tool registry (#89)
Diffstat (limited to 'packages/server/src/tools/tool-registry.ts')
| -rw-r--r-- | packages/server/src/tools/tool-registry.ts | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/packages/server/src/tools/tool-registry.ts b/packages/server/src/tools/tool-registry.ts new file mode 100644 index 00000000..387a7d29 --- /dev/null +++ b/packages/server/src/tools/tool-registry.ts @@ -0,0 +1,72 @@ +/** + * @license + * Copyright 2025 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +import { ToolListUnion, FunctionDeclaration } from '@google/genai'; +import { Tool } from './tools.js'; + +export class ToolRegistry { + private tools: Map<string, Tool> = new Map(); + + /** + * Registers a tool definition. + * @param tool - The tool object containing schema and execution logic. + */ + registerTool(tool: Tool): void { + if (this.tools.has(tool.name)) { + // Decide on behavior: throw error, log warning, or allow overwrite + console.warn( + `Tool with name "${tool.name}" is already registered. Overwriting.`, + ); + } + this.tools.set(tool.name, tool); + } + + /** + * Retrieves the list of tool schemas (FunctionDeclaration array). + * Extracts the declarations from the ToolListUnion structure. + * @returns An array of FunctionDeclarations. + */ + getFunctionDeclarations(): FunctionDeclaration[] { + const declarations: FunctionDeclaration[] = []; + this.tools.forEach((tool) => { + declarations.push(tool.schema); + }); + return declarations; + } + + /** + * Deprecated/Internal? Retrieves schemas in the ToolListUnion format. + * Kept for reference, prefer getFunctionDeclarations. + */ + getToolSchemas(): ToolListUnion { + const declarations = this.getFunctionDeclarations(); + if (declarations.length === 0) { + return []; + } + return [{ functionDeclarations: declarations }]; + } + + /** + * Returns an array of all registered tool instances. + */ + getAllTools(): Tool[] { + return Array.from(this.tools.values()); + } + + /** + * Optional: Get a list of registered tool names. + */ + listAvailableTools(): string[] { + return Array.from(this.tools.keys()); + } + + /** + * Get the definition of a specific tool. + */ + getTool(name: string): Tool | undefined { + return this.tools.get(name); + } +} |
