From dbd6f12dc0fcb45879cf54d5afb4b1554af7d574 Mon Sep 17 00:00:00 2001 From: a2a-cloud Date: Mon, 8 Jun 2026 22:49:36 +0000 Subject: [PATCH] write agent.py --- agent.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/agent.py b/agent.py index afd19e4..54105d7 100644 --- a/agent.py +++ b/agent.py @@ -436,23 +436,23 @@ class SeleniumbaseWebsiteScraper(A2AAgent[SeleniumbaseWebsiteScraperConfig, NoAu proposed_selectors = decision.get("selectors") or {} confidence = float(decision.get("confidence") or 0.0) - # Enforce safety: same-origin only, and only allow selector updates if permitted - if not same_origin_safeguard(start_url, next_url): + # Enforce safety: allowed_domains and same-origin only + if not _allowed_origin(next_url): decisions.append({ - "iteration": iteration, + "step": step, "action": "stop", - "reason": "planner suggested cross-origin URL; stopping for safety", + "reason": "planner suggested URL outside allowed domains; stopping", "confidence": confidence, }) break if action == "stop": - decisions.append({"iteration": iteration, "action": "stop", "reason": reason, "confidence": confidence}) + decisions.append({"step": step, "action": "stop", "reason": reason, "confidence": confidence}) break if action != "scrape": decisions.append({ - "iteration": iteration, + "step": step, "action": "stop", "reason": "planner returned unknown action", "confidence": confidence, @@ -461,8 +461,7 @@ class SeleniumbaseWebsiteScraper(A2AAgent[SeleniumbaseWebsiteScraperConfig, NoAu # Adopt next plan current_url = next_url - if allow_selector_updates and isinstance(proposed_selectors, dict) and proposed_selectors: - # ensure keys/values are strings + if isinstance(proposed_selectors, dict) and proposed_selectors: safe_map: dict[str, str] = {} for k, v in proposed_selectors.items(): k2 = str(k).strip() @@ -472,7 +471,7 @@ class SeleniumbaseWebsiteScraper(A2AAgent[SeleniumbaseWebsiteScraperConfig, NoAu if safe_map: current_selectors = safe_map decisions.append({ - "iteration": iteration, + "step": step, "action": "scrape", "reason": reason or "refining selectors/pagination", "confidence": confidence,