- detect source vs compiled via __filename.endsWith('.ts') instead of env var
- add waitForExtension() to poll for extension connection after server start
- CLI waits up to 10s for extension to reconnect before executing commands
- Replace cac with @xmorse/cac for space-separated commands
- Add 'playwriter session new' to get new session ID
- Add 'playwriter session list' to show sessions and state keys
- Add 'playwriter session reset <id>' to reset a session
- Update SKILL.md with new CLI docs and multiline examples
- Put -s flag before -e in all examples
- Split NO_TABS_ERROR into EXTENSION_NOT_CONNECTED_ERROR and NO_TABS_ENABLED_ERROR
- Add checkExtensionStatus() to detect extension state before connecting
- Provide actionable guidance in error messages
- Add -e/--eval flag to execute JavaScript code via relay server
- Extract PlaywrightExecutor class to shared executor.ts module
- Extract relay server utilities to relay-client.ts
- Add /cli/execute, /cli/reset, /cli/sessions endpoints
- Fix CDP session client ID collision by using fresh unique URLs for each connection
- Server rejects new extension (code 4002) if existing has active tabs
- Idle extensions (no tabs) can still be replaced
- Extension properly enters polling mode when rejected during handshake
- /extension/status now returns activeTargets count for smarter reconnection
* fix: add CORS middleware to allow extension connection
* fix(cors): validate extension ID to prevent other extensions from accessing endpoints
---------
Co-authored-by: Tommy D. Rossi <beats.by.morse@gmail.com>
Fixes#22
CDP's Network.enable buffers response bodies by default, which breaks
SSE/streaming - data arrives at Chrome but ReadableStream never receives it.
Changes:
- Intercept Network.enable in relay, default maxTotalBufferSize: 0
- Agents can re-enable buffering via Network.disable + Network.enable
with explicit buffer sizes when they need response.body()
- Added test and documentation for reading response bodies