# rightkit-browser
Shared CDP browser runtime (Chrome/Edge via chromiumoxide). See the lane API notes
for the CodeRight migration. Real `Input.dispatch*` input, multi-page sessions,
named persistent profiles, headless or headed, `--mute-audio` by default.
Launch resolves Chrome for Testing (`chrome_for_testing_path`): `LaunchOptions::chrome_path`,
then `RIGHTKIT_CHROME_FOR_TESTING`, then app installs and the newest Puppeteer/Playwright cache
build. Missing Chrome for Testing is `BrowserError::ChromeForTestingNotFound` with install
instructions; the system browser (`find_chrome`) is used only with `LaunchOptions::system_chrome()`.
Regular macOS Chrome leaks a code-sign bundle clone per killed instance.
`shutdown()` closes gracefully: CDP `Browser.close`, then SIGTERM to the process group, then
SIGKILL, each with a 5 s bound. `Drop` sends SIGTERM, waits up to 5 s, then SIGKILL. The
temporary profile is removed once Chrome has exited.