Files
oai-web/server/tools/whitelist_tool.py
2026-04-08 12:43:24 +02:00

59 lines
2.3 KiB
Python

"""
tools/whitelist_tool.py — Web domain whitelist management for agents (async).
"""
from __future__ import annotations
from ..database import web_whitelist_store
from .base import BaseTool, ToolResult
class WhitelistTool(BaseTool):
name = "whitelist"
description = (
"Manage the Tier-1 web domain whitelist. "
"Use this when the user asks to add, remove, or list whitelisted websites. "
"Operations: list_domains, add_domain, remove_domain."
)
input_schema = {
"type": "object",
"properties": {
"operation": {
"type": "string",
"enum": ["list_domains", "add_domain", "remove_domain"],
"description": "Operation to perform",
},
"domain": {
"type": "string",
"description": "Domain to add or remove (e.g. 'nrk.no'). Required for add_domain and remove_domain.",
},
"note": {
"type": "string",
"description": "Optional description of why this domain is whitelisted.",
},
},
"required": ["operation"],
}
requires_confirmation = False
allowed_in_scheduled_tasks = True
async def execute(self, operation: str, domain: str = "", note: str = "", **kwargs) -> ToolResult:
if operation == "list_domains":
domains = await web_whitelist_store.list()
return ToolResult(success=True, data={"domains": domains, "count": len(domains)})
if operation == "add_domain":
if not domain:
return ToolResult(success=False, error="domain is required for add_domain")
await web_whitelist_store.add(domain.strip(), note)
return ToolResult(success=True, data={"added": domain.strip(), "note": note})
if operation == "remove_domain":
if not domain:
return ToolResult(success=False, error="domain is required for remove_domain")
removed = await web_whitelist_store.remove(domain.strip())
if not removed:
return ToolResult(success=False, error=f"Domain '{domain}' not found in whitelist")
return ToolResult(success=True, data={"removed": domain.strip()})
return ToolResult(success=False, error=f"Unknown operation: {operation}")