[eric] browser: honor the user's selected browser card instead of spawning a new one (selection now reaches sub-agent dispatch + is claimed for the task)

This commit is contained in:
ciregenz
2026-06-12 17:31:46 -07:00
parent 23d8247778
commit 5cf6e2a4b1
2 changed files with 18 additions and 1 deletions
+8 -1
View File
@@ -1153,7 +1153,14 @@ class AgentManager:
os.path.dirname(__file__), "browser_agent_mcp_server.py"
)
backend_port = os.environ.get("OPENSWARM_PORT", "8324")
pre_selected_bids = self._get_pre_selected_browser_ids(session.dashboard_id)
# The browser the user picked in select-mode must be driven, not duplicated.
# Put their selection FIRST so the dispatch claims it for the task; keep the
# rest of the dashboard's cards in the list so their host/no-renavigate
# semantics still hold. Without the user's selection here the sub-agent fell
# back to host-based auto-create and opened its own browser.
_user_sel = [b for b in (selected_browser_ids or []) if b]
_all_bids = self._get_pre_selected_browser_ids(session.dashboard_id)
pre_selected_bids = _user_sel + [b for b in _all_bids if b not in _user_sel]
from backend.auth import get_auth_token as _get_auth_token
_auth_tok = _get_auth_token()
mcp_servers["openswarm-browser-agent"] = {
@@ -2273,6 +2273,16 @@ async def run_browser_agents(
pre_selected = set(pre_selected_browser_ids or [])
# The user explicitly picked a browser via select-mode, so that card must be driven
# instead of spawning a fresh one. The model often omits browser_id when calling the
# tool, which used to fall through to host-based auto-create (the "it always opens its
# own browser" bug); here we hand each unclaimed selected card to the next task that
# named none, BEFORE the parallel dispatch so it can't race the card-pick lock.
_unclaimed = [b for b in (pre_selected_browser_ids or []) if b]
for _t in tasks:
if not _t.get("browser_id") and _unclaimed:
_t["browser_id"] = _unclaimed.pop(0)
async def _run_one(task_def: dict) -> dict:
browser_id = task_def.get("browser_id", "")
task_text = task_def.get("task", "")