From a36c2db05cd82872ea206754741d7c7e902f27bc Mon Sep 17 00:00:00 2001 From: rob Date: Tue, 27 Jan 2026 00:16:34 -0400 Subject: [PATCH] Fix dependency parsing for dict format in tool configs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Normalize dependencies in Tool.from_dict() to handle both string and dict formats - Dict format: {name: "tts", version: "*"} → extracts just the name for Tool.dependencies - Fixes "unhashable type: dict" error in check_dependencies() This allows tools to declare dependencies with version constraints in config.yaml: dependencies: - name: tts version: "*" Co-Authored-By: Claude Opus 4.5 --- src/cmdforge/tool.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/cmdforge/tool.py b/src/cmdforge/tool.py index 5018079..5a426db 100644 --- a/src/cmdforge/tool.py +++ b/src/cmdforge/tool.py @@ -220,6 +220,16 @@ class Tool: if "source" in data: source = ToolSource.from_dict(data["source"]) + # Normalize dependencies - can be strings or dicts with name/version + raw_deps = data.get("dependencies", []) + dependencies = [] + for dep in raw_deps: + if isinstance(dep, str): + dependencies.append(dep) + elif isinstance(dep, dict) and "name" in dep: + dependencies.append(dep["name"]) + # Skip invalid entries + return cls( name=data["name"], description=data.get("description", ""), @@ -227,7 +237,7 @@ class Tool: arguments=arguments, steps=steps, output=data.get("output", "{input}"), - dependencies=data.get("dependencies", []), + dependencies=dependencies, source=source, version=data.get("version", ""), )