#!/bin/bash # Launch Chrome with CDP (remote debugging) enabled. # Usage: chrome-cdp [port] # # Chrome refuses --remote-debugging-port on its default data directory. # We create a separate data dir with a symlink to the user's real profile, # so Chrome thinks it's non-default but uses the same cookies/extensions. PORT="${1:-9222}" CHROME="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" REAL_PROFILE="$HOME/Library/Application Support/Google/Chrome" CDP_DATA_DIR="$HOME/.gstack/cdp-profile/chrome" if ! [ -f "$CHROME" ]; then echo "Chrome not found at $CHROME" >&2 exit 1 fi # Check if Chrome is running if pgrep -f "Google Chrome" >/dev/null 2>&1; then echo "Chrome is still running. Quitting..." osascript -e 'tell application "Google Chrome" to quit' 2>/dev/null # Wait for it to fully exit for i in $(seq 1 20); do pgrep -f "Google Chrome" >/dev/null 2>&1 || break sleep 0.5 done if pgrep -f "Google Chrome" >/dev/null 2>&1; then echo "Chrome won't quit. Force-killing..." >&2 pkill -f "Google Chrome" sleep 1 fi fi # Set up CDP data dir with symlinked profile # Chrome requires a "non-default" data dir for --remote-debugging-port. # We symlink the real Default profile so cookies/extensions carry over. mkdir -p "$CDP_DATA_DIR" if [ -d "$REAL_PROFILE/Default" ] && ! [ -e "$CDP_DATA_DIR/Default" ]; then ln -s "$REAL_PROFILE/Default" "$CDP_DATA_DIR/Default" echo "Linked real Chrome profile into CDP data dir" fi # Also link Local State (contains crypto keys for cookie decryption, etc.) if [ -f "$REAL_PROFILE/Local State" ] && ! [ -e "$CDP_DATA_DIR/Local State" ]; then ln -s "$REAL_PROFILE/Local State" "$CDP_DATA_DIR/Local State" fi echo "Launching Chrome with CDP on port $PORT..." "$CHROME" \ --remote-debugging-port="$PORT" \ --remote-debugging-address=127.0.0.1 \ --remote-allow-origins="http://127.0.0.1:$PORT" \ --user-data-dir="$CDP_DATA_DIR" \ --restore-last-session & disown # Wait for CDP to be available for i in $(seq 1 30); do if curl -s "http://127.0.0.1:$PORT/json/version" >/dev/null 2>&1; then echo "CDP ready on port $PORT" echo "Run: \$B connect chrome" exit 0 fi sleep 1 done echo "CDP not available after 30s." >&2 exit 1