from dataclasses import dataclass from typing import Any, Callable ToolContext = dict[str, Any] ToolArgs = dict[str, Any] ToolRunner = Callable[[ToolArgs, ToolContext], dict[str, Any]] @dataclass(frozen=True) class ToolSpec: name: str description: str input_schema: dict[str, Any] run: ToolRunner enabled: bool = True cost_level: str = "low" def prompt_block(self) -> str: enabled_text = "enabled" if self.enabled else "disabled" return ( f"- {self.name} ({enabled_text}, cost={self.cost_level})\n" f" description: {self.description}\n" f" args_schema: {self.input_schema}" )