Skip to content

[Bug]: In-app Browser opens a new tab for every navigation and never reuses or closes one — the tab strip fills with identical duplicate tabs #596

Open

Description

@NkAntony777

What happens

Using the in-app Browser (right-side FilePanel) in a Desktop session, every page visit appends a new tab. Nothing reuses or closes a tab, so after a few iterations the tab strip is full of identical entries with the same title and the same URL.

On my machine (3.1.10.145, Windows) the persisted tab registry currently holds:

session A: 9 tabs
  [0] 合板预检 · Conform Pre-flight  http://127.0.0.1:<port>/index.html#/report
  [1] 合板预检 · Conform Pre-flight  http://127.0.0.1:<port>/index.html#/report
  [2] 合板预检 · Conform Pre-flight  http://127.0.0.1:<port>/index.html#/report
  [3] 合板预检 · Conform Pre-flight  http://127.0.0.1:<port>/index.html#/report   <-- same URL x4
  [4] 合板预检 · Conform Pre-flight  http://127.0.0.1:<port2>/index.html#/report
  [5] 合板预检 · Conform Pre-flight  http://127.0.0.1:<port2>/index.html#/exec
  [6] 合板预检 · Conform Pre-flight  http://127.0.0.1:<port3>/index.html#/project
  [7] 合板预检 · Conform Pre-flight  http://127.0.0.1:<port3>/index.html#/scan
  [8] 合板预检 · Conform Pre-flight  http://127.0.0.1:<port3>/index.html#/colour

session B: 7 tabs, all http://localhost:<port>/home/analysis

The tab strip shows 7 tabs all titled "合板预检 · Conform Pre-flight" — visually indistinguishable from each other.

Steps to reproduce

  1. Desktop app → open a session → use the in-app Browser on a page you iterate on (a local dev server is easiest: http://127.0.0.1:<port>/index.html#/report).
  2. In the same session, have the agent look at that page several times (re-check after a change, re-read the report, ...), or open the same link again.
  3. Look at the Browser tab strip: one new tab per visit, all with the same title and URL.

Expected and actual behavior

Expected: revisiting a URL the Browser already has open focuses/reuses that tab — or at minimum the agent can close the tabs it opened.

Actual: unbounded tab growth, all duplicates. No agent-side way to clean up, and the duplicates are persisted across restarts.

Root cause (from the shipped 3.1.10 main-process bundle)

  1. navigate refuses to reuse a loaded tab. embedded-browser-manager.js → runAgentBrowserAction():

    if (tool === 'navigate' && hasLoadedBrowserPage(tab.url) && rawArgs.replaceCurrentTab !== true) {
      throw new Error('CURRENT_TAB_OCCUPIED: Current Browser tab already has a loaded page; retry with open_tab');
    }

    The tool schema (builtin-browser-defs.js) tells the model: "Set true only when the user explicitly asked to replace or reuse the currently loaded Browser tab. Omit it for blank tabs and use open_tab to preserve a loaded page." The provider guidance repeats it: "Use navigate only when the current FilePanel tab is absent or blank… use open_tab by default to preserve it." So for any already-loaded tab the model is steered to open_tab.

  2. open_tab always creates a new tab. openAgentTab() calls this.openTab({ active: false, bounds: OFFSCREEN_BOUNDS, sessionId }), which allocates a fresh tabId + WebContentsView, then navigates it and returns openedInNewTab: true. There is no lookup for an existing tab with the same URL.

  3. The agent cannot close tabs. BROWSER_BROKER_ACTIONS (dist/main/modules/local-runtime/utility/control.js) exposes open_tab but no close_tab. Nothing in the agent tool surface can destroy a tab.

  4. The "new tab" IPC path only dedupes in-flight calls. createNewEmbeddedBrowserTab() keeps a pending map keyed by sessionId + initialUrl and returns the in-flight promise; sequential opens of the same URL are never deduped against existing tabs.

  5. Persistence keeps the duplicates. persistent-browser-registry.js: MAX_PERSISTED_BROWSER_TABS_PER_SESSION = 10, .slice(-10), no URL dedup — up to 10 identical entries are persisted and restored, and older ones are silently dropped.

Net effect: N navigations = N tabs, with no reuse path and no close path.

Suggested fixes (any one helps a lot)

  • open_tab: if a tab in the session already has the same normalized URL, focus + navigate it in place instead of creating a new one (or add an explicit reuse mode).
  • Add a close_tab action, and/or auto-close agent-opened tabs when the turn that opened them ends.
  • Let navigate replace the current tab by default when that tab was opened by the agent rather than by the user.
  • Dedupe by URL in PersistentBrowserRegistry, and cap live tabs per session with LRU eviction.

Environment

  • Desktop app 3.1.10.145, Windows 11 x64 (10.0.26200)
  • In-app Browser provider: electron-file-panel
  • Registry file: %APPDATA%/MiniMax/embedded-browser-tabs.json (electron-store, name embedded-browser-tabs)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions