45 lines
1.3 KiB
Python
45 lines
1.3 KiB
Python
from __future__ import annotations
|
|
|
|
from opensquilla.engine.runtime import TurnRunner
|
|
from opensquilla.tools.registry import ToolRegistry
|
|
from opensquilla.tools.types import CallerKind, InteractionMode, ToolContext, ToolSpec
|
|
|
|
|
|
async def _handler() -> str:
|
|
return "ok"
|
|
|
|
|
|
def _spec(name: str) -> ToolSpec:
|
|
return ToolSpec(name=name, description=f"{name} tool", parameters={})
|
|
|
|
|
|
def test_owner_cron_tool_policy_uses_runtime_registry_names() -> None:
|
|
registry = ToolRegistry()
|
|
for name in ("session_status", "memory_search", "exec_command", "web_fetch"):
|
|
registry.register(_spec(name), _handler)
|
|
runner = TurnRunner(
|
|
provider_selector=None,
|
|
tool_registry=registry,
|
|
session_manager=object(),
|
|
config=object(),
|
|
)
|
|
ctx = ToolContext(
|
|
is_owner=True,
|
|
caller_kind=CallerKind.CRON,
|
|
interaction_mode=InteractionMode.UNATTENDED,
|
|
session_key="cron:owner:run:1",
|
|
tool_policy={
|
|
"profile": "minimal",
|
|
"also_allow": ["memory_search", "exec_command"],
|
|
"deny": ["web_fetch"],
|
|
},
|
|
)
|
|
|
|
tool_defs, _handler_fn = runner._build_tools(ctx)
|
|
names = {tool.name for tool in tool_defs}
|
|
|
|
assert "session_status" in names
|
|
assert "memory_search" in names
|
|
assert "exec_command" in names
|
|
assert "web_fetch" not in names
|