* feat(cli): add Windows IPC and daemon lifecycle support
* feat(release): add Windows x64 packaging and CI
* docs: document Windows installation and verification
* fix(windows): align pipe naming and shutdown detection
* fix: gracefully close all connections on daemon stop
* refactor: extract help text to static file
* fix: install command properly extracts daemon and installs deps
* fix: improve postinstall binary download reliability
* docs: note Windows is not currently supported
* chore: align marketplace version with package.json
* docs: rewrite CHANGELOG with 0.2.0 as initial CLI release
* docs: remove zero startup cost from README features
* feat: add install-skill interactive command
* chore: add rustfmt and prettier with CI checks
* docs: simplify changelog
* docs: add _snapshotForAI to help output
* docs: expand LLM usage guide in help output
* feat: add --timeout flag for script execution
* feat: add snapshot helper for LLM-friendly page inspection
* docs: document snapshotForAI, remove custom snapshot helper
* docs: add approach guidance to LLM help
* release: v0.2.1
* Fixed the extension dropping connection to the server
* Only create keep-alive alarm when extension is active
The alarm was being created unconditionally on every service worker
startup, causing unnecessary wake-ups every 30 seconds even when the
extension was disabled. Now the alarm is:
- Created when the extension is enabled (via handleStateChange or init)
- Cleared when the extension is disabled
This avoids wasting resources when the user has turned off the extension.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Tomas Rollo <tomas@Tomass-MacBook-Pro.local>
Co-authored-by: Sawyer Hood <sawyerjhood@gmail.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Allow users to specify a default viewport size when creating pages,
avoiding the need to manually call setViewportSize() after each page
creation.
Closes#28🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Added note about waiting for 'Extension connected' message to confirm
the browser is ready to be controlled.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Split installation and usage into separate sections with clear steps
for activating the extension and asking Claude to connect.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Reduce documentation from ~350 to ~175 lines by removing redundant
explanations and trusting that Claude already knows TypeScript and
Playwright basics. Keep the TypeScript-in-evaluate warning since
models have actually made that mistake.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace per-tab click-to-connect behavior with a global toggle:
- Add popup with toggle switch to enable/disable extension
- Persist active state to chrome.storage.local across restarts
- Add StateManager service for state persistence
- Add checkConnection() to validate relay is actually reachable
- Poll connection status while popup is open for real-time updates
- Show badge "ON" when extension is active
When inactive, extension does not connect to relay or run CDP commands.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
When a client requests a page via POST /pages, the relay sends a
Target.activateTarget CDP command. The extension intercepts this and
uses chrome.tabs.update() to activate the tab, since the CDP command
is not allowed through the debugger API.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
New tabs created by the extension are now automatically added to a
blue "Dev Browser" tab group for better organization.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Split monolithic background.ts (635 lines) into focused services:
- TabManager: tab state and debugger attachment
- ConnectionManager: WebSocket lifecycle and reconnection
- CDPRouter: CDP command routing
- logger: structured logging utility
- Remove all icon/badge management code (~45 lines)
- Add Vitest testing with WXT's fake-browser mocks
- Add 28 unit tests for all services
- Bump version to 1.0.0
- Add @types/chrome for TypeScript support
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use a single custom favicon for all extension states instead of
state-based colored icons. Removes dynamic icon switching and
simplifies the updateIcons function to only update tooltip text.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove .wxt and .output directories from version control (already gitignored)
- Add auto-reconnect logic to extension background script
- Create tabs automatically in extension mode instead of requiring manual attachment
- Remove unused listUnnamed API and endpoint
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Migrate from Bun to Node.js/npm
Replace all Bun-specific commands with Node.js/npm equivalents:
- bun install → npm install
- bun run → npm run
- bun x tsx → npx tsx
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add typescript as devDependency
Required for npx tsc --noEmit to work on fresh installs.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Update GitHub Actions to use Node.js/npm
- Replace oven-sh/setup-bun with actions/setup-node@v4
- Use npm ci for deterministic installs
- Add package-lock.json for skills/dev-browser
- Remove @types/bun from root devDependencies
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add root package-lock.json for CI
Required for npm ci in the format check job.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Fix CI: use npm install for cross-platform compatibility
npm ci fails with platform-specific optional dependencies (rollup)
when the lockfile was generated on a different platform. Using
npm install resolves the correct platform binaries.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Fix CI: add rollup Linux binary as optional dependency
npm has a known bug where platform-specific optional dependencies
aren't properly resolved when the lockfile was generated on a
different platform. Adding @rollup/rollup-linux-x64-gnu as an
explicit optional dependency ensures it's available on Linux CI.
See: https://github.com/npm/cli/issues/4828🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>