From 0323a39afbae69a682f5eefe9929b8bf69108ad5 Mon Sep 17 00:00:00 2001 From: rob Date: Mon, 20 Jul 2026 02:58:46 -0300 Subject: [PATCH] M8.0: Add tool-level input_schema and output_schema contracts to Tool --- src/cmdforge/tool.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/cmdforge/tool.py b/src/cmdforge/tool.py index f069d8a..d7fc158 100644 --- a/src/cmdforge/tool.py +++ b/src/cmdforge/tool.py @@ -431,6 +431,8 @@ class Tool: source: Optional[ToolSource] = None # Attribution for imported/external tools version: str = "" # Tool version 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) @classmethod @@ -483,6 +485,8 @@ class Tool: source=source, version=data.get("version", ""), visibility=data.get("visibility", "public"), + input_schema=data.get("input_schema"), + output_schema=data.get("output_schema"), ) def to_dict(self) -> dict: @@ -498,6 +502,10 @@ class Tool: # Only include visibility if it's not the default if self.visibility and self.visibility != "public": 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 if self.source: d["source"] = self.source.to_dict()