feat: agent tool definitions (browser, flows, doc) and registry
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
from auto_reverse.doc.engine import DocEngine
|
||||
from auto_reverse.models import CapturedFlow
|
||||
from auto_reverse.store import FlowStore, ScopeFilter
|
||||
from auto_reverse.tools import build_registry
|
||||
|
||||
|
||||
class FakeBrowser:
|
||||
def navigate(self, url):
|
||||
return {"url": url, "title": "T", "elements": []}
|
||||
|
||||
def click(self, selector):
|
||||
return {"url": "u", "title": "T", "elements": []}
|
||||
|
||||
def type_text(self, selector, text):
|
||||
return {"url": "u", "title": "T", "elements": []}
|
||||
|
||||
def snapshot(self):
|
||||
return {"url": "u", "title": "T", "elements": []}
|
||||
|
||||
|
||||
def _store_with_endpoint(tmp_path):
|
||||
store = FlowStore(ScopeFilter(target_hosts={"ex.com"}))
|
||||
store.ingest(CapturedFlow(
|
||||
method="GET", host="ex.com", path="/api/users", query={}, req_headers={},
|
||||
req_body=None, status=200,
|
||||
resp_headers={"content-type": "application/json"}, resp_body=b"[]",
|
||||
timestamp=0.0,
|
||||
))
|
||||
engine = DocEngine(store, out_dir=tmp_path, title="x", use_llm=False)
|
||||
return store, engine
|
||||
|
||||
|
||||
def test_registry_has_expected_tools(tmp_path):
|
||||
store, engine = _store_with_endpoint(tmp_path)
|
||||
reg = build_registry(FakeBrowser(), store, engine)
|
||||
names = {schema["name"] for schema, _ in reg.values()}
|
||||
assert {"browser_navigate", "browser_click", "flows_search", "doc_document"} <= names
|
||||
|
||||
|
||||
def test_flows_search_handler_returns_matches(tmp_path):
|
||||
store, engine = _store_with_endpoint(tmp_path)
|
||||
reg = build_registry(FakeBrowser(), store, engine)
|
||||
_, handler = reg["flows_search"]
|
||||
result = handler({"query": "users"})
|
||||
assert any("/api/users" in ep["path"] for ep in result["endpoints"])
|
||||
|
||||
|
||||
def test_browser_navigate_handler(tmp_path):
|
||||
store, engine = _store_with_endpoint(tmp_path)
|
||||
reg = build_registry(FakeBrowser(), store, engine)
|
||||
_, handler = reg["browser_navigate"]
|
||||
result = handler({"url": "http://x"})
|
||||
assert result["url"] == "http://x"
|
||||
Reference in New Issue
Block a user