browser-debugger-cli 0.5.1 → 0.6.0

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 (266) hide show
  1. package/README.md +50 -4
  2. package/dist/__tests__/smoke/error-handling.smoke.test.js +0 -11
  3. package/dist/__tests__/smoke/error-handling.smoke.test.js.map +1 -1
  4. package/dist/cdp/protocol.d.ts +121 -0
  5. package/dist/cdp/protocol.d.ts.map +1 -0
  6. package/dist/cdp/protocol.js +215 -0
  7. package/dist/cdp/protocol.js.map +1 -0
  8. package/dist/cdp/schema.d.ts +159 -0
  9. package/dist/cdp/schema.d.ts.map +1 -0
  10. package/dist/cdp/schema.js +256 -0
  11. package/dist/cdp/schema.js.map +1 -0
  12. package/dist/cdp/types.d.ts +139 -0
  13. package/dist/cdp/types.d.ts.map +1 -0
  14. package/dist/cdp/types.js +7 -0
  15. package/dist/cdp/types.js.map +1 -0
  16. package/dist/commands/cdp.d.ts +10 -1
  17. package/dist/commands/cdp.d.ts.map +1 -1
  18. package/dist/commands/cdp.js +363 -26
  19. package/dist/commands/cdp.js.map +1 -1
  20. package/dist/commands/cleanup.js +3 -3
  21. package/dist/commands/cleanup.js.map +1 -1
  22. package/dist/commands/dom.d.ts.map +1 -1
  23. package/dist/commands/dom.js +1 -0
  24. package/dist/commands/dom.js.map +1 -1
  25. package/dist/commands/domEvalHelpers.d.ts +2 -15
  26. package/dist/commands/domEvalHelpers.d.ts.map +1 -1
  27. package/dist/commands/domEvalHelpers.js +1 -1
  28. package/dist/commands/domEvalHelpers.js.map +1 -1
  29. package/dist/commands/peek.d.ts.map +1 -1
  30. package/dist/commands/peek.js +12 -6
  31. package/dist/commands/peek.js.map +1 -1
  32. package/dist/commands/shared/CommandRunner.d.ts +2 -0
  33. package/dist/commands/shared/CommandRunner.d.ts.map +1 -1
  34. package/dist/commands/shared/CommandRunner.js +13 -1
  35. package/dist/commands/shared/CommandRunner.js.map +1 -1
  36. package/dist/commands/shared/commonOptions.d.ts.map +1 -1
  37. package/dist/commands/shared/commonOptions.js +2 -2
  38. package/dist/commands/shared/commonOptions.js.map +1 -1
  39. package/dist/commands/start.d.ts.map +1 -1
  40. package/dist/commands/start.js +21 -12
  41. package/dist/commands/start.js.map +1 -1
  42. package/dist/commands/status.js +2 -2
  43. package/dist/commands/status.js.map +1 -1
  44. package/dist/commands/stop.js +2 -2
  45. package/dist/commands/stop.js.map +1 -1
  46. package/dist/commands/tail.d.ts.map +1 -1
  47. package/dist/commands/tail.js +9 -6
  48. package/dist/commands/tail.js.map +1 -1
  49. package/dist/connection/cdp.d.ts.map +1 -1
  50. package/dist/connection/cdp.js +15 -2
  51. package/dist/connection/cdp.js.map +1 -1
  52. package/dist/connection/domOperations.d.ts.map +1 -1
  53. package/dist/connection/domOperations.js +3 -1
  54. package/dist/connection/domOperations.js.map +1 -1
  55. package/dist/connection/handlers.d.ts +34 -2
  56. package/dist/connection/handlers.d.ts.map +1 -1
  57. package/dist/connection/handlers.js +28 -2
  58. package/dist/connection/handlers.js.map +1 -1
  59. package/dist/connection/launcher.d.ts.map +1 -1
  60. package/dist/connection/launcher.js +14 -2
  61. package/dist/connection/launcher.js.map +1 -1
  62. package/dist/connection/pageReadiness.d.ts.map +1 -1
  63. package/dist/connection/pageReadiness.js +6 -6
  64. package/dist/connection/pageReadiness.js.map +1 -1
  65. package/dist/connection/typed-cdp.d.ts +144 -0
  66. package/dist/connection/typed-cdp.d.ts.map +1 -0
  67. package/dist/connection/typed-cdp.js +120 -0
  68. package/dist/connection/typed-cdp.js.map +1 -0
  69. package/dist/daemon/worker/commandRegistry.d.ts.map +1 -1
  70. package/dist/daemon/worker/commandRegistry.js.map +1 -1
  71. package/dist/telemetry/__tests__/network.contract.test.js +124 -93
  72. package/dist/telemetry/__tests__/network.contract.test.js.map +1 -1
  73. package/dist/telemetry/console.d.ts.map +1 -1
  74. package/dist/telemetry/console.js +3 -2
  75. package/dist/telemetry/console.js.map +1 -1
  76. package/dist/telemetry/dialogs.d.ts.map +1 -1
  77. package/dist/telemetry/dialogs.js.map +1 -1
  78. package/dist/telemetry/dom.d.ts.map +1 -1
  79. package/dist/telemetry/dom.js +3 -1
  80. package/dist/telemetry/dom.js.map +1 -1
  81. package/dist/telemetry/navigation.d.ts.map +1 -1
  82. package/dist/telemetry/navigation.js.map +1 -1
  83. package/dist/telemetry/network.d.ts.map +1 -1
  84. package/dist/telemetry/network.js.map +1 -1
  85. package/dist/types.d.ts +0 -141
  86. package/dist/types.d.ts.map +1 -1
  87. package/dist/ui/messages/commands.d.ts +1 -0
  88. package/dist/ui/messages/commands.d.ts.map +1 -1
  89. package/dist/ui/messages/commands.js +1 -0
  90. package/dist/ui/messages/commands.js.map +1 -1
  91. package/dist/ui/messages/errors.d.ts +30 -3
  92. package/dist/ui/messages/errors.d.ts.map +1 -1
  93. package/dist/ui/messages/errors.js +36 -8
  94. package/dist/ui/messages/errors.js.map +1 -1
  95. package/dist/ui/messages/session.d.ts.map +1 -1
  96. package/dist/ui/messages/session.js +5 -4
  97. package/dist/ui/messages/session.js.map +1 -1
  98. package/dist/ui/messages/validation.d.ts +22 -4
  99. package/dist/ui/messages/validation.d.ts.map +1 -1
  100. package/dist/ui/messages/validation.js +26 -5
  101. package/dist/ui/messages/validation.js.map +1 -1
  102. package/package.json +2 -1
  103. package/dist/cli/commands/__tests__/start.unit.test.d.ts +0 -2
  104. package/dist/cli/commands/__tests__/start.unit.test.d.ts.map +0 -1
  105. package/dist/cli/commands/__tests__/start.unit.test.js +0 -131
  106. package/dist/cli/commands/__tests__/start.unit.test.js.map +0 -1
  107. package/dist/cli/commands/cleanup.d.ts +0 -9
  108. package/dist/cli/commands/cleanup.d.ts.map +0 -1
  109. package/dist/cli/commands/cleanup.js +0 -148
  110. package/dist/cli/commands/cleanup.js.map +0 -1
  111. package/dist/cli/commands/details.d.ts +0 -9
  112. package/dist/cli/commands/details.d.ts.map +0 -1
  113. package/dist/cli/commands/details.js +0 -120
  114. package/dist/cli/commands/details.js.map +0 -1
  115. package/dist/cli/commands/peek.d.ts +0 -9
  116. package/dist/cli/commands/peek.d.ts.map +0 -1
  117. package/dist/cli/commands/peek.js +0 -64
  118. package/dist/cli/commands/peek.js.map +0 -1
  119. package/dist/cli/commands/query.d.ts +0 -9
  120. package/dist/cli/commands/query.d.ts.map +0 -1
  121. package/dist/cli/commands/query.js +0 -125
  122. package/dist/cli/commands/query.js.map +0 -1
  123. package/dist/cli/commands/start.d.ts +0 -83
  124. package/dist/cli/commands/start.d.ts.map +0 -1
  125. package/dist/cli/commands/start.js +0 -204
  126. package/dist/cli/commands/start.js.map +0 -1
  127. package/dist/cli/commands/status.d.ts +0 -9
  128. package/dist/cli/commands/status.d.ts.map +0 -1
  129. package/dist/cli/commands/status.js +0 -75
  130. package/dist/cli/commands/status.js.map +0 -1
  131. package/dist/cli/commands/stop.d.ts +0 -9
  132. package/dist/cli/commands/stop.d.ts.map +0 -1
  133. package/dist/cli/commands/stop.js +0 -133
  134. package/dist/cli/commands/stop.js.map +0 -1
  135. package/dist/cli/formatters/detailsFormatter.d.ts +0 -10
  136. package/dist/cli/formatters/detailsFormatter.d.ts.map +0 -1
  137. package/dist/cli/formatters/detailsFormatter.js +0 -63
  138. package/dist/cli/formatters/detailsFormatter.js.map +0 -1
  139. package/dist/cli/formatters/previewFormatter.d.ts +0 -27
  140. package/dist/cli/formatters/previewFormatter.d.ts.map +0 -1
  141. package/dist/cli/formatters/previewFormatter.js +0 -155
  142. package/dist/cli/formatters/previewFormatter.js.map +0 -1
  143. package/dist/cli/formatters/statusFormatter.d.ts +0 -42
  144. package/dist/cli/formatters/statusFormatter.d.ts.map +0 -1
  145. package/dist/cli/formatters/statusFormatter.js +0 -126
  146. package/dist/cli/formatters/statusFormatter.js.map +0 -1
  147. package/dist/cli/handlers/ChromeBootstrap.d.ts +0 -24
  148. package/dist/cli/handlers/ChromeBootstrap.d.ts.map +0 -1
  149. package/dist/cli/handlers/ChromeBootstrap.js +0 -50
  150. package/dist/cli/handlers/ChromeBootstrap.js.map +0 -1
  151. package/dist/cli/handlers/OutputBuilder.d.ts +0 -59
  152. package/dist/cli/handlers/OutputBuilder.d.ts.map +0 -1
  153. package/dist/cli/handlers/OutputBuilder.js +0 -136
  154. package/dist/cli/handlers/OutputBuilder.js.map +0 -1
  155. package/dist/cli/handlers/OutputWriter.d.ts +0 -15
  156. package/dist/cli/handlers/OutputWriter.d.ts.map +0 -1
  157. package/dist/cli/handlers/OutputWriter.js +0 -34
  158. package/dist/cli/handlers/OutputWriter.js.map +0 -1
  159. package/dist/cli/handlers/PreviewWriter.d.ts +0 -52
  160. package/dist/cli/handlers/PreviewWriter.d.ts.map +0 -1
  161. package/dist/cli/handlers/PreviewWriter.js +0 -118
  162. package/dist/cli/handlers/PreviewWriter.js.map +0 -1
  163. package/dist/cli/handlers/SessionLock.d.ts +0 -16
  164. package/dist/cli/handlers/SessionLock.d.ts.map +0 -1
  165. package/dist/cli/handlers/SessionLock.js +0 -35
  166. package/dist/cli/handlers/SessionLock.js.map +0 -1
  167. package/dist/cli/handlers/SessionLoop.d.ts +0 -19
  168. package/dist/cli/handlers/SessionLoop.d.ts.map +0 -1
  169. package/dist/cli/handlers/SessionLoop.js +0 -47
  170. package/dist/cli/handlers/SessionLoop.js.map +0 -1
  171. package/dist/cli/handlers/ShutdownController.d.ts +0 -41
  172. package/dist/cli/handlers/ShutdownController.d.ts.map +0 -1
  173. package/dist/cli/handlers/ShutdownController.js +0 -94
  174. package/dist/cli/handlers/ShutdownController.js.map +0 -1
  175. package/dist/cli/handlers/SignalHandler.d.ts +0 -35
  176. package/dist/cli/handlers/SignalHandler.d.ts.map +0 -1
  177. package/dist/cli/handlers/SignalHandler.js +0 -81
  178. package/dist/cli/handlers/SignalHandler.js.map +0 -1
  179. package/dist/cli/handlers/TargetSetup.d.ts +0 -42
  180. package/dist/cli/handlers/TargetSetup.d.ts.map +0 -1
  181. package/dist/cli/handlers/TargetSetup.js +0 -87
  182. package/dist/cli/handlers/TargetSetup.js.map +0 -1
  183. package/dist/cli/handlers/sessionController.d.ts +0 -62
  184. package/dist/cli/handlers/sessionController.d.ts.map +0 -1
  185. package/dist/cli/handlers/sessionController.js +0 -316
  186. package/dist/cli/handlers/sessionController.js.map +0 -1
  187. package/dist/cli/registry.d.ts +0 -11
  188. package/dist/cli/registry.d.ts.map +0 -1
  189. package/dist/cli/registry.js +0 -21
  190. package/dist/cli/registry.js.map +0 -1
  191. package/dist/collectors/console.d.ts +0 -19
  192. package/dist/collectors/console.d.ts.map +0 -1
  193. package/dist/collectors/console.js +0 -87
  194. package/dist/collectors/console.js.map +0 -1
  195. package/dist/collectors/dom.d.ts +0 -21
  196. package/dist/collectors/dom.d.ts.map +0 -1
  197. package/dist/collectors/dom.js +0 -99
  198. package/dist/collectors/dom.js.map +0 -1
  199. package/dist/collectors/network.d.ts +0 -32
  200. package/dist/collectors/network.d.ts.map +0 -1
  201. package/dist/collectors/network.js +0 -191
  202. package/dist/collectors/network.js.map +0 -1
  203. package/dist/connection/tabs.d.ts +0 -52
  204. package/dist/connection/tabs.d.ts.map +0 -1
  205. package/dist/connection/tabs.js +0 -227
  206. package/dist/connection/tabs.js.map +0 -1
  207. package/dist/help/machineReadableHelp.d.ts +0 -100
  208. package/dist/help/machineReadableHelp.d.ts.map +0 -1
  209. package/dist/help/machineReadableHelp.js +0 -139
  210. package/dist/help/machineReadableHelp.js.map +0 -1
  211. package/dist/session/BdgSession.d.ts +0 -91
  212. package/dist/session/BdgSession.d.ts.map +0 -1
  213. package/dist/session/BdgSession.js +0 -230
  214. package/dist/session/BdgSession.js.map +0 -1
  215. package/dist/ui/errors/SystemErrors.d.ts +0 -22
  216. package/dist/ui/errors/SystemErrors.d.ts.map +0 -1
  217. package/dist/ui/errors/SystemErrors.js +0 -23
  218. package/dist/ui/errors/SystemErrors.js.map +0 -1
  219. package/dist/ui/errors.d.ts +0 -39
  220. package/dist/ui/errors.d.ts.map +0 -1
  221. package/dist/ui/errors.js +0 -48
  222. package/dist/ui/errors.js.map +0 -1
  223. package/dist/ui/messages/deprecation.d.ts +0 -30
  224. package/dist/ui/messages/deprecation.d.ts.map +0 -1
  225. package/dist/ui/messages/deprecation.js +0 -49
  226. package/dist/ui/messages/deprecation.js.map +0 -1
  227. package/dist/ui/messages/index.d.ts +0 -12
  228. package/dist/ui/messages/index.d.ts.map +0 -1
  229. package/dist/ui/messages/index.js +0 -12
  230. package/dist/ui/messages/index.js.map +0 -1
  231. package/dist/utils/__tests__/filters.unit.test.d.ts +0 -2
  232. package/dist/utils/__tests__/filters.unit.test.d.ts.map +0 -1
  233. package/dist/utils/__tests__/filters.unit.test.js +0 -239
  234. package/dist/utils/__tests__/filters.unit.test.js.map +0 -1
  235. package/dist/utils/cdpHandlers.d.ts +0 -31
  236. package/dist/utils/cdpHandlers.d.ts.map +0 -1
  237. package/dist/utils/cdpHandlers.js +0 -38
  238. package/dist/utils/cdpHandlers.js.map +0 -1
  239. package/dist/utils/chromeDiagnostics.d.ts +0 -16
  240. package/dist/utils/chromeDiagnostics.d.ts.map +0 -1
  241. package/dist/utils/chromeDiagnostics.js +0 -37
  242. package/dist/utils/chromeDiagnostics.js.map +0 -1
  243. package/dist/utils/errors.d.ts +0 -82
  244. package/dist/utils/errors.d.ts.map +0 -1
  245. package/dist/utils/errors.js +0 -88
  246. package/dist/utils/errors.js.map +0 -1
  247. package/dist/utils/filters.d.ts +0 -148
  248. package/dist/utils/filters.d.ts.map +0 -1
  249. package/dist/utils/filters.js +0 -358
  250. package/dist/utils/filters.js.map +0 -1
  251. package/dist/utils/logger.d.ts +0 -98
  252. package/dist/utils/logger.d.ts.map +0 -1
  253. package/dist/utils/logger.js +0 -93
  254. package/dist/utils/logger.js.map +0 -1
  255. package/dist/utils/pageReadiness.d.ts +0 -46
  256. package/dist/utils/pageReadiness.d.ts.map +0 -1
  257. package/dist/utils/pageReadiness.js +0 -270
  258. package/dist/utils/pageReadiness.js.map +0 -1
  259. package/dist/utils/session.d.ts +0 -200
  260. package/dist/utils/session.d.ts.map +0 -1
  261. package/dist/utils/session.js +0 -498
  262. package/dist/utils/session.js.map +0 -1
  263. package/dist/utils/validation.d.ts +0 -12
  264. package/dist/utils/validation.d.ts.map +0 -1
  265. package/dist/utils/validation.js +0 -20
  266. package/dist/utils/validation.js.map +0 -1
@@ -1,98 +0,0 @@
1
- /**
2
- * Logging utilities for consistent formatted output with log level support.
3
- *
4
- * WHY: Centralizes log formatting and enables debug mode for verbose logging.
5
- * By default, only 'info' level logs are shown. Set BDG_DEBUG=1 or use --debug
6
- * flag to enable verbose 'debug' level logs.
7
- */
8
- /**
9
- * Enable debug logging globally.
10
- *
11
- * This is typically called during CLI initialization when --debug flag is detected.
12
- * Debug mode shows all logs including verbose internal state changes and tracing.
13
- */
14
- export declare function enableDebugLogging(): void;
15
- /**
16
- * Check if debug logging is currently enabled.
17
- *
18
- * @returns True if debug mode is active
19
- */
20
- export declare function isDebugEnabled(): boolean;
21
- /**
22
- * Log level determines visibility of log messages.
23
- *
24
- * - 'info': Always shown (important user-facing messages, errors, key milestones)
25
- * - 'debug': Only shown in debug mode (verbose internal state, IPC traces, progress updates)
26
- */
27
- export type LogLevel = 'info' | 'debug';
28
- /**
29
- * Log contexts for different components.
30
- * Used to prefix log messages with component name.
31
- */
32
- export type LogContext = 'bdg' | 'launcher' | 'daemon' | 'worker' | 'client' | 'cleanup' | 'session' | 'chrome' | 'cdp' | 'ipc';
33
- /**
34
- * Logger instance with support for different log levels.
35
- */
36
- export interface Logger {
37
- /**
38
- * Log an info message (always shown).
39
- * Use for important user-facing messages and key milestones.
40
- */
41
- info: (message: string) => void;
42
- /**
43
- * Log a debug message (only shown in debug mode).
44
- * Use for verbose internal state, progress updates, and traces.
45
- */
46
- debug: (message: string) => void;
47
- /**
48
- * Log a message (defaults to info level).
49
- * Provided for backward compatibility.
50
- */
51
- (message: string): void;
52
- }
53
- /**
54
- * Create a logger instance for a specific context.
55
- *
56
- * WHY: Provides consistent log formatting with context prefix and level support.
57
- * By default, ALL logs are hidden unless --debug flag or BDG_DEBUG=1 is set.
58
- * This keeps normal output clean and only shows logs when debugging.
59
- *
60
- * @param context - Component context for log prefix
61
- * @returns Logger instance with info/debug methods
62
- *
63
- * @example
64
- * ```typescript
65
- * const log = createLogger('cleanup');
66
- *
67
- * // Always shown (even without --debug)
68
- * log.info('Cleaned up stale session files');
69
- *
70
- * // Only shown in debug mode (--debug or BDG_DEBUG=1)
71
- * log.debug('Checking PID file at ~/.bdg/daemon.pid');
72
- *
73
- * // Backward compatible (treated as debug - only shown in debug mode)
74
- * log('Daemon started successfully');
75
- * ```
76
- */
77
- export declare function createLogger(context: LogContext): Logger;
78
- /**
79
- * Log a message with a specific context (one-off usage).
80
- *
81
- * WHY: Convenient for single log statements without creating a logger instance.
82
- *
83
- * @param context - Component context for log prefix
84
- * @param message - Log message
85
- * @param level - Log level (defaults to 'debug' - only shown with --debug)
86
- *
87
- * @example
88
- * ```typescript
89
- * // Always shown (even without --debug)
90
- * log('cleanup', 'Removed stale daemon socket', 'info');
91
- *
92
- * // Only shown in debug mode (default behavior)
93
- * log('cleanup', 'Found PID file');
94
- * log('cleanup', 'Checking lock file', 'debug');
95
- * ```
96
- */
97
- export declare function log(context: LogContext, message: string, level?: LogLevel): void;
98
- //# sourceMappingURL=logger.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAMD;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAExC;;;GAGG;AACH,MAAM,MAAM,UAAU,GAClB,KAAK,GACL,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,SAAS,GACT,QAAQ,GACR,KAAK,GACL,KAAK,CAAC;AAMV;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB;;;OAGG;IACH,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAEhC;;;OAGG;IACH,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAEjC;;;OAGG;IACH,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAaxD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,QAAkB,GAAG,IAAI,CAKzF"}
@@ -1,93 +0,0 @@
1
- /**
2
- * Logging utilities for consistent formatted output with log level support.
3
- *
4
- * WHY: Centralizes log formatting and enables debug mode for verbose logging.
5
- * By default, only 'info' level logs are shown. Set BDG_DEBUG=1 or use --debug
6
- * flag to enable verbose 'debug' level logs.
7
- */
8
- // ============================================================================
9
- // Global Debug State
10
- // ============================================================================
11
- let debugEnabled = false;
12
- /**
13
- * Enable debug logging globally.
14
- *
15
- * This is typically called during CLI initialization when --debug flag is detected.
16
- * Debug mode shows all logs including verbose internal state changes and tracing.
17
- */
18
- export function enableDebugLogging() {
19
- debugEnabled = true;
20
- }
21
- /**
22
- * Check if debug logging is currently enabled.
23
- *
24
- * @returns True if debug mode is active
25
- */
26
- export function isDebugEnabled() {
27
- return debugEnabled || process.env['BDG_DEBUG'] === '1';
28
- }
29
- // ============================================================================
30
- // Logger Implementation
31
- // ============================================================================
32
- /**
33
- * Create a logger instance for a specific context.
34
- *
35
- * WHY: Provides consistent log formatting with context prefix and level support.
36
- * By default, ALL logs are hidden unless --debug flag or BDG_DEBUG=1 is set.
37
- * This keeps normal output clean and only shows logs when debugging.
38
- *
39
- * @param context - Component context for log prefix
40
- * @returns Logger instance with info/debug methods
41
- *
42
- * @example
43
- * ```typescript
44
- * const log = createLogger('cleanup');
45
- *
46
- * // Always shown (even without --debug)
47
- * log.info('Cleaned up stale session files');
48
- *
49
- * // Only shown in debug mode (--debug or BDG_DEBUG=1)
50
- * log.debug('Checking PID file at ~/.bdg/daemon.pid');
51
- *
52
- * // Backward compatible (treated as debug - only shown in debug mode)
53
- * log('Daemon started successfully');
54
- * ```
55
- */
56
- export function createLogger(context) {
57
- const logMessage = (message, level = 'debug') => {
58
- if (level === 'debug' && !isDebugEnabled()) {
59
- return;
60
- }
61
- console.error(`[${context}] ${message}`);
62
- };
63
- const logger = ((message) => logMessage(message, 'debug'));
64
- logger.info = (message) => logMessage(message, 'info');
65
- logger.debug = (message) => logMessage(message, 'debug');
66
- return logger;
67
- }
68
- /**
69
- * Log a message with a specific context (one-off usage).
70
- *
71
- * WHY: Convenient for single log statements without creating a logger instance.
72
- *
73
- * @param context - Component context for log prefix
74
- * @param message - Log message
75
- * @param level - Log level (defaults to 'debug' - only shown with --debug)
76
- *
77
- * @example
78
- * ```typescript
79
- * // Always shown (even without --debug)
80
- * log('cleanup', 'Removed stale daemon socket', 'info');
81
- *
82
- * // Only shown in debug mode (default behavior)
83
- * log('cleanup', 'Found PID file');
84
- * log('cleanup', 'Checking lock file', 'debug');
85
- * ```
86
- */
87
- export function log(context, message, level = 'debug') {
88
- if (level === 'debug' && !isDebugEnabled()) {
89
- return;
90
- }
91
- console.error(`[${context}] ${message}`);
92
- }
93
- //# sourceMappingURL=logger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,IAAI,YAAY,GAAG,KAAK,CAAC;AAEzB;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB;IAChC,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC;AAC1D,CAAC;AAyDD,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,YAAY,CAAC,OAAmB;IAC9C,MAAM,UAAU,GAAG,CAAC,OAAe,EAAE,QAAkB,OAAO,EAAQ,EAAE;QACtE,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC3C,OAAO;QACT,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,CAAC,OAAe,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAW,CAAC;IAC7E,MAAM,CAAC,IAAI,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC/D,MAAM,CAAC,KAAK,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAEjE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,GAAG,CAAC,OAAmB,EAAE,OAAe,EAAE,QAAkB,OAAO;IACjF,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QAC3C,OAAO;IACT,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC,CAAC;AAC3C,CAAC"}
@@ -1,46 +0,0 @@
1
- /**
2
- * Smart page readiness detection using self-tuning thresholds
3
- *
4
- * This module provides adaptive page load detection that works for any page type
5
- * without configuration. It uses a three-phase approach:
6
- * 1. Load event (baseline readiness)
7
- * 2. Network stability (adapts to request patterns)
8
- * 3. DOM stability (adapts to mutation rate)
9
- */
10
- import type { CDPConnection } from '../connection/cdp.js';
11
- /**
12
- * Options for page readiness detection
13
- */
14
- export interface PageReadinessOptions {
15
- /**
16
- * Maximum wait time before proceeding anyway
17
- * Default: 5000ms (5 seconds)
18
- */
19
- maxWaitMs?: number;
20
- }
21
- /**
22
- * Wait for page to be ready using self-tuning detection
23
- *
24
- * Strategy (always applied):
25
- * 1. Wait for load event (baseline readiness)
26
- * 2. Wait for network to stabilize (adaptive 200ms idle)
27
- * 3. Wait for DOM to stabilize (adaptive 300ms idle)
28
- *
29
- * All thresholds adapt to observed page behavior.
30
- * No framework detection, no configuration needed.
31
- * Works for static HTML, SPAs, and everything in between.
32
- *
33
- * @param cdp - CDP connection
34
- * @param options - Optional configuration
35
- *
36
- * @example
37
- * ```typescript
38
- * // Default: Wait up to 5s for full stability
39
- * await waitForPageReady(cdp);
40
- *
41
- * // Custom timeout for very slow apps
42
- * await waitForPageReady(cdp, { maxWaitMs: 15000 });
43
- * ```
44
- */
45
- export declare function waitForPageReady(cdp: CDPConnection, options?: PageReadinessOptions): Promise<void>;
46
- //# sourceMappingURL=pageReadiness.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pageReadiness.d.ts","sourceRoot":"","sources":["../../src/utils/pageReadiness.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,aAAa,EAClB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CAuBf"}
@@ -1,270 +0,0 @@
1
- /**
2
- * Smart page readiness detection using self-tuning thresholds
3
- *
4
- * This module provides adaptive page load detection that works for any page type
5
- * without configuration. It uses a three-phase approach:
6
- * 1. Load event (baseline readiness)
7
- * 2. Network stability (adapts to request patterns)
8
- * 3. DOM stability (adapts to mutation rate)
9
- */
10
- /**
11
- * Wait for page to be ready using self-tuning detection
12
- *
13
- * Strategy (always applied):
14
- * 1. Wait for load event (baseline readiness)
15
- * 2. Wait for network to stabilize (adaptive 200ms idle)
16
- * 3. Wait for DOM to stabilize (adaptive 300ms idle)
17
- *
18
- * All thresholds adapt to observed page behavior.
19
- * No framework detection, no configuration needed.
20
- * Works for static HTML, SPAs, and everything in between.
21
- *
22
- * @param cdp - CDP connection
23
- * @param options - Optional configuration
24
- *
25
- * @example
26
- * ```typescript
27
- * // Default: Wait up to 5s for full stability
28
- * await waitForPageReady(cdp);
29
- *
30
- * // Custom timeout for very slow apps
31
- * await waitForPageReady(cdp, { maxWaitMs: 15000 });
32
- * ```
33
- */
34
- export async function waitForPageReady(cdp, options = {}) {
35
- const maxWaitMs = options.maxWaitMs ?? 5000;
36
- const deadline = Date.now() + maxWaitMs;
37
- try {
38
- // Phase 1: Wait for load event (baseline)
39
- await waitForLoadEvent(cdp, deadline);
40
- console.error('[readiness] ✓ Load event');
41
- // Phase 2: Wait for network stability (always - modern web is async)
42
- const networkIdleMs = await waitForNetworkStable(cdp, deadline);
43
- console.error(`[readiness] ✓ Network stable (${networkIdleMs}ms idle)`);
44
- // Phase 3: Wait for DOM stability (always - SPAs mutate after load)
45
- const domIdleMs = await waitForDOMStable(cdp, deadline);
46
- console.error(`[readiness] ✓ DOM stable (${domIdleMs}ms idle)`);
47
- console.error('[readiness] ✓ Page ready');
48
- }
49
- catch (error) {
50
- const message = error instanceof Error ? error.message : String(error);
51
- console.error(`[readiness] ${message}, proceeding anyway`);
52
- // Don't rethrow - allow session to continue
53
- }
54
- }
55
- /**
56
- * Wait for Page.loadEventFired (window.onload equivalent)
57
- *
58
- * This is the browser's native load event - fires when:
59
- * - Document is fully loaded
60
- * - All synchronous scripts executed
61
- * - DOMContentLoaded already fired
62
- *
63
- * Framework-agnostic baseline.
64
- *
65
- * Handles edge case where load event already fired (Chrome navigates during launch).
66
- *
67
- * @param cdp - CDP connection
68
- * @param deadline - Timestamp when to timeout
69
- * @throws Error if deadline exceeded
70
- */
71
- async function waitForLoadEvent(cdp, deadline) {
72
- await cdp.send('Page.enable');
73
- // Check if page already loaded (handles Chrome pre-navigation)
74
- try {
75
- const result = await cdp.send('Runtime.evaluate', {
76
- expression: 'document.readyState',
77
- returnByValue: true,
78
- });
79
- if (result.result?.value === 'complete') {
80
- // Load event already fired
81
- return;
82
- }
83
- }
84
- catch {
85
- // Ignore evaluation errors, proceed to wait for event
86
- }
87
- return new Promise((resolve, reject) => {
88
- let timeout;
89
- let handlerId;
90
- const cleanup = () => {
91
- clearTimeout(timeout);
92
- if (handlerId !== undefined) {
93
- cdp.off('Page.loadEventFired', handlerId);
94
- }
95
- };
96
- const checkDeadline = () => {
97
- if (Date.now() >= deadline) {
98
- cleanup();
99
- reject(new Error('Load event timeout'));
100
- }
101
- else {
102
- timeout = setTimeout(checkDeadline, 100);
103
- }
104
- };
105
- const loadHandler = () => {
106
- cleanup();
107
- resolve();
108
- };
109
- handlerId = cdp.on('Page.loadEventFired', loadHandler);
110
- checkDeadline();
111
- });
112
- }
113
- /**
114
- * Wait for network to stabilize
115
- *
116
- * Uses a fixed 200ms idle threshold which works well for most pages:
117
- * - Fast enough for quick sites (avoids unnecessary waiting)
118
- * - Patient enough for API-heavy apps (catches late requests)
119
- * - Simpler and more predictable than adaptive learning
120
- *
121
- * Network is considered stable when there are zero active requests
122
- * for at least 200ms continuously.
123
- *
124
- * Why this works:
125
- * - Catches initial request bursts (CSS, JS, images)
126
- * - Waits for lazy-loaded resources
127
- * - Detects API calls triggered by hydration
128
- * - Framework-agnostic - based on actual network activity
129
- *
130
- * @param cdp - CDP connection
131
- * @param deadline - Timestamp when to timeout
132
- * @returns Actual idle duration detected
133
- * @throws Error if deadline exceeded
134
- */
135
- async function waitForNetworkStable(cdp, deadline) {
136
- await cdp.send('Network.enable');
137
- let activeRequests = 0;
138
- let lastActivity = Date.now();
139
- const intervals = [];
140
- let lastRequestTime = Date.now();
141
- // Track request patterns
142
- const requestHandler = () => {
143
- const now = Date.now();
144
- const interval = now - lastRequestTime;
145
- if (interval < 5000)
146
- intervals.push(interval);
147
- lastRequestTime = now;
148
- activeRequests++;
149
- lastActivity = now;
150
- };
151
- const finishHandler = () => {
152
- activeRequests--;
153
- if (activeRequests === 0) {
154
- lastActivity = Date.now();
155
- }
156
- };
157
- const requestHandlerId = cdp.on('Network.requestWillBeSent', requestHandler);
158
- const loadingFinishedId = cdp.on('Network.loadingFinished', finishHandler);
159
- const loadingFailedId = cdp.on('Network.loadingFailed', finishHandler);
160
- try {
161
- // Use fixed threshold for immediate detection
162
- const idleThreshold = 200; // 200ms idle = network stable
163
- // Detection phase: wait for stability
164
- while (Date.now() < deadline) {
165
- if (activeRequests === 0) {
166
- const idleTime = Date.now() - lastActivity;
167
- if (idleTime >= idleThreshold) {
168
- return idleTime; // Success!
169
- }
170
- }
171
- await delay(50); // Check every 50ms
172
- }
173
- throw new Error('Network stability timeout');
174
- }
175
- finally {
176
- // Cleanup handlers
177
- cdp.off('Network.requestWillBeSent', requestHandlerId);
178
- cdp.off('Network.loadingFinished', loadingFinishedId);
179
- cdp.off('Network.loadingFailed', loadingFailedId);
180
- }
181
- }
182
- /**
183
- * Wait for DOM to stabilize
184
- *
185
- * Uses a MutationObserver to detect when the DOM stops changing.
186
- * DOM is considered stable when there are no mutations for 300ms continuously.
187
- *
188
- * HOW IT WORKS:
189
- * 1. Inject MutationObserver into page to track all DOM changes
190
- * 2. Monitor childList, attributes, subtree, and characterData changes
191
- * 3. Wait for 300ms of continuous no-change activity
192
- * 4. Clean up observer when complete
193
- *
194
- * Why this works:
195
- * - SSR hydration causes DOM mutations (React, Vue, Svelte)
196
- * - Client-side rendering creates DOM elements
197
- * - When mutations stop, framework initialization is complete
198
- * - 300ms is long enough to catch batched updates, short enough to be responsive
199
- *
200
- * Framework-agnostic - detects actual mutations regardless of framework.
201
- *
202
- * @param cdp - CDP connection
203
- * @param deadline - Timestamp when to timeout
204
- * @returns Actual stable duration detected
205
- * @throws Error if deadline exceeded
206
- */
207
- async function waitForDOMStable(cdp, deadline) {
208
- // Inject mutation observer
209
- await cdp.send('Runtime.evaluate', {
210
- expression: `
211
- window.__bdg_mutations = 0;
212
- window.__bdg_lastMutation = Date.now();
213
-
214
- const observer = new MutationObserver(() => {
215
- window.__bdg_mutations++;
216
- window.__bdg_lastMutation = Date.now();
217
- });
218
-
219
- observer.observe(document.body, {
220
- childList: true,
221
- subtree: true,
222
- attributes: true,
223
- characterData: true
224
- });
225
-
226
- window.__bdg_observer = observer;
227
- `,
228
- });
229
- try {
230
- // Use fixed threshold for immediate detection
231
- const stableThreshold = 300; // 300ms no mutations = DOM stable
232
- // Detection phase: wait for stability
233
- while (Date.now() < deadline) {
234
- const checkResult = await cdp.send('Runtime.evaluate', {
235
- expression: 'Date.now() - window.__bdg_lastMutation',
236
- returnByValue: true,
237
- });
238
- const timeSinceLastMutation = checkResult.result?.value ?? 0;
239
- if (timeSinceLastMutation >= stableThreshold) {
240
- return timeSinceLastMutation; // Success!
241
- }
242
- await delay(100); // Check every 100ms
243
- }
244
- throw new Error('DOM stability timeout');
245
- }
246
- finally {
247
- // Cleanup observer
248
- await cdp
249
- .send('Runtime.evaluate', {
250
- expression: `
251
- window.__bdg_observer?.disconnect();
252
- delete window.__bdg_observer;
253
- delete window.__bdg_mutations;
254
- delete window.__bdg_lastMutation;
255
- `,
256
- })
257
- .catch(() => {
258
- // Ignore cleanup errors
259
- });
260
- }
261
- }
262
- /**
263
- * Delay utility
264
- *
265
- * @param ms - Milliseconds to delay
266
- */
267
- function delay(ms) {
268
- return new Promise((resolve) => setTimeout(resolve, ms));
269
- }
270
- //# sourceMappingURL=pageReadiness.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pageReadiness.js","sourceRoot":"","sources":["../../src/utils/pageReadiness.ts"],"names":[],"mappings":"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"}