this codebase has the codebase for playwriter the extension uses chrome.debugger to manage the user browser read ./README.md for an overview of how this extension and mcp work ## architecture - user installs the extension in chrome. we assume there is only one chrome window for now, the first opened. - extension connects to a websocket server. on 19988. if this server is still not open, it retries connecting in a loop - the MCP spawns the ws server if not already listening on 19988, in background. the mcp then connects to this same server with a playwright client - the server exposes /cdp/client-id which is used by playwright clients to communicate with the extension - the extension instead connects to /extension which is used to receive cdp commands and send responses and cdp events. - some events are treated specially for example because - we need to send attachedToTarget to let playwright know which pages are available - we need to send detachedFromTarget when we disable the extension in a tab - a few more events need custom handling - tabs are identified by sessionId or targetId (CDP concepts) or tabId (chrome debugger concept only) ## development extension/ contains the chrome extension code. you need to run `pnpm build` to make it ready to be loaded in chrome. the extension folder chrome will use is extension/dist playwriter contains the ws server and MCP code. also the tests for the mcp are there. playwriter/src/prompt.md contains the docs for the MCP the agent will use. you should add there important sections that help the agent control the browser well with the MCP interface playwriter/src/resource.md is for more generic knowledge about playwright that the agent can use when necessary, for things like best practices for selecting locators on the page ## CDP docs here are some commands you can run to fetch does about CDP various domains (events and commands namespaces) ``` curl -sL https://raw.githubusercontent.com/ChromeDevTools/devtools-protocol/master/pdl/domains/Target.pdl # manage “targets”: pages, iframes, workers, etc., and attach/detach sessions curl -sL https://raw.githubusercontent.com/ChromeDevTools/devtools-protocol/master/pdl/domains/Browser.pdl # top-level browser control: version info, window management, permission settings, etc. curl -sL https://raw.githubusercontent.com/ChromeDevTools/devtools-protocol/master/pdl/domains/Page.pdl – navigate, reload, screenshot, PDF, frame management, dialogs, and page lifecycle events. curl -sL https://raw.githubusercontent.com/ChromeDevTools/devtools-protocol/master/pdl/domains/Emulation.pdl # emulate device metrics, viewport, timezone, locale, geolocation, media type, CPU, etc. ``` you can list other files in that folder on github to read more if you need to control things like DOM, performance, etc