Skip to content

feat(operate): unify network capture + implement CDP consoleMessages#816

Merged
jackwener merged 3 commits intomainfrom
feat/operate-session-capture
Apr 5, 2026
Merged

feat(operate): unify network capture + implement CDP consoleMessages#816
jackwener merged 3 commits intomainfrom
feat/operate-session-capture

Conversation

@jackwener
Copy link
Copy Markdown
Owner

Summary

  • operate open: start session capture before navigation (catches initial requests that JS interceptor misses)
  • operate network: prefer readNetworkCapture() over JS __opencli_net interceptor, with fallback
  • CDPPage: implement consoleMessages() via CDP Runtime.consoleAPICalled event buffering

Details

operate open (src/cli.ts):

  • Calls page.startNetworkCapture?.() before page.goto()
  • Only falls back to JS interceptor injection when startNetworkCapture is not available

operate network (src/cli.ts):

  • Checks page.readNetworkCapture first and normalizes entries to match existing shape
  • Falls back to __opencli_net JS interceptor when session capture is unavailable

CDPPage consoleMessages (src/browser/cdp.ts):

  • Lazy-initializes Runtime.enable + Runtime.consoleAPICalled listener on first call
  • Buffers up to 500 console messages with type/text/timestamp
  • Supports filtering by level

Design principle

All consumers follow the same rule: prefer session capture → fallback to legacy path. This ensures consistency across operate, explore, and future diagnostic consumers.

Test plan

  • TypeScript compilation passes
  • Manual test: operate open <url> + operate network should show captured requests including initial page load

Part of #810 (PR B). Depends on PR A for full CDP coverage, but works independently with daemon Page.

- operate open: start session capture before navigation (catches initial requests)
- operate network: prefer readNetworkCapture() over JS interceptor
- CDPPage: implement consoleMessages() via Runtime.consoleAPICalled

Part of #810
…pture

Daemon and CDP capture entries use responseStatus/responseContentType/
responsePreview (not status/contentType/responseBody). Fix the
normalization in operate network to match the actual entry shape from
extension/src/cdp.ts.
- Register Runtime.exceptionThrown handler to capture uncaught exceptions
  as error-level messages (most valuable diagnostic signal)
- 'error' filter now returns both console.error() and warning/exception
  entries, matching typical severity-based logging semantics
@jackwener jackwener force-pushed the feat/operate-session-capture branch from b9780e7 to 117cb58 Compare April 5, 2026 14:54
@jackwener jackwener merged commit 1abff0c into main Apr 5, 2026
11 checks passed
@jackwener jackwener deleted the feat/operate-session-capture branch April 5, 2026 14:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant