write agent.py
This commit is contained in:
17
agent.py
17
agent.py
@@ -436,23 +436,23 @@ class SeleniumbaseWebsiteScraper(A2AAgent[SeleniumbaseWebsiteScraperConfig, NoAu
|
|||||||
proposed_selectors = decision.get("selectors") or {}
|
proposed_selectors = decision.get("selectors") or {}
|
||||||
confidence = float(decision.get("confidence") or 0.0)
|
confidence = float(decision.get("confidence") or 0.0)
|
||||||
|
|
||||||
# Enforce safety: same-origin only, and only allow selector updates if permitted
|
# Enforce safety: allowed_domains and same-origin only
|
||||||
if not same_origin_safeguard(start_url, next_url):
|
if not _allowed_origin(next_url):
|
||||||
decisions.append({
|
decisions.append({
|
||||||
"iteration": iteration,
|
"step": step,
|
||||||
"action": "stop",
|
"action": "stop",
|
||||||
"reason": "planner suggested cross-origin URL; stopping for safety",
|
"reason": "planner suggested URL outside allowed domains; stopping",
|
||||||
"confidence": confidence,
|
"confidence": confidence,
|
||||||
})
|
})
|
||||||
break
|
break
|
||||||
|
|
||||||
if action == "stop":
|
if action == "stop":
|
||||||
decisions.append({"iteration": iteration, "action": "stop", "reason": reason, "confidence": confidence})
|
decisions.append({"step": step, "action": "stop", "reason": reason, "confidence": confidence})
|
||||||
break
|
break
|
||||||
|
|
||||||
if action != "scrape":
|
if action != "scrape":
|
||||||
decisions.append({
|
decisions.append({
|
||||||
"iteration": iteration,
|
"step": step,
|
||||||
"action": "stop",
|
"action": "stop",
|
||||||
"reason": "planner returned unknown action",
|
"reason": "planner returned unknown action",
|
||||||
"confidence": confidence,
|
"confidence": confidence,
|
||||||
@@ -461,8 +461,7 @@ class SeleniumbaseWebsiteScraper(A2AAgent[SeleniumbaseWebsiteScraperConfig, NoAu
|
|||||||
|
|
||||||
# Adopt next plan
|
# Adopt next plan
|
||||||
current_url = next_url
|
current_url = next_url
|
||||||
if allow_selector_updates and isinstance(proposed_selectors, dict) and proposed_selectors:
|
if isinstance(proposed_selectors, dict) and proposed_selectors:
|
||||||
# ensure keys/values are strings
|
|
||||||
safe_map: dict[str, str] = {}
|
safe_map: dict[str, str] = {}
|
||||||
for k, v in proposed_selectors.items():
|
for k, v in proposed_selectors.items():
|
||||||
k2 = str(k).strip()
|
k2 = str(k).strip()
|
||||||
@@ -472,7 +471,7 @@ class SeleniumbaseWebsiteScraper(A2AAgent[SeleniumbaseWebsiteScraperConfig, NoAu
|
|||||||
if safe_map:
|
if safe_map:
|
||||||
current_selectors = safe_map
|
current_selectors = safe_map
|
||||||
decisions.append({
|
decisions.append({
|
||||||
"iteration": iteration,
|
"step": step,
|
||||||
"action": "scrape",
|
"action": "scrape",
|
||||||
"reason": reason or "refining selectors/pagination",
|
"reason": reason or "refining selectors/pagination",
|
||||||
"confidence": confidence,
|
"confidence": confidence,
|
||||||
|
|||||||
Reference in New Issue
Block a user