fix(browser): clear refs on reconnect, add reconnect to ListTabs

- Reset RefStore when connection drops to avoid stale DOM node refs
- Add auto-reconnect logic to ListTabs for consistency with getPage
- Remove console from auto-start list (no browser needed for empty msgs)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
viettranxandClaude Opus 4.6 committed 2026-03-05 10:12:59 +07:00
1 parent 62a6ca9ee5
commit 6991f9ae1c
2 files changed
+15 -2

No files matched your search

+14 -1
View File
@@ -77,6 +77,7 @@ func (m *Manager) Start(ctx context.Context) error {
m.browser = nil
m.pages = make(map[string]*rod.Page)
m.console = make(map[string][]ConsoleMessage)
m.refs = NewRefStore()
}
var controlURL string
@@ -169,7 +170,18 @@ func (m *Manager) ListTabs(ctx context.Context) ([]TabInfo, error) {
pages, err := m.browser.Pages()
if err != nil {
return nil, fmt.Errorf("list pages: %w", err)
if m.remoteURL != "" {
if reconnErr := m.reconnectLocked(); reconnErr != nil {
return nil, fmt.Errorf("list pages: %w (reconnect also failed: %v)", err, reconnErr)
}
m.logger.Info("auto-reconnected to remote Chrome")
pages, err = m.browser.Pages()
if err != nil {
return nil, fmt.Errorf("list pages after reconnect: %w", err)
}
} else {
return nil, fmt.Errorf("list pages: %w", err)
}
}
tabs := make([]TabInfo, 0, len(pages))
@@ -349,6 +361,7 @@ func (m *Manager) reconnectLocked() error {
m.browser = nil
m.pages = make(map[string]*rod.Page)
m.console = make(map[string][]ConsoleMessage)
m.refs = NewRefStore()
controlURL, err := resolveRemoteCDP(m.remoteURL)
if err != nil {
+1 -1
View File
@@ -139,7 +139,7 @@ func (t *BrowserTool) Execute(ctx context.Context, args map[string]interface{})
// Auto-start browser for actions that need it
switch action {
case "open", "snapshot", "screenshot", "navigate", "act", "tabs", "console":
case "open", "snapshot", "screenshot", "navigate", "act", "tabs":
if err := t.manager.Start(ctx); err != nil {
return tools.ErrorResult(fmt.Sprintf("failed to start browser: %v", err))
}