Skip to content

desktop: browser pane never becomes available, launcher flashes and browser.* tools missing #60433

Closed as duplicate

Description

@RonnyWu

Summary

On Desktop 2.2.2 the built-in browser pane never becomes available: its side-panel launcher appears for a moment and then disappears, the browser.open ("Open browser") command stays disabled so Ctrl+Alt+B does nothing, and the browser.* Code Mode namespace is missing from the agent's tool catalog. No /api/rpc/experimental.browser/attach request reaches the server at all, so the pane never even starts its attach handshake.

Environment

  • opencode version: 2.2.2 (Desktop; bundled CLI 2.2.2, background service 2.2.2 at http://127.0.0.1:28894)
  • OS: Windows 11 Microsoft Windows [Version 10.0.26100.1742], x64
  • Terminal: Unavailable: issue is in the Desktop app, not a terminal UI
  • Shell: C:\Windows\system32\cmd.exe
  • Install/channel: release, installed under %LOCALAPPDATA%\Programs\ai.opencode.desktop, auto-updated to 2.2.2 on 2026-10-30 02:13 local
  • Active plugins: none ("plugins": [] in ~/.config/opencode/opencode.json); no browser permission rule anywhere in opencode.json/opencode.jsonc

Reproduction

  1. Launch OpenCode Desktop 2.2.2 on Windows 11 x64 and open a session.
  2. Open the side region's New tab launcher list: the globe (Open browser) item is listed only briefly, then disappears.
  3. Reload the window (or reopen the app); the same icon flashes in and out again.
  4. Press Ctrl+Alt+B, or pick Open browser from the command palette: nothing happens. The command is disabled.
  5. Ask the agent to use the browser tools (e.g. browser.tabs.list): the browser namespace does not exist in the catalog.

Expected Behavior

The browser pane opens from the launcher, from Ctrl+Alt+B, and the session exposes the browser.* Code Mode namespace, as documented in https://opencode.ai/v2/docs/tools ("Browser").

Actual Behavior

  • The launcher is registered and then withdrawn immediately.
  • browser.open never enables, so there is no keyboard or palette fallback.
  • browser.* is absent from the tool catalog for the session.
  • Server log for this app session (~/.local/share/opencode/log/opencode.log, app started 2026-10-30T02:30Z) contains zero POST /api/rpc/experimental.browser/attach entries, i.e. the pane does not attempt to attach. Earlier sessions do show failing attaches:
2026-10-29T12:24:25Z POST /api/rpc/experimental.browser/attach http.status=400
2026-10-29T13:51:25Z POST /api/rpc/experimental.browser/attach http.status=400
2026-10-30T01:49:45Z POST /api/rpc/experimental.browser/attach http.status=499

Additional Context

The availability gate in the shipped 2.2.2 bundle only depends on local state, which matches "no attach request is ever sent":

const available = (session: SessionRef) =>
  !state.unsupported[session.server.id] && !!session.id && session.server.compatible && !layout.narrow()

and the launcher is registered only when both gates pass:

if (!view || !value?.available(view) || !value.attached(view)) return undefined
→ { menu: "session.panel", id: "open", icon: "globe", keybind: "browser.open", order: 15 }

state.unsupported[server.id] is set to true when the pane's control stream yields browser.pane.unsupported, which is produced for rpc.unavailable, rpc.method_not_found, and rpc.invalid_input (the 400 attach responses above fit the last one). That flag is not reset anywhere in the store, so a single failed attach disables the browser pane, its launcher, its command, and the browser.* tools for the rest of the app session — restarting the app is the only recovery, and it did not recover here.

Related observation in the same area: with the side region set to the Side tabs layout, clicking the side-panel launcher did not open the region at all (Ctrl+Shift+R / review.toggle still worked); switching the layout back to Tab made clicking work again.

Workarounds tried: window reload (launcher flashes again then disappears), layout switch (fixes only the click-to-open regression, not the pane).

Impact: the browser tooling introduced for Desktop is completely unreachable in this install, with no keyboard fallback.

Activity

  1. opencodejr commented on Oct 30, 2026

    @opencodejr

    Thanks for the very detailed report and for digging into the bundle.

    I think this is a duplicate of #60369. On Desktop 2.2.2 for Windows, the built-in browser part of the desktop build fails to load (SyntaxError: Identifier 'n' has already been declared). When that happens the pane never starts, so no experimental.browser/attach request is sent, the launcher disappears and browser.open stays disabled. That matches what you saw, including the zero attach requests after a restart and restarting not helping. You can check by looking for that SyntaxError (a scope finalizer failed error for the browser scope) in the desktop app's main.log.

    Possible duplicates and related issues, ordered by likelihood:

    The bot will close this issue as a duplicate in 1 day unless you reply explaining how your problem is different, for example if main.log doesn't show that SyntaxError.

  2. RonnyWu commented on Oct 30, 2026

    @RonnyWu
    Author

    Confirmed — thank you for the pointer, that is exactly it. Closing this as a duplicate of #60369 is the right call.

    Evidence from this machine (Windows 11 10.0.26100, Desktop 2.2.2), from %APPDATA%\ai.opencode.desktop\logs\20261030T014949\main.log:

    [2026-10-30 10:30:13.295] [error] (main)    scope finalizer failed {
      scope: 'browser',
      error: "SyntaxError: Identifier 'n' has already been declared\n" +
        '    at compileSourceTextModule (node:internal/modules/esm/utils:320:16)\n' +
        '    at ModuleLoader.moduleStrategy (node:internal/modules/esm/translators:89:18)\n' +
        ...
    }
    

    The timing lines up with a relaunch: the error is logged at 10:30:13.295, and a new instance starts 20 seconds later at 10:30:33.923 (logs\20261030T023033\main.log). So opening the pane crashes the main process while it imports the browser chunk, which also explains why restarting never helped.

    One detail that may be relevant to #60388: in the current instance, main.log contains only updater lines and no scope finalizer failed entry, because the pane never reaches the main-process import once available() is false. The failure looks one-shot, on the first attach attempt after launch.

    Thanks also for the pointers to #60381 (New tab launchers ignoring clicks) and #60023 (sticky unsupported state) — both match what I observed on the side-panel side.

    No objection to auto-closing this as a duplicate.

  3. Hona commented on Oct 30, 2026

    @Hona
    Member

    Fixed in 2.2.3 by #60430.

    The desktop main-process bundle declared require twice, which broke the in-app browser and its browser.* tools.

    Please update to 2.2.3. In the desktop app, use Check for Updates, or install it from the release page. If the browser pane still doesn't appear afterwards, please reopen this issue with your main.log from the logs folder.

  4. opencodejr commented on Oct 31, 2026

    @opencodejr

    We haven't heard back, so I'm closing this as a duplicate of #60369. That issue covers the same problem on Desktop 2.2.2: the browser part of the desktop build fails to load (Identifier 'n' has already been declared), so the pane never attaches, and the launcher, Ctrl+Alt+B and the browser.* tools all disappear. A fix is proposed in #60388. Please follow #60369 for updates. Related issues: #60023 (the unsupported flag that hides the launcher until restart) and #60381 (New tab launchers ignoring clicks, which likely covers your Side tabs observation).

    If your main.log doesn't show that SyntaxError, or the problem is still there once #60369 is fixed, please reply here with the details and we can reopen this.

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions