feat: add get_console_logs tool for browser console output#454
feat: add get_console_logs tool for browser console output#454shivammittal274 merged 2 commits intomainfrom
Conversation
Captures Runtime.consoleAPICalled, Runtime.exceptionThrown, and Log.entryAdded CDP events per page with a FIFO ring buffer (500 entries). - ConsoleCollector: per-page buffers with O(1) session routing via Map lookup - Session-aware CDP event dispatching (onSessionEvent) in CdpBackend - Log.enable() added alongside Runtime.enable() in attachToPage - Single tool with level hierarchy, text search, limit, and clear params - Buffer clears on main-frame navigation, cleaned up on page close
Greptile SummaryThis PR adds a Key changes:
Issues found:
Confidence Score: 3/5
Important Files Changed
Sequence DiagramsequenceDiagram
participant Tool as get_console_logs tool
participant Browser
participant CC as ConsoleCollector
participant CDP as CdpBackend
participant Chrome as Chrome (CDP)
Note over CDP,Chrome: Per-session CDP event flow
Chrome-->>CDP: Runtime.consoleAPICalled {sessionId}
CDP->>CC: onSessionEvent handler(params, sessionId)
CC->>CC: sessionToPage.get(sessionId) → pageId
CC->>CC: addEntry(pageId, entry) into FIFO buffer
Note over Tool,CC: Tool invocation
Tool->>Browser: getConsoleLogs(page, opts)
Browser->>Browser: resolveSession(page) → attachToPage if needed
Browser->>CC: getLogs(pageId, opts)
CC->>CC: filter by level + search, slice(-limit)
CC-->>Browser: { entries, totalCount }
Browser-->>Tool: result
Tool-->>Tool: format text + response.data(...)
Note over Browser,CC: Lifecycle hooks
Browser->>CC: attach(pageId, sessionId) on new session
Browser->>CC: detach(pageId) on tab close / listPages cleanup
|
- ConsoleCollector.attach() now updates session mapping on re-attach instead of early-returning, preventing silent event drops after target detach/re-attach (e.g. tab crash, cross-process navigation) - Remove unused clearConsoleLogs() and ConsoleCollector.clear()
|
@greptile-ai review |
Summary
get_console_logsMCP tool that surfaces browser console errors, warnings, and logs per pageRuntime.consoleAPICalled,Runtime.exceptionThrown, andLog.entryAddedCDP events in per-page FIFO ring buffers (500 entries max)onSessionEvent) toCdpBackendfor O(1) routing — matches how Puppeteer/Playwright internally route session events via Map lookupNew files
apps/server/src/browser/console-collector.ts—ConsoleCollectorclass with per-page buffers, event handlers, arg serializationapps/server/src/tools/console.ts—get_console_logstool definitionModified files
apps/server/src/browser/backends/cdp.ts— session-aware event dispatching inhandleMessageapps/server/src/browser/backends/types.ts—onSessionEventonCdpBackendinterfaceapps/server/src/browser/browser.ts—ConsoleCollectorwiring,Log.enable(),getConsoleLogs()/clearConsoleLogs()apps/server/src/tools/registry.ts— registered in Observation categorypackages/shared/src/constants/limits.ts—CONSOLE_BUFFER_MAX_ENTRIES,CONSOLE_DEFAULT_LIMIT,CONSOLE_MAX_LIMITDesign decisions
pageparamTest plan
No console output for page 1.console.log/warn/error/debug/infoall captured correctlyLog.entryAddedcaptured (favicon 404 from browser)Runtime.exceptionThrowncaptured (uncaughtthrow new Error)level: "error"returns only errorssearch: "warning"text filter workslimit: 2returns most recent entries with "showing 2 of 6" headerclear: trueempties buffer (6 → 0)