mirror of
https://github.com/tiennm99/goclaw.git
synced 2026-10-15 06:16:10 +00:00
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:
1 parent
62a6ca9ee5
commit
6991f9ae1c
2 files changed
+15
-2
No files matched your search
+14
-1
@@ -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
@@ -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))
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user