14 KiB
14 KiB
Changelog
0.0.31
Patch Changes
- Added
styles-apiresource: New MCP resource (playwriter://styles-api) with types and examples forgetStylesForLocatorCSS inspection API - Reduced prompt context: Simplified prompt.md to reference resources (
playwriter://debugger-api,playwriter://editor-api,playwriter://styles-api) instead of inline documentation
0.0.30
Patch Changes
- Wait for main frame execution context:
Runtime.enablenow waits for the main frame's default execution context (auxData.isDefault === true) instead of any context. This prevents "Frame has been detached" errors when pages weren't fully ready. - Fix race condition when toggling extension: When re-enabling the extension on a tab, ignore group removal events while the tab is still in 'connecting' state. Previously,
syncTabGroupwould ungroup 'connecting' tabs which triggered a disconnect during connection.
0.0.29
Patch Changes
- Fixed Editor/Debugger script listing after page load:
listScripts()andlist()now work correctly even when called after page has loadedenable()now disables first then re-enables to force CDP to emitscriptParsedandstyleSheetAddedevents- Added 100ms debounced wait for events to arrive before returning
listScripts()andlist()are now async and auto-callenable()
- Bun/bunx compatibility: Removed known issue about bunx - the MCP now works with both
npxandbunx
0.0.28
Patch Changes
- Added
getReactSourceutility: Extract React component source location (file, line, column) from DOM elements- Uses bippy library for React fiber introspection
- Returns
{ fileName, lineNumber, columnNumber, componentName }ornull - Only works on local dev servers (Vite, Next.js, CRA) with JSX transform in development mode
- CSP bypass for script injection: Changed
getLocatorStringForElementandgetReactSourceto use CDPRuntime.evaluateinstead ofaddScriptTag- Scripts now work on pages with strict Content Security Policy
- Switched to Bun.build: Replaced esbuild and esm.sh downloads with Bun.build for bundling selector-generator and bippy
- New
build-selector-generator.tsandbuild-bippy.tsscripts
- New
0.0.27
Patch Changes
- Fixed gray icon on about:blank pages:
about:blankpages now show the black (clickable) icon instead of gray (restricted). Chrome returnsundefinedfortab.urlon blank pages, which was incorrectly treated as restricted. - Auto-recovery after extension replacement: When another extension instance takes over the connection, the replaced extension now polls
/extension/statusevery 3 seconds. When the slot becomes free, it clears the error state so the user can click to reconnect.
0.0.26
Patch Changes
- Fixed CDP commands sent too soon after attach: Added 400ms delay after debugger attach before sending CDP commands to prevent race conditions
- Deferred page emulation setup: Disabled early
setDeviceScaleFactorForMacOSandpreserveSystemColorSchemecalls that could fail on newly attached pages - Fixed main tab cleanup on detach:
Target.detachedFromTargetnow properly removes main tabs from state, not just child sessions
0.0.25
Patch Changes
- Wait for extension after server start: When MCP starts the relay server, wait 3 seconds for the extension to connect before proceeding
0.0.24
Patch Changes
- Auto-restart relay server on version mismatch: Server now exposes
/versionendpoint, MCP checks and restarts server if versions differ after package update - Simplified logging: Single
relay-server.logfile instead of timestamped files with symlinks - Cross-platform process killing: Use
kill-port-processpackage for Windows/Mac/Linux compatibility - IPv4 compatibility: Use
127.0.0.1instead oflocalhostto avoid IPv6 resolution issues - Reset tabs on disconnect: Clear connected tabs state when extension disconnects
0.0.23
Patch Changes
- Windows compatibility: Use
os.tmpdir()for log files instead of XDG paths, ensuring cross-platform support - Removed
xdg-basedirdependency: Simplified path handling by using Node's built-inos.tmpdir()
0.0.22
Patch Changes
- Green icons for connected tabs: Extension now uses distinct green icons when tabs are connected
- Cleaner timeout handling: Code execution timeouts no longer suggest using reset tool
0.0.21
Patch Changes
- Improved debug message clarity: Changed log file path hint to specify "internal playwriter errors" for better guidance
0.0.20
Patch Changes
- Timestamped log files: Log files now include timestamps in filename (
relay-server-{timestamp}.log) instead of overwriting a single file - Automatic log cleanup: Keeps only the 10 most recent log files, deleting older ones automatically
- Async log writes: Logger now uses a queue for async file writes instead of blocking sync writes
0.0.19
Patch Changes
- Added
getCDPSessionutility: New function to send raw CDP commands through the relay- Works with
getCDPSession({ page })in MCP execute context - Returns
{ send, on, off, detach }interface for CDP commands and events - Uses page index matching with URL verification for reliable target identification
- Works with
- Converted CDP tests to use relay: All CDP Session tests now go through the relay instead of direct playwright CDP
- Debugger, Profiler, and layout metrics tests all use
getCDPSessionForPage
- Debugger, Profiler, and layout metrics tests all use
- Added warning about
newCDPSession: Documented in prompt.md thatpage.context().newCDPSession()does not work through the relay
0.0.18
Patch Changes
- Marked project as production ready: Removed "Still in development" notice from README
0.0.17
Patch Changes
- Improved error debugging: Log file path now included in error messages and tool description. Log file writes to OS temp directory by default (
PLAYWRITER_LOG_PATHenv var to override) - Added CDP Session tests: New test suite for CDP commands through the relay
- Debugger test: pauses on
debuggerstatement, captures stack trace, local variables, and evaluates expressions - Profiler test: profiles JavaScript execution with inline snapshot of function names
- Layout metrics test: captures viewport dimensions via CDP
- Debugger test: pauses on
- Refactored test setup: Extracted
setupTestContext()andcleanupTestContext()to deduplicate beforeAll/afterAll code - Improved
getExtensionServiceWorker: Now waits for extension global functions to be ready before returning - Better TypeScript types: Uses
Protocol.Debugger.PausedEvent,Protocol.Profiler.Profile,Protocol.Performance.Metricinstead ofany
0.0.16
Patch Changes
- Fixed Stagehand timeout: Send
Target.attachedToTargetevent afterTarget.attachToTargetreturns- Stagehand creates sessions from
attachToTargetresponse, then expectsattachedToTargetevent to create Page - Previously events were only sent from
setAutoAttachwhich arrived before sessions were created
- Stagehand creates sessions from
0.0.15
Patch Changes
- Fixed logger safety: Added optional chaining to logger calls in CDP relay to prevent errors when logger methods are undefined
0.0.14
Patch Changes
- Added Stagehand support: CDP relay now works with Stagehand's
cdpUrlconnection option- Added
Target.setDiscoverTargetshandler that sendsTarget.targetCreatedevents for connected targets - Added
Target.attachToTargethandler that returns existing sessionId for already-attached targets - Added Stagehand integration test verifying connection and page access
- Added
- Viewport initialization: Extension now sets initial viewport via
Emulation.setDeviceMetricsOverridewhen attaching to tabs- Gets layout metrics via
Page.getLayoutMetrics - Sends
Page.frameResizedevent after setting viewport
- Gets layout metrics via
0.0.13
Patch Changes
- Fixed home directory expansion on Windows: Use
os.homedir()instead ofprocess.env.HOMEfor~path expansion in browser-config.ts, which doesn't exist on Windows.
0.0.12
Patch Changes
- Fixed Windows path resolution: Use
fileURLToPathfor prompt.md path resolution, fixing issues on Windows whereimport.meta.urlpaths weren't being handled correctly.
0.0.11
Patch Changes
- Fixed
page.url()returning empty after extension runs for a while: TheTarget.targetInfoChangedhandler was incorrectly updating the parent page's cachedtargetInfowith child target info (service workers, iframes). Now correctly looks up targets bytargetIdinstead ofsessionId.
0.0.10
Patch Changes
- Browser console log capture: Added
getLatestLogsfunction to capture and retrieve browser console logs- Automatically captures up to 5000 logs per page
- Logs cleared on page reload/navigation
- Logs deleted when page is closed
- Supports filtering by page, search string/regex, and count limit
- Fixed test contamination: Added
clearAllLogsfunction to prevent log persistence across tests - Improved console listener setup: Made listeners synchronous using page
_guidfor immediate log capture - Critical reconnection test: Added test verifying extension reconnection after
disconnectEverything()- Tests full disconnect/reconnect cycle
- Verifies MCP client can reconnect with
resetPlaywright() - Ensures pages are visible after reconnection
- Persistent console listeners: Console logs now persist across browser reconnections (not cleared in
resetConnection)
0.0.9
Patch Changes
- Added
tabspermission to extension manifest to fixchrome.tabsaccess issues - Implemented
toggleExtensionForActiveTabglobal helper in extension background script - Automated extension loading and toggling in MCP tests using
chromium.launchPersistentContext - Added comprehensive tests for extension lifecycle:
- Toggling extension on new and existing pages
- Verifying direct CDP connection to relay
- Handling Playwright connection before extension attachment
- Fixed
getCdpUrlutility usage in tests - Updated tests to use unique URLs for better debugging
0.0.8
Patch Changes
- Added
getLocatorStringForElementutility toexecutetool context - Helper generates Playwright locator strings for element handles
- Fixed bug where timeout was not correctly passed to
waitForEventingetCurrentPage
0.0.7
Patch Changes
- Increased default timeout for execute tool from 3000ms to 5000ms
0.0.6
Patch Changes
- Added
resetPlaywrightfunctionality to reset Playwright connection - Added
getCdpUrlutility function for CDP endpoint access - Support for multiple tabs in CDP relay
- Support for multiple Playwright clients
- Enhanced prompt documentation with better examples
- Improved CDP relay error handling and logging
- Added
utils.tswith helper functions
0.0.5
Patch Changes
- Added
activateTab(page)utility function to bring browser tabs to front and focus them - Added
Playwriter.activateTabCDP command support in relay server - Added
activateTabmessage type to extension protocol - Extension now handles tab activation via
chrome.tabs.updateandchrome.windows.update
0.0.4
Patch Changes
- Added
contextfield toStatetype - Renamed
ToolStateinterface toState - Limit execute tool output to 1000 characters with truncation message
0.0.3
Patch Changes
- Replace CommonJS
requirewith ESMimportfor user-agents module
2025-07-24 22:15
- Changed Chrome process stdio from 'ignore' to 'inherit' to print Chrome logs
- Helps with debugging CDP connection issues
2025-07-24 22:00
- Simplified email validation by checking profiles directly in MCP connect tool
- Connect tool validates email against available profiles before starting Chrome
- Returns helpful message with available profiles when email doesn't match
- startPlaywriter now simply throws an error for invalid emails
2025-07-24 21:45
- Added test infrastructure with vitest for MCP server testing
- Created mcp-client.ts with MCP client setup using vite-node
- Added comprehensive tests for Chrome CDP connection and console log capture
- Fixed callTool signatures to match MCP SDK API
- Added proper TypeScript types for CallToolResult
2025-07-24 21:30
- Moved profile listing functionality into connect tool when emailProfile is not provided
- Updated parameter description with agent-appropriate phrasing ("ask your user/owner")
- Removed separate get_profiles tool for cleaner API
- Connect tool now handles both profile listing and connection in one place
2025-07-24 21:15
- Modified startPlaywriter to accept optional emailProfile parameter
- Removed prompts dependency and interactive profile selection
- Connect tool now accepts emailProfile parameter or returns available profiles
- Added security guidance for profile selection in MCP response
- Suggests storing selected email in AGENTS.md or CLAUDE.md to avoid repeated selection
2025-07-24 21:00
- Integrated Chrome launch via startPlaywriter from playwriter.ts
- Connect tool now starts Chrome with CDP port and connects via playwright.chromium.connectOverCDP
- Added proper cleanup handlers for browser and Chrome process on server shutdown
- Removed placeholder getActivePage function in favor of direct browser connection
2025-07-24 20:50
- Moved console object definition outside of the Function constructor template string
- Improved code readability and maintainability
2025-07-24 20:45
- Refactored console capture to use a custom console object instead of overriding global console
- Cleaner implementation that avoids modifying global state
2025-07-24 20:40
- Enhanced execute tool to capture console.log, console.info, console.warn, console.error, and console.debug output
- Console methods are temporarily overridden during code execution to collect logs
- Output now includes both console logs and return values in a formatted response
2025-07-24 20:35
- Added execute tool to run arbitrary JavaScript code with page and context in scope
- The tool uses the Playwright automation guide from prompt.md as its description
2025-07-24 20:30
- Fixed MCP server tool registration API usage to match the correct method signature (name, description, schema, handler)