Add M7.6 provider tool access control and M7.7 agent delegation for ToolStep
This commit is contained in:
@@ -784,3 +784,29 @@ class TestProviderDiscovery:
|
||||
assert len({item["name"] for item in models}) == 2
|
||||
assert models[0]["name"] == "ollama-hermes4-3-latest"
|
||||
assert models[1]["name"] == "ollama-hermes4-3-q4-k-m"
|
||||
|
||||
|
||||
class TestProviderAccessControl:
|
||||
def test_tools_allowlist_defaults_to_none(self):
|
||||
provider = Provider("test", "cmd")
|
||||
assert provider.tools is None
|
||||
assert provider.mcp_servers is None
|
||||
|
||||
def test_tools_allowlist_roundtrip(self):
|
||||
provider = Provider("test", "cmd", tools=["tool-a", "tool-b"])
|
||||
d = provider.to_dict()
|
||||
assert d["tools"] == ["tool-a", "tool-b"]
|
||||
restored = Provider.from_dict(d)
|
||||
assert restored.tools == ["tool-a", "tool-b"]
|
||||
|
||||
def test_mcp_servers_roundtrip(self):
|
||||
provider = Provider("test", "cmd", mcp_servers=["filesystem"])
|
||||
d = provider.to_dict()
|
||||
assert d["mcp_servers"] == ["filesystem"]
|
||||
restored = Provider.from_dict(d)
|
||||
assert restored.mcp_servers == ["filesystem"]
|
||||
|
||||
def test_tools_not_in_dict_when_none(self):
|
||||
provider = Provider("test", "cmd")
|
||||
assert "tools" not in provider.to_dict()
|
||||
assert "mcp_servers" not in provider.to_dict()
|
||||
|
||||
+38
-1
@@ -8,7 +8,7 @@ import pytest
|
||||
import yaml
|
||||
|
||||
from cmdforge.tool import (
|
||||
Tool, ToolArgument, PromptStep, CodeStep,
|
||||
Tool, ToolArgument, PromptStep, CodeStep, ToolStep,
|
||||
validate_tool_name, load_tool, save_tool, delete_tool,
|
||||
list_tools, tool_exists, create_wrapper_script,
|
||||
DEFAULT_CATEGORIES
|
||||
@@ -579,3 +579,40 @@ class TestDefaultCategories:
|
||||
assert "Developer" in DEFAULT_CATEGORIES
|
||||
assert "Data" in DEFAULT_CATEGORIES
|
||||
assert "Other" in DEFAULT_CATEGORIES
|
||||
|
||||
|
||||
class TestAgentContext:
|
||||
def test_toolstep_profile_roundtrip(self):
|
||||
step = ToolStep(tool="my-tool", output_var="out", profile="architect")
|
||||
d = step.to_dict()
|
||||
assert d["profile"] == "architect"
|
||||
restored = ToolStep.from_dict(d)
|
||||
assert restored.profile == "architect"
|
||||
|
||||
def test_toolstep_skills_roundtrip(self):
|
||||
step = ToolStep(tool="my-tool", output_var="out", skills=["python"])
|
||||
d = step.to_dict()
|
||||
assert d["skills"] == ["python"]
|
||||
restored = ToolStep.from_dict(d)
|
||||
assert restored.skills == ["python"]
|
||||
|
||||
def test_toolstep_empty_skills_serialized(self):
|
||||
step = ToolStep(tool="my-tool", output_var="out", skills=[])
|
||||
d = step.to_dict()
|
||||
assert d["skills"] == []
|
||||
restored = ToolStep.from_dict(d)
|
||||
assert restored.skills == []
|
||||
|
||||
def test_toolstep_no_skills_not_serialized(self):
|
||||
step = ToolStep(tool="my-tool", output_var="out")
|
||||
d = step.to_dict()
|
||||
assert "skills" not in d
|
||||
assert "profile" not in d
|
||||
|
||||
def test_promptstep_skills_roundtrip(self):
|
||||
step = PromptStep(
|
||||
prompt="Test", provider="claude", output_var="out",
|
||||
skills=["python"],
|
||||
)
|
||||
restored = PromptStep.from_dict(step.to_dict())
|
||||
assert restored.skills == ["python"]
|
||||
|
||||
Reference in New Issue
Block a user