diff options
Diffstat (limited to 'packages/core/src/prompts/prompt-registry.ts')
| -rw-r--r-- | packages/core/src/prompts/prompt-registry.ts | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/packages/core/src/prompts/prompt-registry.ts b/packages/core/src/prompts/prompt-registry.ts new file mode 100644 index 00000000..56699130 --- /dev/null +++ b/packages/core/src/prompts/prompt-registry.ts @@ -0,0 +1,56 @@ +/** + * @license + * Copyright 2025 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +import { DiscoveredMCPPrompt } from '../tools/mcp-client.js'; + +export class PromptRegistry { + private prompts: Map<string, DiscoveredMCPPrompt> = new Map(); + + /** + * Registers a prompt definition. + * @param prompt - The prompt object containing schema and execution logic. + */ + registerPrompt(prompt: DiscoveredMCPPrompt): void { + if (this.prompts.has(prompt.name)) { + const newName = `${prompt.serverName}_${prompt.name}`; + console.warn( + `Prompt with name "${prompt.name}" is already registered. Renaming to "${newName}".`, + ); + this.prompts.set(newName, { ...prompt, name: newName }); + } else { + this.prompts.set(prompt.name, prompt); + } + } + + /** + * Returns an array of all registered and discovered prompt instances. + */ + getAllPrompts(): DiscoveredMCPPrompt[] { + return Array.from(this.prompts.values()).sort((a, b) => + a.name.localeCompare(b.name), + ); + } + + /** + * Get the definition of a specific prompt. + */ + getPrompt(name: string): DiscoveredMCPPrompt | undefined { + return this.prompts.get(name); + } + + /** + * Returns an array of prompts registered from a specific MCP server. + */ + getPromptsByServer(serverName: string): DiscoveredMCPPrompt[] { + const serverPrompts: DiscoveredMCPPrompt[] = []; + for (const prompt of this.prompts.values()) { + if (prompt.serverName === serverName) { + serverPrompts.push(prompt); + } + } + return serverPrompts.sort((a, b) => a.name.localeCompare(b.name)); + } +} |
