feat: browser-control server on host (real input) + remote-bot routing + ignore env backups
- control-server.mjs runs chrome-control.mjs LOCALLY on the browser host, so a remote bot's controlBrowser (BROWSER_CONTROL_URL) drives real xdotool input on THIS screen instead of the bot machine. Published on the LAN. - controlBrowser tool posts to BROWSER_CONTROL_URL when set, else runs locally. - Drop hard depends_on ollama so a browser-host doesn't start Ollama. - gitignore .env.bak*/*.bak (a backup with tokens had been left untracked).
This commit is contained in:
@@ -101,15 +101,30 @@ class ControlBrowserTool(Tool):
|
||||
debug_log(f" 🖱️ controlBrowser {command[:120]}", "tools")
|
||||
# Human-input actions need time for the visible cursor move + char typing.
|
||||
timeout = 25 if action in _READ_ACTIONS else 90
|
||||
# Split deployment: when the browser (Chrome + X + xdotool) lives on a
|
||||
# different machine, send the command to its control-server so the REAL
|
||||
# input lands on that host's screen. Otherwise run chrome-control.mjs
|
||||
# locally (all-in-one / browser-host layout).
|
||||
control_url = os.environ.get("BROWSER_CONTROL_URL", "").strip()
|
||||
try:
|
||||
proc = subprocess.run(
|
||||
["node", str(_NODE_SCRIPT), command],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=timeout,
|
||||
env={**os.environ, "CDP_PORT": os.environ.get("CDP_PORT", "9222")},
|
||||
)
|
||||
data = json.loads((proc.stdout or "").strip() or "{}")
|
||||
if control_url:
|
||||
import urllib.request
|
||||
req = urllib.request.Request(
|
||||
control_url.rstrip("/") + "/control",
|
||||
data=command.encode("utf-8"),
|
||||
headers={"Content-Type": "application/json"},
|
||||
)
|
||||
with urllib.request.urlopen(req, timeout=timeout) as resp:
|
||||
data = json.loads((resp.read().decode("utf-8") or "").strip() or "{}")
|
||||
else:
|
||||
proc = subprocess.run(
|
||||
["node", str(_NODE_SCRIPT), command],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=timeout,
|
||||
env={**os.environ, "CDP_PORT": os.environ.get("CDP_PORT", "9222")},
|
||||
)
|
||||
data = json.loads((proc.stdout or "").strip() or "{}")
|
||||
except Exception as e:
|
||||
return ToolExecutionResult(success=False, reply_text=f"브라우저 제어에 실패했습니다: {e}")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user