using System.Text.Json; namespace TentacleBot.Services.Tools; public class ToolRegistry { private readonly Dictionary _tools = new(); public void Register(string name, string description, Dictionary parameters, Func> handler) { _tools[name] = new ToolDefinition(name, description, parameters, handler); } public List BuildToolDefinitions() { return _tools.Values.Select(t => { var functionDef = new Dictionary { ["name"] = t.Name, ["description"] = t.Description, ["parameters"] = t.Parameters }; return (object)new Dictionary { ["type"] = "function", ["function"] = functionDef }; }).ToList(); } public async Task ExecuteAsync(string toolName, string argumentsJson) { if (!_tools.TryGetValue(toolName, out var tool)) return "Error: unknown tool"; try { return await tool.Handler(argumentsJson); } catch (Exception ex) { return $"Error executing tool '{toolName}': {ex.Message}"; } } public bool HasTool(string name) => _tools.ContainsKey(name); private record ToolDefinition( string Name, string Description, Dictionary Parameters, Func> Handler); }