browser-debugger-cli 0.3.0 → 0.5.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 (484) hide show
  1. package/README.md +137 -126
  2. package/dist/__tests__/smoke/error-handling.smoke.test.d.ts +8 -0
  3. package/dist/__tests__/smoke/error-handling.smoke.test.d.ts.map +1 -0
  4. package/dist/__tests__/smoke/error-handling.smoke.test.js +106 -0
  5. package/dist/__tests__/smoke/error-handling.smoke.test.js.map +1 -0
  6. package/dist/__tests__/smoke/session-lifecycle.smoke.test.d.ts +8 -0
  7. package/dist/__tests__/smoke/session-lifecycle.smoke.test.d.ts.map +1 -0
  8. package/dist/__tests__/smoke/session-lifecycle.smoke.test.js +109 -0
  9. package/dist/__tests__/smoke/session-lifecycle.smoke.test.js.map +1 -0
  10. package/dist/__testutils__/commandRunner.d.ts +45 -0
  11. package/dist/__testutils__/commandRunner.d.ts.map +1 -0
  12. package/dist/__testutils__/commandRunner.js +108 -0
  13. package/dist/__testutils__/commandRunner.js.map +1 -0
  14. package/dist/__testutils__/daemonHelpers.d.ts +81 -0
  15. package/dist/__testutils__/daemonHelpers.d.ts.map +1 -0
  16. package/dist/__testutils__/daemonHelpers.js +206 -0
  17. package/dist/__testutils__/daemonHelpers.js.map +1 -0
  18. package/dist/__testutils__/index.d.ts +1 -0
  19. package/dist/__testutils__/index.d.ts.map +1 -1
  20. package/dist/__testutils__/index.js +1 -0
  21. package/dist/__testutils__/index.js.map +1 -1
  22. package/dist/__testutils__/testCleanup.d.ts +45 -0
  23. package/dist/__testutils__/testCleanup.d.ts.map +1 -0
  24. package/dist/__testutils__/testCleanup.js +87 -0
  25. package/dist/__testutils__/testCleanup.js.map +1 -0
  26. package/dist/__testutils__/testHome.d.ts +26 -0
  27. package/dist/__testutils__/testHome.d.ts.map +1 -0
  28. package/dist/__testutils__/testHome.js +57 -0
  29. package/dist/__testutils__/testHome.js.map +1 -0
  30. package/dist/__testutils__/testProcess.d.ts.map +1 -1
  31. package/dist/__testutils__/testProcess.js +11 -3
  32. package/dist/__testutils__/testProcess.js.map +1 -1
  33. package/dist/cli/commands/__tests__/start.unit.test.d.ts +2 -0
  34. package/dist/cli/commands/__tests__/start.unit.test.d.ts.map +1 -0
  35. package/dist/cli/commands/__tests__/start.unit.test.js +131 -0
  36. package/dist/cli/commands/__tests__/start.unit.test.js.map +1 -0
  37. package/dist/cli/commands/cleanup.d.ts +1 -0
  38. package/dist/cli/commands/cleanup.d.ts.map +1 -1
  39. package/dist/cli/commands/cleanup.js +80 -61
  40. package/dist/cli/commands/cleanup.js.map +1 -1
  41. package/dist/cli/commands/details.d.ts +2 -1
  42. package/dist/cli/commands/details.d.ts.map +1 -1
  43. package/dist/cli/commands/details.js +104 -52
  44. package/dist/cli/commands/details.js.map +1 -1
  45. package/dist/cli/commands/peek.d.ts +2 -1
  46. package/dist/cli/commands/peek.d.ts.map +1 -1
  47. package/dist/cli/commands/peek.js +22 -67
  48. package/dist/cli/commands/peek.js.map +1 -1
  49. package/dist/cli/commands/query.d.ts +9 -0
  50. package/dist/cli/commands/query.d.ts.map +1 -0
  51. package/dist/cli/commands/query.js +125 -0
  52. package/dist/cli/commands/query.js.map +1 -0
  53. package/dist/cli/commands/start.d.ts +74 -0
  54. package/dist/cli/commands/start.d.ts.map +1 -1
  55. package/dist/cli/commands/start.js +147 -38
  56. package/dist/cli/commands/start.js.map +1 -1
  57. package/dist/cli/commands/status.d.ts.map +1 -1
  58. package/dist/cli/commands/status.js +37 -49
  59. package/dist/cli/commands/status.js.map +1 -1
  60. package/dist/cli/commands/stop.d.ts +1 -0
  61. package/dist/cli/commands/stop.d.ts.map +1 -1
  62. package/dist/cli/commands/stop.js +106 -120
  63. package/dist/cli/commands/stop.js.map +1 -1
  64. package/dist/cli/formatters/detailsFormatter.d.ts +1 -1
  65. package/dist/cli/formatters/previewFormatter.d.ts +7 -7
  66. package/dist/cli/formatters/previewFormatter.d.ts.map +1 -1
  67. package/dist/cli/formatters/previewFormatter.js +5 -10
  68. package/dist/cli/formatters/previewFormatter.js.map +1 -1
  69. package/dist/cli/formatters/statusFormatter.d.ts +13 -10
  70. package/dist/cli/formatters/statusFormatter.d.ts.map +1 -1
  71. package/dist/cli/formatters/statusFormatter.js +26 -53
  72. package/dist/cli/formatters/statusFormatter.js.map +1 -1
  73. package/dist/cli/handlers/ChromeBootstrap.d.ts +24 -0
  74. package/dist/cli/handlers/ChromeBootstrap.d.ts.map +1 -0
  75. package/dist/cli/handlers/ChromeBootstrap.js +50 -0
  76. package/dist/cli/handlers/ChromeBootstrap.js.map +1 -0
  77. package/dist/cli/handlers/OutputBuilder.d.ts +2 -3
  78. package/dist/cli/handlers/OutputBuilder.d.ts.map +1 -1
  79. package/dist/cli/handlers/OutputBuilder.js +2 -4
  80. package/dist/cli/handlers/OutputBuilder.js.map +1 -1
  81. package/dist/cli/handlers/OutputWriter.d.ts +15 -0
  82. package/dist/cli/handlers/OutputWriter.d.ts.map +1 -0
  83. package/dist/cli/handlers/OutputWriter.js +34 -0
  84. package/dist/cli/handlers/OutputWriter.js.map +1 -0
  85. package/dist/cli/handlers/PreviewWriter.d.ts +52 -0
  86. package/dist/cli/handlers/PreviewWriter.d.ts.map +1 -0
  87. package/dist/cli/handlers/PreviewWriter.js +118 -0
  88. package/dist/cli/handlers/PreviewWriter.js.map +1 -0
  89. package/dist/cli/handlers/SessionLock.d.ts +16 -0
  90. package/dist/cli/handlers/SessionLock.d.ts.map +1 -0
  91. package/dist/cli/handlers/SessionLock.js +35 -0
  92. package/dist/cli/handlers/SessionLock.js.map +1 -0
  93. package/dist/cli/handlers/SessionLoop.d.ts +19 -0
  94. package/dist/cli/handlers/SessionLoop.d.ts.map +1 -0
  95. package/dist/cli/handlers/SessionLoop.js +47 -0
  96. package/dist/cli/handlers/SessionLoop.js.map +1 -0
  97. package/dist/cli/handlers/ShutdownController.d.ts +41 -0
  98. package/dist/cli/handlers/ShutdownController.d.ts.map +1 -0
  99. package/dist/cli/handlers/ShutdownController.js +94 -0
  100. package/dist/cli/handlers/ShutdownController.js.map +1 -0
  101. package/dist/cli/handlers/SignalHandler.d.ts +35 -0
  102. package/dist/cli/handlers/SignalHandler.d.ts.map +1 -0
  103. package/dist/cli/handlers/SignalHandler.js +81 -0
  104. package/dist/cli/handlers/SignalHandler.js.map +1 -0
  105. package/dist/cli/handlers/TargetSetup.d.ts +42 -0
  106. package/dist/cli/handlers/TargetSetup.d.ts.map +1 -0
  107. package/dist/cli/handlers/TargetSetup.js +87 -0
  108. package/dist/cli/handlers/TargetSetup.js.map +1 -0
  109. package/dist/cli/handlers/sessionController.d.ts +41 -0
  110. package/dist/cli/handlers/sessionController.d.ts.map +1 -1
  111. package/dist/cli/handlers/sessionController.js +266 -5
  112. package/dist/cli/handlers/sessionController.js.map +1 -1
  113. package/dist/cli/registry.d.ts +2 -2
  114. package/dist/cli/registry.d.ts.map +1 -1
  115. package/dist/cli/registry.js +12 -37
  116. package/dist/cli/registry.js.map +1 -1
  117. package/dist/collectors/console.d.ts +1 -1
  118. package/dist/collectors/console.js +2 -2
  119. package/dist/collectors/console.js.map +1 -1
  120. package/dist/collectors/dom.d.ts +1 -1
  121. package/dist/collectors/network.d.ts +1 -2
  122. package/dist/collectors/network.d.ts.map +1 -1
  123. package/dist/collectors/network.js +3 -3
  124. package/dist/collectors/network.js.map +1 -1
  125. package/dist/commands/cdp.js +1 -1
  126. package/dist/commands/cdp.js.map +1 -1
  127. package/dist/commands/cleanup.d.ts.map +1 -1
  128. package/dist/commands/cleanup.js +12 -15
  129. package/dist/commands/cleanup.js.map +1 -1
  130. package/dist/commands/dom.d.ts.map +1 -1
  131. package/dist/commands/dom.js +13 -19
  132. package/dist/commands/dom.js.map +1 -1
  133. package/dist/commands/domEvalHelpers.d.ts +1 -1
  134. package/dist/commands/domEvalHelpers.d.ts.map +1 -1
  135. package/dist/commands/domEvalHelpers.js +56 -7
  136. package/dist/commands/domEvalHelpers.js.map +1 -1
  137. package/dist/commands/domOptionsBuilder.d.ts +32 -0
  138. package/dist/commands/domOptionsBuilder.d.ts.map +1 -1
  139. package/dist/commands/domOptionsBuilder.js +35 -0
  140. package/dist/commands/domOptionsBuilder.js.map +1 -1
  141. package/dist/commands/machineReadableHelp.d.ts +98 -0
  142. package/dist/commands/machineReadableHelp.d.ts.map +1 -0
  143. package/dist/commands/machineReadableHelp.js +137 -0
  144. package/dist/commands/machineReadableHelp.js.map +1 -0
  145. package/dist/commands/shared/CommandRunner.d.ts.map +1 -1
  146. package/dist/commands/shared/CommandRunner.js +2 -3
  147. package/dist/commands/shared/CommandRunner.js.map +1 -1
  148. package/dist/commands/shared/OutputBuilder.js +1 -1
  149. package/dist/commands/shared/OutputBuilder.js.map +1 -1
  150. package/dist/commands/shared/commonOptions.d.ts.map +1 -1
  151. package/dist/commands/shared/commonOptions.js +9 -3
  152. package/dist/commands/shared/commonOptions.js.map +1 -1
  153. package/dist/commands/shared/daemonSessionController.d.ts +2 -0
  154. package/dist/commands/shared/daemonSessionController.d.ts.map +1 -1
  155. package/dist/commands/shared/daemonSessionController.js +13 -16
  156. package/dist/commands/shared/daemonSessionController.js.map +1 -1
  157. package/dist/commands/shared/sessionController.js +1 -1
  158. package/dist/commands/shared/sessionController.js.map +1 -1
  159. package/dist/commands/start.d.ts.map +1 -1
  160. package/dist/commands/start.js +16 -1
  161. package/dist/commands/start.js.map +1 -1
  162. package/dist/commands/status.d.ts.map +1 -1
  163. package/dist/commands/status.js +72 -55
  164. package/dist/commands/status.js.map +1 -1
  165. package/dist/commands/stop.d.ts.map +1 -1
  166. package/dist/commands/stop.js +11 -25
  167. package/dist/commands/stop.js.map +1 -1
  168. package/dist/commands/tail.d.ts +11 -0
  169. package/dist/commands/tail.d.ts.map +1 -0
  170. package/dist/commands/tail.js +114 -0
  171. package/dist/commands/tail.js.map +1 -0
  172. package/dist/commands.d.ts.map +1 -1
  173. package/dist/commands.js +2 -0
  174. package/dist/commands.js.map +1 -1
  175. package/dist/connection/cdp.d.ts +46 -2
  176. package/dist/connection/cdp.d.ts.map +1 -1
  177. package/dist/connection/cdp.js +71 -5
  178. package/dist/connection/cdp.js.map +1 -1
  179. package/dist/connection/diagnostics.d.ts +16 -0
  180. package/dist/connection/diagnostics.d.ts.map +1 -0
  181. package/dist/connection/diagnostics.js +37 -0
  182. package/dist/connection/diagnostics.js.map +1 -0
  183. package/dist/connection/errors.d.ts +74 -0
  184. package/dist/connection/errors.d.ts.map +1 -0
  185. package/dist/connection/errors.js +83 -0
  186. package/dist/connection/errors.js.map +1 -0
  187. package/dist/connection/handlers.d.ts +31 -0
  188. package/dist/connection/handlers.d.ts.map +1 -0
  189. package/dist/connection/handlers.js +38 -0
  190. package/dist/connection/handlers.js.map +1 -0
  191. package/dist/connection/launcher.d.ts +3 -20
  192. package/dist/connection/launcher.d.ts.map +1 -1
  193. package/dist/connection/launcher.js +130 -32
  194. package/dist/connection/launcher.js.map +1 -1
  195. package/dist/connection/pageReadiness.d.ts +46 -0
  196. package/dist/connection/pageReadiness.d.ts.map +1 -0
  197. package/dist/connection/pageReadiness.js +270 -0
  198. package/dist/connection/pageReadiness.js.map +1 -0
  199. package/dist/connection/tabs.d.ts +52 -0
  200. package/dist/connection/tabs.d.ts.map +1 -0
  201. package/dist/connection/tabs.js +227 -0
  202. package/dist/connection/tabs.js.map +1 -0
  203. package/dist/constants.d.ts +20 -40
  204. package/dist/constants.d.ts.map +1 -1
  205. package/dist/constants.js +26 -40
  206. package/dist/constants.js.map +1 -1
  207. package/dist/daemon/ipcServer.d.ts +5 -7
  208. package/dist/daemon/ipcServer.d.ts.map +1 -1
  209. package/dist/daemon/ipcServer.js +178 -143
  210. package/dist/daemon/ipcServer.js.map +1 -1
  211. package/dist/daemon/launcher.js +1 -1
  212. package/dist/daemon/launcher.js.map +1 -1
  213. package/dist/daemon/server/SocketServer.d.ts +22 -0
  214. package/dist/daemon/server/SocketServer.d.ts.map +1 -0
  215. package/dist/daemon/server/SocketServer.js +67 -0
  216. package/dist/daemon/server/SocketServer.js.map +1 -0
  217. package/dist/daemon/server/WorkerManager.d.ts +36 -0
  218. package/dist/daemon/server/WorkerManager.d.ts.map +1 -0
  219. package/dist/daemon/server/WorkerManager.js +98 -0
  220. package/dist/daemon/server/WorkerManager.js.map +1 -0
  221. package/dist/daemon/startSession.d.ts +2 -0
  222. package/dist/daemon/startSession.d.ts.map +1 -1
  223. package/dist/daemon/startSession.js +4 -2
  224. package/dist/daemon/startSession.js.map +1 -1
  225. package/dist/daemon/worker/TelemetryStore.d.ts +18 -0
  226. package/dist/daemon/worker/TelemetryStore.d.ts.map +1 -0
  227. package/dist/daemon/worker/TelemetryStore.js +49 -0
  228. package/dist/daemon/worker/TelemetryStore.js.map +1 -0
  229. package/dist/daemon/worker/collectors.d.ts +8 -0
  230. package/dist/daemon/worker/collectors.d.ts.map +1 -0
  231. package/dist/daemon/worker/collectors.js +19 -0
  232. package/dist/daemon/worker/collectors.js.map +1 -0
  233. package/dist/daemon/worker/commandRegistry.d.ts +10 -0
  234. package/dist/daemon/worker/commandRegistry.d.ts.map +1 -0
  235. package/dist/daemon/worker/commandRegistry.js +289 -0
  236. package/dist/daemon/worker/commandRegistry.js.map +1 -0
  237. package/dist/daemon/worker/plugins.d.ts +21 -0
  238. package/dist/daemon/worker/plugins.d.ts.map +1 -0
  239. package/dist/daemon/worker/plugins.js +71 -0
  240. package/dist/daemon/worker/plugins.js.map +1 -0
  241. package/dist/daemon/worker/types.d.ts +13 -0
  242. package/dist/daemon/worker/types.d.ts.map +1 -0
  243. package/dist/daemon/worker/types.js +2 -0
  244. package/dist/daemon/worker/types.js.map +1 -0
  245. package/dist/daemon/worker.js +206 -529
  246. package/dist/daemon/worker.js.map +1 -1
  247. package/dist/help/machineReadableHelp.d.ts +100 -0
  248. package/dist/help/machineReadableHelp.d.ts.map +1 -0
  249. package/dist/help/machineReadableHelp.js +139 -0
  250. package/dist/help/machineReadableHelp.js.map +1 -0
  251. package/dist/index.js +18 -9
  252. package/dist/index.js.map +1 -1
  253. package/dist/ipc/__tests__/client.contract.test.js +2 -2
  254. package/dist/ipc/__tests__/client.contract.test.js.map +1 -1
  255. package/dist/ipc/client.d.ts +3 -1
  256. package/dist/ipc/client.d.ts.map +1 -1
  257. package/dist/ipc/client.js +27 -14
  258. package/dist/ipc/client.js.map +1 -1
  259. package/dist/ipc/commands.d.ts +1 -0
  260. package/dist/ipc/commands.d.ts.map +1 -1
  261. package/dist/ipc/commands.js.map +1 -1
  262. package/dist/ipc/types.d.ts +2 -0
  263. package/dist/ipc/types.d.ts.map +1 -1
  264. package/dist/session/BdgSession.d.ts +91 -0
  265. package/dist/session/BdgSession.d.ts.map +1 -0
  266. package/dist/session/BdgSession.js +230 -0
  267. package/dist/session/BdgSession.js.map +1 -0
  268. package/dist/session/cleanup.d.ts.map +1 -1
  269. package/dist/session/cleanup.js +67 -65
  270. package/dist/session/cleanup.js.map +1 -1
  271. package/dist/session/fileOps.d.ts +25 -0
  272. package/dist/session/fileOps.d.ts.map +1 -0
  273. package/dist/session/fileOps.js +39 -0
  274. package/dist/session/fileOps.js.map +1 -0
  275. package/dist/session/metadata.js +2 -2
  276. package/dist/session/metadata.js.map +1 -1
  277. package/dist/session/paths.d.ts +2 -7
  278. package/dist/session/paths.d.ts.map +1 -1
  279. package/dist/session/paths.js +8 -8
  280. package/dist/session/paths.js.map +1 -1
  281. package/dist/session/queryCache.js +1 -1
  282. package/dist/session/queryCache.js.map +1 -1
  283. package/dist/telemetry/__tests__/filters.unit.test.d.ts +2 -0
  284. package/dist/telemetry/__tests__/filters.unit.test.d.ts.map +1 -0
  285. package/dist/telemetry/__tests__/filters.unit.test.js +239 -0
  286. package/dist/telemetry/__tests__/filters.unit.test.js.map +1 -0
  287. package/dist/telemetry/console.d.ts +1 -1
  288. package/dist/telemetry/console.d.ts.map +1 -1
  289. package/dist/telemetry/console.js +5 -3
  290. package/dist/telemetry/console.js.map +1 -1
  291. package/dist/telemetry/dialogs.d.ts +27 -0
  292. package/dist/telemetry/dialogs.d.ts.map +1 -0
  293. package/dist/telemetry/dialogs.js +51 -0
  294. package/dist/telemetry/dialogs.js.map +1 -0
  295. package/dist/telemetry/filters.d.ts +148 -0
  296. package/dist/telemetry/filters.d.ts.map +1 -0
  297. package/dist/telemetry/filters.js +358 -0
  298. package/dist/telemetry/filters.js.map +1 -0
  299. package/dist/telemetry/navigation.d.ts +49 -0
  300. package/dist/telemetry/navigation.d.ts.map +1 -0
  301. package/dist/telemetry/navigation.js +69 -0
  302. package/dist/telemetry/navigation.js.map +1 -0
  303. package/dist/telemetry/network.d.ts +1 -0
  304. package/dist/telemetry/network.d.ts.map +1 -1
  305. package/dist/telemetry/network.js +23 -34
  306. package/dist/telemetry/network.js.map +1 -1
  307. package/dist/types.d.ts +2 -0
  308. package/dist/types.d.ts.map +1 -1
  309. package/dist/ui/errors/CommandError.d.ts +39 -0
  310. package/dist/ui/errors/CommandError.d.ts.map +1 -0
  311. package/dist/ui/errors/CommandError.js +48 -0
  312. package/dist/ui/errors/CommandError.js.map +1 -0
  313. package/dist/ui/errors/SystemErrors.d.ts +22 -0
  314. package/dist/ui/errors/SystemErrors.d.ts.map +1 -0
  315. package/dist/ui/errors/SystemErrors.js +23 -0
  316. package/dist/ui/errors/SystemErrors.js.map +1 -0
  317. package/dist/ui/errors/index.d.ts +9 -0
  318. package/dist/ui/errors/index.d.ts.map +1 -0
  319. package/dist/ui/errors/index.js +12 -0
  320. package/dist/ui/errors/index.js.map +1 -0
  321. package/dist/ui/errors/utils.d.ts +24 -0
  322. package/dist/ui/errors/utils.d.ts.map +1 -0
  323. package/dist/ui/errors/utils.js +28 -0
  324. package/dist/ui/errors/utils.js.map +1 -0
  325. package/dist/ui/formatters/status.d.ts.map +1 -1
  326. package/dist/ui/formatters/status.js +1 -1
  327. package/dist/ui/formatters/status.js.map +1 -1
  328. package/dist/ui/logging/index.d.ts +7 -0
  329. package/dist/ui/logging/index.d.ts.map +1 -0
  330. package/dist/ui/logging/index.js +7 -0
  331. package/dist/ui/logging/index.js.map +1 -0
  332. package/dist/ui/logging/logger.d.ts +98 -0
  333. package/dist/ui/logging/logger.d.ts.map +1 -0
  334. package/dist/ui/logging/logger.js +93 -0
  335. package/dist/ui/logging/logger.js.map +1 -0
  336. package/dist/ui/messages/chrome.d.ts +50 -1
  337. package/dist/ui/messages/chrome.d.ts.map +1 -1
  338. package/dist/ui/messages/chrome.js +77 -0
  339. package/dist/ui/messages/chrome.js.map +1 -1
  340. package/dist/ui/messages/deprecation.d.ts +30 -0
  341. package/dist/ui/messages/deprecation.d.ts.map +1 -0
  342. package/dist/ui/messages/deprecation.js +49 -0
  343. package/dist/ui/messages/deprecation.js.map +1 -0
  344. package/dist/ui/messages/preview.js +1 -1
  345. package/dist/ui/messages/preview.js.map +1 -1
  346. package/dist/ui/messages/session.d.ts.map +1 -1
  347. package/dist/ui/messages/session.js +21 -7
  348. package/dist/ui/messages/session.js.map +1 -1
  349. package/dist/utils/__tests__/session.contract.test.js +15 -1
  350. package/dist/utils/__tests__/session.contract.test.js.map +1 -1
  351. package/dist/utils/filters.d.ts +40 -0
  352. package/dist/utils/filters.d.ts.map +1 -1
  353. package/dist/utils/filters.js +54 -0
  354. package/dist/utils/filters.js.map +1 -1
  355. package/dist/utils/pageReadiness.js +24 -25
  356. package/dist/utils/pageReadiness.js.map +1 -1
  357. package/dist/utils/session.d.ts +200 -0
  358. package/dist/utils/session.d.ts.map +1 -0
  359. package/dist/utils/session.js +498 -0
  360. package/dist/utils/session.js.map +1 -0
  361. package/dist/utils/url.d.ts.map +1 -1
  362. package/dist/utils/url.js +10 -0
  363. package/dist/utils/url.js.map +1 -1
  364. package/dist/utils/validation.d.ts +12 -0
  365. package/dist/utils/validation.d.ts.map +1 -0
  366. package/dist/utils/validation.js +20 -0
  367. package/dist/utils/validation.js.map +1 -0
  368. package/package.json +2 -1
  369. package/dist/cli/commands/__tests__/cdp.contract.test.d.ts +0 -24
  370. package/dist/cli/commands/__tests__/cdp.contract.test.d.ts.map +0 -1
  371. package/dist/cli/commands/__tests__/cdp.contract.test.js +0 -467
  372. package/dist/cli/commands/__tests__/cdp.contract.test.js.map +0 -1
  373. package/dist/cli/commands/cdp.d.ts +0 -8
  374. package/dist/cli/commands/cdp.d.ts.map +0 -1
  375. package/dist/cli/commands/cdp.js +0 -45
  376. package/dist/cli/commands/cdp.js.map +0 -1
  377. package/dist/cli/commands/console.d.ts +0 -8
  378. package/dist/cli/commands/console.d.ts.map +0 -1
  379. package/dist/cli/commands/console.js +0 -97
  380. package/dist/cli/commands/console.js.map +0 -1
  381. package/dist/cli/commands/dom/helpers/domCache.d.ts +0 -36
  382. package/dist/cli/commands/dom/helpers/domCache.d.ts.map +0 -1
  383. package/dist/cli/commands/dom/helpers/domCache.js +0 -65
  384. package/dist/cli/commands/dom/helpers/domCache.js.map +0 -1
  385. package/dist/cli/commands/dom/helpers/domQuery.d.ts +0 -48
  386. package/dist/cli/commands/dom/helpers/domQuery.d.ts.map +0 -1
  387. package/dist/cli/commands/dom/helpers/domQuery.js +0 -104
  388. package/dist/cli/commands/dom/helpers/domQuery.js.map +0 -1
  389. package/dist/cli/commands/dom/helpers/errorHandler.d.ts +0 -45
  390. package/dist/cli/commands/dom/helpers/errorHandler.d.ts.map +0 -1
  391. package/dist/cli/commands/dom/helpers/errorHandler.js +0 -71
  392. package/dist/cli/commands/dom/helpers/errorHandler.js.map +0 -1
  393. package/dist/cli/commands/dom/helpers/evalHelpers.d.ts +0 -52
  394. package/dist/cli/commands/dom/helpers/evalHelpers.d.ts.map +0 -1
  395. package/dist/cli/commands/dom/helpers/evalHelpers.js +0 -75
  396. package/dist/cli/commands/dom/helpers/evalHelpers.js.map +0 -1
  397. package/dist/cli/commands/dom/helpers/optionsBuilder.d.ts +0 -35
  398. package/dist/cli/commands/dom/helpers/optionsBuilder.d.ts.map +0 -1
  399. package/dist/cli/commands/dom/helpers/optionsBuilder.js +0 -51
  400. package/dist/cli/commands/dom/helpers/optionsBuilder.js.map +0 -1
  401. package/dist/cli/commands/dom/helpers/selectorParser.d.ts +0 -20
  402. package/dist/cli/commands/dom/helpers/selectorParser.d.ts.map +0 -1
  403. package/dist/cli/commands/dom/helpers/selectorParser.js +0 -20
  404. package/dist/cli/commands/dom/helpers/selectorParser.js.map +0 -1
  405. package/dist/cli/commands/dom/index.d.ts +0 -8
  406. package/dist/cli/commands/dom/index.d.ts.map +0 -1
  407. package/dist/cli/commands/dom/index.js +0 -257
  408. package/dist/cli/commands/dom/index.js.map +0 -1
  409. package/dist/cli/commands/dom.d.ts +0 -8
  410. package/dist/cli/commands/dom.d.ts.map +0 -1
  411. package/dist/cli/commands/dom.js +0 -257
  412. package/dist/cli/commands/dom.js.map +0 -1
  413. package/dist/cli/commands/domErrorHandler.d.ts +0 -45
  414. package/dist/cli/commands/domErrorHandler.d.ts.map +0 -1
  415. package/dist/cli/commands/domErrorHandler.js +0 -71
  416. package/dist/cli/commands/domErrorHandler.js.map +0 -1
  417. package/dist/cli/commands/domEvalHelpers.d.ts +0 -52
  418. package/dist/cli/commands/domEvalHelpers.d.ts.map +0 -1
  419. package/dist/cli/commands/domEvalHelpers.js +0 -76
  420. package/dist/cli/commands/domEvalHelpers.js.map +0 -1
  421. package/dist/cli/commands/domOptionsBuilder.d.ts +0 -35
  422. package/dist/cli/commands/domOptionsBuilder.d.ts.map +0 -1
  423. package/dist/cli/commands/domOptionsBuilder.js +0 -51
  424. package/dist/cli/commands/domOptionsBuilder.js.map +0 -1
  425. package/dist/cli/commands/domSelectorParser.d.ts +0 -20
  426. package/dist/cli/commands/domSelectorParser.d.ts.map +0 -1
  427. package/dist/cli/commands/domSelectorParser.js +0 -20
  428. package/dist/cli/commands/domSelectorParser.js.map +0 -1
  429. package/dist/cli/commands/network.d.ts +0 -8
  430. package/dist/cli/commands/network.d.ts.map +0 -1
  431. package/dist/cli/commands/network.js +0 -43
  432. package/dist/cli/commands/network.js.map +0 -1
  433. package/dist/cli/handlers/CommandRunner.d.ts +0 -60
  434. package/dist/cli/handlers/CommandRunner.d.ts.map +0 -1
  435. package/dist/cli/handlers/CommandRunner.js +0 -81
  436. package/dist/cli/handlers/CommandRunner.js.map +0 -1
  437. package/dist/cli/handlers/commonOptions.d.ts +0 -54
  438. package/dist/cli/handlers/commonOptions.d.ts.map +0 -1
  439. package/dist/cli/handlers/commonOptions.js +0 -64
  440. package/dist/cli/handlers/commonOptions.js.map +0 -1
  441. package/dist/cli/handlers/daemonSessionController.d.ts +0 -23
  442. package/dist/cli/handlers/daemonSessionController.d.ts.map +0 -1
  443. package/dist/cli/handlers/daemonSessionController.js +0 -79
  444. package/dist/cli/handlers/daemonSessionController.js.map +0 -1
  445. package/dist/cli/handlers/landingPage.d.ts +0 -8
  446. package/dist/cli/handlers/landingPage.d.ts.map +0 -1
  447. package/dist/cli/handlers/landingPage.js +0 -8
  448. package/dist/cli/handlers/landingPage.js.map +0 -1
  449. package/dist/collectors/__tests__/network.contract.test.d.ts +0 -28
  450. package/dist/collectors/__tests__/network.contract.test.d.ts.map +0 -1
  451. package/dist/collectors/__tests__/network.contract.test.js +0 -540
  452. package/dist/collectors/__tests__/network.contract.test.js.map +0 -1
  453. package/dist/commandRegistry.d.ts +0 -11
  454. package/dist/commandRegistry.d.ts.map +0 -1
  455. package/dist/commandRegistry.js +0 -45
  456. package/dist/commandRegistry.js.map +0 -1
  457. package/dist/commands/domErrorHandler.d.ts +0 -45
  458. package/dist/commands/domErrorHandler.d.ts.map +0 -1
  459. package/dist/commands/domErrorHandler.js +0 -71
  460. package/dist/commands/domErrorHandler.js.map +0 -1
  461. package/dist/dom/cache.d.ts +0 -36
  462. package/dist/dom/cache.d.ts.map +0 -1
  463. package/dist/dom/cache.js +0 -65
  464. package/dist/dom/cache.js.map +0 -1
  465. package/dist/dom/index.d.ts +0 -9
  466. package/dist/dom/index.d.ts.map +0 -1
  467. package/dist/dom/index.js +0 -9
  468. package/dist/dom/index.js.map +0 -1
  469. package/dist/dom/query.d.ts +0 -48
  470. package/dist/dom/query.d.ts.map +0 -1
  471. package/dist/dom/query.js +0 -104
  472. package/dist/dom/query.js.map +0 -1
  473. package/dist/utils/formatters/network.d.ts +0 -23
  474. package/dist/utils/formatters/network.d.ts.map +0 -1
  475. package/dist/utils/formatters/network.js +0 -35
  476. package/dist/utils/formatters/network.js.map +0 -1
  477. package/dist/utils/ui.d.ts +0 -36
  478. package/dist/utils/ui.d.ts.map +0 -1
  479. package/dist/utils/ui.js +0 -47
  480. package/dist/utils/ui.js.map +0 -1
  481. package/dist/utils/url/safeParseUrl.d.ts +0 -63
  482. package/dist/utils/url/safeParseUrl.d.ts.map +0 -1
  483. package/dist/utils/url/safeParseUrl.js +0 -84
  484. package/dist/utils/url/safeParseUrl.js.map +0 -1
package/README.md CHANGED
@@ -5,7 +5,23 @@
5
5
  [![Security](https://github.com/szymdzum/browser-debugger-cli/actions/workflows/security.yml/badge.svg)](https://github.com/szymdzum/browser-debugger-cli/actions/workflows/security.yml)
6
6
  [![npm downloads](https://img.shields.io/npm/dt/browser-debugger-cli?color=blue)](https://www.npmjs.com/package/browser-debugger-cli)
7
7
 
8
- DevTools telemetry in your terminal. For humans and agents. Direct WebSocket to Chrome's debugging port. Stream DOM, network, and console data straight to stdout. Pipe it, grep it, feed it to agents for full context debugging.
8
+ Chrome DevTools Protocol in your terminal. Run any CDP command, pipe the output, build browser automation with tools you already know. Design to be agent friendly
9
+
10
+ ## Why This Exists
11
+ Puppeteer is great but heavy. CDP is powerful but raw. This tool sits in between: direct protocol access with session management and a few helpful wrappers. No abstractions hiding what's actually happening.
12
+ Built for debugging web apps and scripting browser automation without spinning up a full testing framework.
13
+
14
+ ## Current State
15
+
16
+ **Raw [CDP](https://chromedevtools.github.io/devtools-protocol/) access is complete.** All 300+ protocol methods work now. This makes it immediately useful for AI agents and developers comfortable with CDP.
17
+
18
+ **Human-friendly wrappers are in progress.** Commands like `bdg dom query` and `bdg peek` are being added for common operations. For now, most automation work happens through `bdg cdp` and Unix pipes.
19
+
20
+ ## Demo
21
+
22
+ [![asciicast](https://asciinema.org/a/RE6Iup9sB1iSWBK0wgUUn3bBl.svg)](https://asciinema.org/a/RE6Iup9sB1iSWBK0wgUUn3bBl)
23
+
24
+ *Watch bdg scrape GitHub trending pages and extract repository data in real-time using DOM queries and CDP.*
9
25
 
10
26
  ## Installation
11
27
 
@@ -13,178 +29,173 @@ DevTools telemetry in your terminal. For humans and agents. Direct WebSocket to
13
29
  npm install -g browser-debugger-cli@alpha
14
30
  ```
15
31
 
32
+ **Platform Support:**
33
+ - ✅ macOS and Linux (native support)
34
+ - ✅ Windows via WSL (Windows Subsystem for Linux)
35
+ - ❌ PowerShell and Git Bash on Windows (not yet supported)
36
+
37
+ The CLI uses Unix domain sockets for inter-process communication. Windows users should run bdg inside WSL for full compatibility.
38
+
16
39
  ## Quick Start
17
40
 
18
41
  ```bash
19
- # Start session (opens example.com in Chrome)
42
+ # Start a session
20
43
  bdg example.com
21
44
 
22
- # Daemon starts in background, Chrome opens
23
- # Session is active - you can now run commands
24
-
25
- # Check session status
26
- bdg status
27
- # Status: Active
28
- # Worker PID: 12345
29
- # Chrome PID: 67890
30
- # Target: http://example.com
31
-
32
- # Execute raw CDP commands
45
+ # Run any CDP command
33
46
  bdg cdp Runtime.evaluate --params '{"expression":"document.title","returnByValue":true}'
34
- # { "result": { "type": "string", "value": "Example Domain" } }
35
-
36
47
  bdg cdp Network.getCookies
37
- # { "cookies": [...] }
38
48
 
39
- # Stop session
49
+ # Check what's running
50
+ bdg status
51
+
52
+ # Done
40
53
  bdg stop
41
54
  ```
42
55
 
43
- ## How It Works
56
+ ## What You Can Do
57
+
58
+ ### Run Any CDP Command
59
+
60
+ All 300+ methods from [Chrome DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/) work out of the box:
61
+
62
+ ```bash
63
+ # Get cookies and filter with jq
64
+ bdg cdp Network.getCookies | jq '.cookies[] | select(.httpOnly)'
65
+
66
+ # Execute JavaScript in the page
67
+ bdg cdp Runtime.evaluate --params '{"expression":"document.querySelectorAll(\"a\").length","returnByValue":true}'
68
+
69
+ # Monitor memory usage
70
+ bdg cdp Performance.getMetrics | jq '.metrics[] | select(.name == "JSHeapUsedSize")'
71
+
72
+ # Capture a screenshot
73
+ bdg cdp Page.captureScreenshot | jq -r '.data' | base64 -d > screenshot.png
74
+ ```
44
75
 
45
- `bdg` is built on a **layered architecture** — raw CDP access with human-friendly wrappers on top.
76
+ The daemon keeps a WebSocket open to Chrome, so commands run immediately against the live session.
46
77
 
47
- ### Layer 1: Raw CDP Access ✅
78
+ ### Pipe Everything
48
79
 
49
- Direct access to **60+ domains, 300+ methods** from [Chrome DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/):
80
+ Output is JSON by default. Use it with `jq`, `grep`, `awk` - whatever works:
50
81
 
51
82
  ```bash
52
- # Execute any CDP method
53
- bdg cdp Network.getCookies
54
- bdg cdp Runtime.evaluate --params '{"expression":"document.title","returnByValue":true}'
55
- bdg cdp Performance.getMetrics
83
+ # Find all failed network requests
84
+ bdg peek --network --json | jq '.data.network[] | select(.status >= 400)'
56
85
 
57
- # Pipe to jq for filtering
58
- bdg cdp Network.getCookies | jq '.cookies[] | select(.name == "session")'
86
+ # Extract every link on the page
87
+ bdg cdp Runtime.evaluate --params '{
88
+ "expression": "Array.from(document.querySelectorAll(\"a\")).map(a => ({text: a.textContent.trim(), href: a.href}))",
89
+ "returnByValue": true
90
+ }' | jq '.result.value'
91
+
92
+ # Count console errors
93
+ bdg peek --console --json | jq '[.data.console[] | select(.level == "error")] | length'
59
94
  ```
60
95
 
61
- **Why raw CDP first?**
62
- - ✅ Zero abstraction overhead — direct WebSocket to Chrome
63
- - ✅ Full protocol power — all CDP methods work immediately
64
- - ✅ Future-proof — new CDP features work without code changes
65
- - ✅ Agent-friendly — structured input/output, composable with Unix tools
96
+ ### For AI Agents
97
+
98
+ Claude skill included at `.claude/skills/bdg/` with working automation patterns:
66
99
 
67
- ### Layer 2: Human-Friendly Wrappers 🚧
100
+ - Common CDP workflows (scraping, polling, navigation)
101
+ - Exit codes and error handling
102
+ - Troubleshooting reference
68
103
 
69
- Building ergonomic commands on top of raw CDP for common workflows:
104
+ The `--help --json` flag outputs the complete CLI schema for programmatic discovery:
70
105
 
71
106
  ```bash
72
- # Session management
73
- bdg status # Check active session
74
- bdg stop # Stop session gracefully
75
- bdg cleanup # Clean up stale sessions
76
-
77
- # Data inspection
78
- bdg peek # Quick preview of collected data
79
- bdg peek --follow # Live updates every second
80
- bdg details # Full details for specific items
81
- bdg dom query # Query DOM elements
82
- bdg dom eval # Execute JavaScript in browser context
83
- bdg dom highlight # Highlight elements visually
84
- bdg dom get # Get full HTML for elements
107
+ bdg --help --json | jq '.command.subcommands[].name'
108
+ bdg --help --json | jq '.exitCodes'
85
109
  ```
86
110
 
87
- **Progressive disclosure**: Start with raw CDP power, add convenience wrappers for common patterns.
111
+ Agents can figure out what commands exist and how to use them without hardcoded knowledge.
88
112
 
89
- **Why CLI over protocol servers?**
90
- - **Token efficiency**: CDP is in the model's training data (~3k tokens for patterns vs. 5-10k for MCP server definitions)
91
- - **Composability**: Unix pipes with `jq`, `grep`, `awk` — tools models already know
92
- - **Transparent errors**: See exactly what failed, no protocol layers hiding issues
93
- - **Real-time evolution**: Update patterns anytime, no server redeployment
113
+ ### Debug Live Apps
94
114
 
95
- ## Available Commands
115
+ Point at localhost, monitor what's happening:
96
116
 
97
- ### Raw CDP Access
117
+ ```bash
118
+ bdg localhost:3000 --headless
119
+ bdg tail --console # Stream console output
120
+ bdg tail --network # Watch requests in real-time
121
+ ```
122
+
123
+ Helpful for catching issues during development without opening DevTools.
124
+
125
+ ### Automate Browser Tasks
98
126
 
99
- Full Chrome DevTools Protocol access via `bdg cdp` command – **any CDP method works**:
127
+ Poll for elements, click buttons, extract data:
100
128
 
101
129
  ```bash
102
- # Get all cookies (raw CDP)
103
- bdg cdp Network.getCookies
104
- # {
105
- # "cookies": [
106
- # {
107
- # "name": "session_id",
108
- # "value": "1234567890abcdef",
109
- # "domain": "example.com",
110
- # "httpOnly": true,
111
- # "secure": true,
112
- # "sameSite": "Strict"
113
- # }
114
- # ]
115
- # }
116
-
117
- # Evaluate JavaScript
118
- bdg cdp Runtime.evaluate --params '{"expression":"document.title","returnByValue":true}'
119
- # {
120
- # "result": {
121
- # "type": "string",
122
- # "value": "Example Domain"
123
- # }
124
- # }
125
-
126
- # Get browser version
127
- bdg cdp Browser.getVersion
128
- # {
129
- # "protocolVersion": "1.3",
130
- # "product": "Chrome/142.0.7444.60",
131
- # "jsVersion": "14.2.231.14"
132
- # }
133
-
134
- # Pipe to jq for filtering
135
- bdg cdp Network.getCookies | jq '.cookies[] | select(.name == "session_id") | .value'
136
- # "1234567890abcdef"
130
+ # Wait for an element to appear
131
+ while ! bdg cdp Runtime.evaluate --params '{"expression":"document.querySelector(\"#target\") !== null","returnByValue":true}' | jq -e '.result.value'; do
132
+ sleep 0.5
133
+ done
134
+
135
+ # Click it
136
+ bdg cdp Runtime.evaluate --params '{"expression":"document.querySelector(\"#target\").click()"}'
137
+
138
+ # Get the result
139
+ bdg cdp Runtime.evaluate --params '{"expression":"document.querySelector(\".result\").textContent","returnByValue":true}'
137
140
  ```
138
141
 
139
- **60+ domains, 300+ methods** from the [Chrome DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/) are available.
142
+ Check `.claude/skills/bdg/WORKFLOWS.md` for more complete examples (GitHub scraper, form automation, etc).
143
+
144
+ ## Session Management
140
145
 
141
- ### Session Management
146
+ Sessions persist until you stop them. Chrome stays open, data keeps collecting:
142
147
 
143
148
  ```bash
144
- # Start session
145
- bdg example.com # Opens Chrome with daemon in background
149
+ bdg example.com # Opens Chrome, starts daemon
150
+ bdg status # Check what's running
151
+ bdg status --verbose # Show Chrome process details
152
+ bdg stop # Kill everything
153
+ bdg cleanup # Remove stale files
154
+ ```
146
155
 
147
- # Check if session is active
148
- bdg status # Show session info
149
- bdg status --verbose # Include Chrome diagnostics
156
+ ## Helper Commands
150
157
 
151
- # Stop session
152
- bdg stop # Gracefully stop daemon and close Chrome
158
+ A few convenience wrappers for common operations. Most work still happens through `bdg cdp`:
153
159
 
154
- # Clean up stale sessions
155
- bdg cleanup # Remove stale session files
156
- bdg cleanup --force # Force cleanup even if session appears active
160
+ ```bash
161
+ # Query DOM
162
+ bdg dom query "button.primary" # Find elements
163
+ bdg dom get "button.primary" # Get HTML
164
+ bdg dom eval "document.title" # Run JavaScript
165
+ bdg dom highlight ".navbar" # Visual debugging
166
+
167
+ # Inspect collected data
168
+ bdg peek # Quick snapshot
169
+ bdg peek --network # Just network data
170
+ bdg tail # Stream like tail -f
157
171
  ```
158
172
 
159
- ## Technical Overview
173
+ ## Page Readiness
160
174
 
161
- `bdg` runs a daemon that maintains a WebSocket connection to Chrome's debugging port.
162
- When you run commands like `bdg network` or `bdg console`, they communicate with the
163
- daemon via IPC, which forwards [Chrome DevTools
164
- Protocol](https://chromedevtools.github.io/devtools-protocol/) commands and streams
165
- responses back.
175
+ By default, `bdg` waits for pages to fully load using three signals:
166
176
 
167
- **Architecture:**
168
- - **Daemon** – Background process managing Chrome connection lifecycle
169
- - **IPC** – Unix sockets for CLI ↔ daemon communication
170
- - **WebSocket** – Direct connection to Chrome's `--remote-debugging-port`
171
- - **CDP** – Native Chrome DevTools Protocol for all browser inspection
177
+ 1. Browser's `window.onload` fires
178
+ 2. Network goes quiet (200ms without new requests)
179
+ 3. DOM stops changing (300ms without mutations)
172
180
 
173
- **Benefits:**
174
- - Sessions persist across commands (Chrome stays open)
175
- - Live queries without stopping collection
176
- - No intermediate files data flows from Chrome to stdout
177
- - Real CDP with full protocol access
181
+ Catches server-rendered HTML, client hydration, and lazy-loaded content. Works with Next.js, React, Vue, whatever. Times out after 5 seconds if something hangs.
178
182
 
179
- ## Contributing
183
+ Skip it with `--no-wait` if you want immediate connection.
180
184
 
181
- Contributions welcome! But honestly, I'd just be happy if you give it a try.
185
+ ## Architecture
186
+
187
+ Three processes:
188
+
189
+ - **CLI** talks to daemon via Unix socket
190
+ - **Daemon** manages Chrome and routes commands
191
+ - **Worker** holds the WebSocket to CDP
192
+
193
+ Chrome stays running between commands. No startup cost for each operation.
194
+
195
+ ## Contributing
182
196
 
183
- Let me know how you use it
184
- ([discussions](https://github.com/szymdzum/browser-debugger-cli/discussions)), let me
185
- know what's broken
186
- ([issues](https://github.com/szymdzum/browser-debugger-cli/issues/new)).
197
+ If you use this and something breaks, [open an issue](https://github.com/szymdzum/browser-debugger-cli/issues/new). If you have ideas, start a [discussion](https://github.com/szymdzum/browser-debugger-cli/discussions). PRs welcome.
187
198
 
188
199
  ## License
189
200
 
190
- MIT – see [LICENSE](LICENSE) for details.
201
+ MIT
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Error handling smoke tests.
3
+ *
4
+ * Tests error paths and user-facing error messages.
5
+ * WHY: Errors are high-risk areas - tests ensure helpful messages and proper exit codes.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=error-handling.smoke.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handling.smoke.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/smoke/error-handling.smoke.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Error handling smoke tests.
3
+ *
4
+ * Tests error paths and user-facing error messages.
5
+ * WHY: Errors are high-risk areas - tests ensure helpful messages and proper exit codes.
6
+ */
7
+ import * as assert from 'node:assert/strict';
8
+ import { describe, it, afterEach } from 'node:test';
9
+ import { runCommand } from '../../__testutils__/commandRunner.js';
10
+ import { cleanupAllSessions, isDaemonRunning, killDaemon, waitForDaemon, } from '../../__testutils__/daemonHelpers.js';
11
+ import { EXIT_CODES } from '../../utils/exitCodes.js';
12
+ void describe('Error Handling Smoke Tests', () => {
13
+ afterEach(async () => {
14
+ // Cleanup after each test (no beforeEach needed if this works properly)
15
+ await cleanupAllSessions();
16
+ });
17
+ void it('should fail with helpful message when daemon not running', async () => {
18
+ // Try to peek without daemon running
19
+ // Note: peek auto-starts daemon, so it returns 83 after starting daemon
20
+ const result = await runCommand('peek', [], { timeout: 5000 });
21
+ // Should fail with resource not found (no session)
22
+ assert.equal(result.exitCode, EXIT_CODES.RESOURCE_NOT_FOUND);
23
+ // Should provide helpful error message about no session
24
+ assert.ok(/no.*session|session.*not.*found/i.test(result.stderr));
25
+ });
26
+ void it('should fail with helpful message when trying to stop without session', async () => {
27
+ // Try to stop without session
28
+ const result = await runCommand('stop', [], { timeout: 5000 });
29
+ // Should fail
30
+ assert.notEqual(result.exitCode, 0);
31
+ // Should provide helpful error message
32
+ assert.ok(result.stderr.includes('daemon'));
33
+ });
34
+ void it('should handle invalid URL gracefully', async () => {
35
+ // Note: URL validation is permissive - "not-a-valid-url" becomes "http://not-a-valid-url/"
36
+ // This test verifies error handling, not URL validation
37
+ const result = await runCommand('http://example.com', ['--port', '9229', '--headless'], {
38
+ timeout: 10000,
39
+ });
40
+ // Should succeed (URL is valid, session starts)
41
+ assert.equal(result.exitCode, 0);
42
+ // Should provide session started message
43
+ assert.ok(/session started|target:/i.test(result.stderr));
44
+ });
45
+ void it('should handle daemon crash during session', async () => {
46
+ // Start session with unique port
47
+ await runCommand('http://example.com', ['--port', '9230', '--headless'], { timeout: 10000 });
48
+ await waitForDaemon(5000);
49
+ // Kill daemon forcefully (simulate crash)
50
+ await killDaemon('SIGKILL');
51
+ // Wait for process to fully die
52
+ await new Promise((resolve) => setTimeout(resolve, 1000));
53
+ // Try to peek (should fail)
54
+ const peekResult = await runCommand('peek', [], { timeout: 5000 });
55
+ // Should fail
56
+ assert.notEqual(peekResult.exitCode, 0);
57
+ // Should provide helpful error message
58
+ assert.ok(peekResult.stderr.includes('daemon'));
59
+ // Daemon should not be running
60
+ assert.equal(isDaemonRunning(), false);
61
+ });
62
+ void it('should provide helpful error when Chrome fails to launch', async () => {
63
+ // Try to start with invalid Chrome path and unique port
64
+ const result = await runCommand('http://example.com', ['--port', '9231', '--headless'], {
65
+ timeout: 10000,
66
+ env: {
67
+ CHROME_PATH: '/nonexistent/chrome',
68
+ },
69
+ });
70
+ // Should fail (exit code 104 is acceptable for worker errors)
71
+ assert.notEqual(result.exitCode, 0);
72
+ // Should provide helpful error message mentioning Chrome
73
+ assert.ok(/chrome|browser|launch|binary/i.test(result.stderr));
74
+ });
75
+ void it('should cleanup stale sessions automatically', async () => {
76
+ // Start session with unique port
77
+ await runCommand('http://example.com', ['--port', '9232', '--headless'], { timeout: 10000 });
78
+ await waitForDaemon(5000);
79
+ // Kill daemon without cleanup (simulate crash)
80
+ await killDaemon('SIGKILL');
81
+ // Kill Chrome on port 9232 (simulating what happens when daemon crashes)
82
+ try {
83
+ const { execSync } = await import('child_process');
84
+ execSync(`lsof -ti:9232 | xargs kill -9 2>/dev/null || true`, { stdio: 'ignore' });
85
+ }
86
+ catch {
87
+ // Ignore errors if no process on port
88
+ }
89
+ // Wait for processes to fully die and port to be released
90
+ await new Promise((resolve) => setTimeout(resolve, 2000));
91
+ // Try to start new session (should cleanup stale and succeed)
92
+ const result = await runCommand('http://example.com', ['--port', '9232', '--headless'], {
93
+ timeout: 10000,
94
+ });
95
+ // Should succeed after cleanup
96
+ if (result.exitCode !== 0) {
97
+ console.error('Exit code:', result.exitCode);
98
+ console.error('Stderr:', result.stderr);
99
+ console.error('Stdout:', result.stdout);
100
+ }
101
+ assert.equal(result.exitCode, 0);
102
+ // New daemon should be running
103
+ assert.equal(isDaemonRunning(), true);
104
+ });
105
+ });
106
+ //# sourceMappingURL=error-handling.smoke.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handling.smoke.test.js","sourceRoot":"","sources":["../../../src/__tests__/smoke/error-handling.smoke.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Session lifecycle smoke tests.
3
+ *
4
+ * Tests the complete user flow: start → collect data → stop → verify output.
5
+ * WHY: Highest-risk path with 0% coverage despite being critical user flow.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=session-lifecycle.smoke.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-lifecycle.smoke.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/smoke/session-lifecycle.smoke.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Session lifecycle smoke tests.
3
+ *
4
+ * Tests the complete user flow: start → collect data → stop → verify output.
5
+ * WHY: Highest-risk path with 0% coverage despite being critical user flow.
6
+ */
7
+ import * as assert from 'node:assert/strict';
8
+ import { describe, it, afterEach } from 'node:test';
9
+ import { runCommand, runCommandJSON } from '../../__testutils__/commandRunner.js';
10
+ import { cleanupAllSessions, isDaemonRunning, isSessionActive, readSessionOutput, waitForDaemon, } from '../../__testutils__/daemonHelpers.js';
11
+ void describe('Session Lifecycle Smoke Tests', () => {
12
+ afterEach(async () => {
13
+ // Cleanup after each test (no beforeEach needed if this works properly)
14
+ await cleanupAllSessions();
15
+ });
16
+ void it('should start session and create daemon', async () => {
17
+ // Start session with a simple URL using a unique port to avoid conflicts
18
+ const result = await runCommand('http://example.com', ['--port', '9223', '--headless'], {
19
+ timeout: 10000,
20
+ });
21
+ // Should succeed
22
+ assert.equal(result.exitCode, 0);
23
+ // Daemon should be running
24
+ assert.equal(isDaemonRunning(), true);
25
+ // Session should be active
26
+ assert.equal(isSessionActive(), true);
27
+ });
28
+ void it('should collect data during session', async () => {
29
+ // Start session with unique port
30
+ const startResult = await runCommand('http://example.com', ['--port', '9224', '--headless'], {
31
+ timeout: 10000,
32
+ });
33
+ assert.equal(startResult.exitCode, 0, `Session start failed: ${startResult.stderr}`);
34
+ // Wait for daemon to be ready
35
+ await waitForDaemon(5000);
36
+ // Give Chrome time to navigate and collect some data
37
+ await new Promise((resolve) => setTimeout(resolve, 2000));
38
+ // Peek at collected data
39
+ const peekResult = await runCommandJSON('peek', [
40
+ '--json',
41
+ ]);
42
+ // Should have collected some data
43
+ assert.ok(peekResult);
44
+ assert.ok(typeof peekResult === 'object');
45
+ assert.ok('preview' in peekResult);
46
+ assert.ok('data' in peekResult.preview);
47
+ // Stop session to clean up
48
+ const stopResult = await runCommand('stop', [], { timeout: 10000 });
49
+ assert.equal(stopResult.exitCode, 0, `Stop failed: ${stopResult.stderr}`);
50
+ });
51
+ void it('should write output on stop', async () => {
52
+ // Start session with unique port
53
+ const startResult = await runCommand('http://example.com', ['--port', '9225', '--headless'], {
54
+ timeout: 10000,
55
+ });
56
+ assert.equal(startResult.exitCode, 0, `Session start failed: ${startResult.stderr}`);
57
+ await waitForDaemon(5000);
58
+ // Give Chrome time to collect data
59
+ await new Promise((resolve) => setTimeout(resolve, 2000));
60
+ // Stop session
61
+ const stopResult = await runCommand('stop', [], { timeout: 10000 });
62
+ // Should succeed
63
+ assert.equal(stopResult.exitCode, 0, `Stop failed: ${stopResult.stderr}`);
64
+ // Give filesystem time to write the file (increased for test stability)
65
+ await new Promise((resolve) => setTimeout(resolve, 2000));
66
+ // Output file should exist
67
+ const output = readSessionOutput();
68
+ assert.ok(output, 'Session output file should exist after stop');
69
+ assert.ok(typeof output === 'object');
70
+ // Output should have expected structure
71
+ assert.ok('version' in output);
72
+ assert.ok('success' in output);
73
+ assert.equal(output.success, true);
74
+ assert.ok('timestamp' in output);
75
+ assert.ok('data' in output);
76
+ assert.ok('target' in output);
77
+ });
78
+ void it('should cleanup daemon on stop', async () => {
79
+ // Start session with unique port
80
+ await runCommand('http://example.com', ['--port', '9226', '--headless'], { timeout: 10000 });
81
+ await waitForDaemon(5000);
82
+ // Stop session
83
+ await runCommand('stop', [], { timeout: 10000 });
84
+ // Wait for cleanup
85
+ await new Promise((resolve) => setTimeout(resolve, 1000));
86
+ // Daemon should no longer be running
87
+ assert.equal(isDaemonRunning(), false);
88
+ // Session should no longer be active
89
+ assert.equal(isSessionActive(), false);
90
+ });
91
+ void it('should handle concurrent session attempts gracefully', async () => {
92
+ // Start first session with unique port
93
+ const firstResult = await runCommand('http://example.com', ['--port', '9227', '--headless'], {
94
+ timeout: 10000,
95
+ });
96
+ assert.equal(firstResult.exitCode, 0, `First session start failed: ${firstResult.stderr}`);
97
+ await waitForDaemon(5000);
98
+ // Try to start second session (should fail)
99
+ const secondResult = await runCommand('http://another.com', ['--port', '9228', '--headless'], {
100
+ timeout: 10000,
101
+ });
102
+ // Should fail with daemon already running error
103
+ assert.notEqual(secondResult.exitCode, 0);
104
+ assert.ok(secondResult.stderr.includes('daemon') || secondResult.stderr.includes('already'), `Expected error about daemon, got: ${secondResult.stderr}`);
105
+ // First session should still be running
106
+ assert.equal(isDaemonRunning(), true);
107
+ });
108
+ });
109
+ //# sourceMappingURL=session-lifecycle.smoke.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-lifecycle.smoke.test.js","sourceRoot":"","sources":["../../../src/__tests__/smoke/session-lifecycle.smoke.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Command runner for smoke tests.
3
+ *
4
+ * Executes bdg CLI commands in a subprocess and captures output.
5
+ * WHY: Enables end-to-end testing of CLI commands without mocking.
6
+ */
7
+ export interface CommandResult {
8
+ exitCode: number;
9
+ stdout: string;
10
+ stderr: string;
11
+ error?: Error;
12
+ }
13
+ /**
14
+ * Run a bdg CLI command in a subprocess.
15
+ *
16
+ * @param command - Command name (e.g., 'start', 'stop', 'peek')
17
+ * @param args - Command arguments
18
+ * @param options - Execution options
19
+ * @returns Promise resolving to command result
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const result = await runCommand('start', ['http://localhost:3000']);
24
+ * assert.equal(result.exitCode, 0);
25
+ * ```
26
+ */
27
+ export declare function runCommand(command: string, args?: string[], options?: {
28
+ timeout?: number;
29
+ env?: Record<string, string>;
30
+ }): Promise<CommandResult>;
31
+ /**
32
+ * Run command and parse JSON output from stdout.
33
+ *
34
+ * @param command - Command name
35
+ * @param args - Command arguments
36
+ * @returns Parsed JSON output
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * const data = await runCommandJSON('peek');
41
+ * assert.ok(data.data.network.length > 0);
42
+ * ```
43
+ */
44
+ export declare function runCommandJSON<T = unknown>(command: string, args?: string[]): Promise<T>;
45
+ //# sourceMappingURL=commandRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commandRunner.d.ts","sourceRoot":"","sources":["../../src/__testutils__/commandRunner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,EACnB,OAAO,GAAE;IACP,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzB,GACL,OAAO,CAAC,aAAa,CAAC,CAiExB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,CAAC,CAAC,GAAG,OAAO,EAC9C,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,GAClB,OAAO,CAAC,CAAC,CAAC,CAYZ"}