M8.0: Add tool-level input_schema and output_schema contracts to Tool

This commit is contained in:
rob 2026-07-20 02:58:46 -03:00
parent 23ac54f5c8
commit 0323a39afb
1 changed files with 8 additions and 0 deletions

View File

@ -431,6 +431,8 @@ class Tool:
source: Optional[ToolSource] = None # Attribution for imported/external tools source: Optional[ToolSource] = None # Attribution for imported/external tools
version: str = "" # Tool version version: str = "" # Tool version
visibility: str = "public" # "public", "private", or "unlisted" visibility: str = "public" # "public", "private", or "unlisted"
input_schema: Optional[dict] = None # JSON Schema for tool input contract
output_schema: Optional[dict] = None # JSON Schema for tool output contract
path: Optional[Path] = None # Path to config.yaml (set by load_tool) path: Optional[Path] = None # Path to config.yaml (set by load_tool)
@classmethod @classmethod
@ -483,6 +485,8 @@ class Tool:
source=source, source=source,
version=data.get("version", ""), version=data.get("version", ""),
visibility=data.get("visibility", "public"), visibility=data.get("visibility", "public"),
input_schema=data.get("input_schema"),
output_schema=data.get("output_schema"),
) )
def to_dict(self) -> dict: def to_dict(self) -> dict:
@ -498,6 +502,10 @@ class Tool:
# Only include visibility if it's not the default # Only include visibility if it's not the default
if self.visibility and self.visibility != "public": if self.visibility and self.visibility != "public":
d["visibility"] = self.visibility d["visibility"] = self.visibility
if self.input_schema:
d["input_schema"] = self.input_schema
if self.output_schema:
d["output_schema"] = self.output_schema
# Include source attribution if present # Include source attribution if present
if self.source: if self.source:
d["source"] = self.source.to_dict() d["source"] = self.source.to_dict()