playwriter 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/dist/bippy.js +1 -1
  2. package/dist/cdp-log.d.ts +4 -1
  3. package/dist/cdp-log.d.ts.map +1 -1
  4. package/dist/cdp-log.js +39 -2
  5. package/dist/cdp-log.js.map +1 -1
  6. package/dist/cdp-log.test.d.ts +2 -0
  7. package/dist/cdp-log.test.d.ts.map +1 -0
  8. package/dist/cdp-log.test.js +109 -0
  9. package/dist/cdp-log.test.js.map +1 -0
  10. package/dist/cdp-relay.d.ts.map +1 -1
  11. package/dist/cdp-relay.js +99 -6
  12. package/dist/cdp-relay.js.map +1 -1
  13. package/dist/cli.js +14 -12
  14. package/dist/cli.js.map +1 -1
  15. package/dist/executor.d.ts +3 -0
  16. package/dist/executor.d.ts.map +1 -1
  17. package/dist/executor.js +106 -36
  18. package/dist/executor.js.map +1 -1
  19. package/dist/extension/background.js +23 -12
  20. package/dist/extension/manifest.json +1 -1
  21. package/dist/prompt.md +32 -13
  22. package/dist/readability.js +1 -1
  23. package/dist/relay-client.d.ts +11 -0
  24. package/dist/relay-client.d.ts.map +1 -1
  25. package/dist/relay-client.js +46 -1
  26. package/dist/relay-client.js.map +1 -1
  27. package/dist/relay-core.test.js +10 -6
  28. package/dist/relay-core.test.js.map +1 -1
  29. package/dist/relay-session.test.js +9 -1
  30. package/dist/relay-session.test.js.map +1 -1
  31. package/dist/relay-state.test.js +57 -1
  32. package/dist/relay-state.test.js.map +1 -1
  33. package/dist/selector-generator.js +1 -1
  34. package/dist/start-relay-server.d.ts +1 -1
  35. package/dist/start-relay-server.d.ts.map +1 -1
  36. package/dist/start-relay-server.js +23 -1
  37. package/dist/start-relay-server.js.map +1 -1
  38. package/dist/utils.d.ts +1 -0
  39. package/dist/utils.d.ts.map +1 -1
  40. package/dist/utils.js +3 -0
  41. package/dist/utils.js.map +1 -1
  42. package/package.json +1 -1
  43. package/src/cdp-log.test.ts +131 -0
  44. package/src/cdp-log.ts +44 -2
  45. package/src/cdp-relay.ts +104 -6
  46. package/src/cli.ts +14 -13
  47. package/src/executor.ts +122 -39
  48. package/src/relay-client.ts +62 -5
  49. package/src/relay-core.test.ts +10 -6
  50. package/src/relay-session.test.ts +9 -1
  51. package/src/relay-state.test.ts +67 -1
  52. package/src/skill.md +32 -13
  53. package/src/start-relay-server.ts +22 -1
  54. package/src/utils.ts +4 -0
@@ -1,5 +1,6 @@
1
1
  import { startPlayWriterCDPRelayServer } from './cdp-relay.js'
2
2
  import { createFileLogger } from './create-logger.js'
3
+ import { waitForRelayVersion } from './relay-client.js'
3
4
  import { LOG_CDP_FILE_PATH } from './utils.js'
4
5
 
5
6
  process.title = 'playwriter-ws-server'
@@ -25,7 +26,27 @@ export async function startServer({
25
26
  host = '127.0.0.1',
26
27
  token,
27
28
  }: { port?: number; host?: string; token?: string } = {}) {
28
- const server = await startPlayWriterCDPRelayServer({ port, host, token, logger })
29
+ let server
30
+ try {
31
+ server = await startPlayWriterCDPRelayServer({ port, host, token, logger })
32
+ } catch (err: unknown) {
33
+ // When two relay processes race to start (issue #75), the loser gets
34
+ // EADDRINUSE. Check if the winner is a valid relay and exit cleanly
35
+ // instead of crashing with a scary error in the logs.
36
+ const errWithCode = err as NodeJS.ErrnoException
37
+ if (errWithCode?.code === 'EADDRINUSE') {
38
+ // The winner may have bound the port but not be ready to answer /version
39
+ // yet, so poll for up to 2 seconds before giving up.
40
+ const version = await waitForRelayVersion({ port })
41
+ if (version) {
42
+ await logger.log(`Another relay (v${version}) already bound to port ${port}, exiting gracefully`)
43
+ process.exit(0)
44
+ }
45
+ await logger.error(`Port ${port} is in use by a non-relay process`)
46
+ process.exit(1)
47
+ }
48
+ throw err
49
+ }
29
50
 
30
51
  console.log('CDP Relay Server running. Press Ctrl+C to stop.')
31
52
  console.log('Logs are being written to:', logger.logFilePath)
package/src/utils.ts CHANGED
@@ -56,6 +56,10 @@ export function getCdpUrl({
56
56
  return `${wsBaseUrl}/cdp/${id}${suffix}`
57
57
  }
58
58
 
59
+ export function shouldAutoEnablePlaywriter(): boolean {
60
+ return process.env.PLAYWRITER_AUTO_ENABLE?.toLowerCase() !== 'false'
61
+ }
62
+
59
63
  // Use ~/.playwriter for logs so each OS user gets their own dir (avoids permission errors on shared machines, see #44)
60
64
  const LOG_BASE_DIR = path.join(os.homedir(), '.playwriter')
61
65
  export const LOG_FILE_PATH = process.env.PLAYWRITER_LOG_FILE_PATH || path.join(LOG_BASE_DIR, 'relay-server.log')