Merge origin/develop and integrate browser isolation

This commit is contained in:
andreysk0304 2026-04-21 23:18:59 +03:00
parent 50589232d6
commit ebba5d04a4
13 changed files with 812 additions and 251 deletions

View file

@ -1,14 +1,23 @@
import json
import os
from urllib import error, request
from tools.browser_use_manager import (
cleanup_browser_use_runtime,
ensure_isolated_browser_runtime,
)
from tools.registry import registry
def run_browser_task(task):
def run_browser_task(task, task_id=None, honcho_session_key=None):
if not task or not str(task).strip():
return json.dumps({"success": False, "error": "Task is required"}, ensure_ascii=False)
rpc_url = os.getenv("BROWSER_USE_RPC_URL", "http://browser:8787/run")
runtime = ensure_isolated_browser_runtime(
task_id=task_id,
honcho_session_key=honcho_session_key,
)
rpc_url = runtime.get("rpc_url") or os.getenv("BROWSER_USE_RPC_URL", "http://browser:8787/run")
timeout_sec = int(os.getenv("BROWSER_USE_RPC_TIMEOUT", "900"))
payload = json.dumps({"task": task}).encode("utf-8")
req = request.Request(rpc_url, data=payload, headers={"Content-Type": "application/json"}, method="POST")
@ -16,7 +25,20 @@ def run_browser_task(task):
try:
with request.urlopen(req, timeout=timeout_sec) as resp:
body = resp.read().decode("utf-8")
try:
data = json.loads(body)
except json.JSONDecodeError:
return body
if isinstance(data, dict):
browser_view = runtime.get("browser_view")
if browser_view and not data.get("browser_view"):
data["browser_view"] = browser_view
data["isolation_mode"] = runtime.get("isolation_mode", "shared")
return json.dumps(data, ensure_ascii=False)
return body
except error.HTTPError as http_err:
body = http_err.read().decode("utf-8", errors="replace")
return json.dumps(
@ -35,11 +57,19 @@ def run_browser_task(task):
},
ensure_ascii=False,
)
finally:
try:
cleanup_browser_use_runtime(
task_id=task_id,
honcho_session_key=honcho_session_key,
)
except Exception:
pass
registry.register(
name="internet_browser",
toolset="browse_cmd",
toolset="browse_cmd",
schema={
"name": "internet_browser",
"description": (
@ -52,14 +82,17 @@ registry.register(
"type": "object",
"properties": {
"task": {
"type": "string",
"type": "string",
"description": "Подробная задача на естественном языке. Например: 'Зайди на wildberries.ru, найди черную футболку и верни цену'."
}
},
"required": ["task"]
}
},
handler=lambda args, **kw: run_browser_task(args.get("task")),
handler=lambda args, **kw: run_browser_task(
args.get("task"),
task_id=kw.get("task_id"),
honcho_session_key=kw.get("honcho_session_key"),
),
emoji="🌐",
)
)