devharness 0.8.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 (627) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +185 -0
  3. package/build/atomic-write.d.ts +28 -0
  4. package/build/atomic-write.d.ts.map +1 -0
  5. package/build/atomic-write.js +126 -0
  6. package/build/atomic-write.js.map +1 -0
  7. package/build/cdp-manager.d.ts +524 -0
  8. package/build/cdp-manager.d.ts.map +1 -0
  9. package/build/cdp-manager.js +1828 -0
  10. package/build/cdp-manager.js.map +1 -0
  11. package/build/cdp-manager.test.d.ts +6 -0
  12. package/build/cdp-manager.test.d.ts.map +1 -0
  13. package/build/cdp-manager.test.js +546 -0
  14. package/build/cdp-manager.test.js.map +1 -0
  15. package/build/chrome-launcher.d.ts +400 -0
  16. package/build/chrome-launcher.d.ts.map +1 -0
  17. package/build/chrome-launcher.js +1071 -0
  18. package/build/chrome-launcher.js.map +1 -0
  19. package/build/chrome-launcher.test.d.ts +11 -0
  20. package/build/chrome-launcher.test.d.ts.map +1 -0
  21. package/build/chrome-launcher.test.js +204 -0
  22. package/build/chrome-launcher.test.js.map +1 -0
  23. package/build/clickable-cache.d.ts +73 -0
  24. package/build/clickable-cache.d.ts.map +1 -0
  25. package/build/clickable-cache.js +90 -0
  26. package/build/clickable-cache.js.map +1 -0
  27. package/build/command-recorder.d.ts +401 -0
  28. package/build/command-recorder.d.ts.map +1 -0
  29. package/build/command-recorder.js +701 -0
  30. package/build/command-recorder.js.map +1 -0
  31. package/build/config.d.ts +390 -0
  32. package/build/config.d.ts.map +1 -0
  33. package/build/config.js +826 -0
  34. package/build/config.js.map +1 -0
  35. package/build/config.test.d.ts +2 -0
  36. package/build/config.test.d.ts.map +1 -0
  37. package/build/config.test.js +112 -0
  38. package/build/config.test.js.map +1 -0
  39. package/build/connection-manager.d.ts +159 -0
  40. package/build/connection-manager.d.ts.map +1 -0
  41. package/build/connection-manager.js +432 -0
  42. package/build/connection-manager.js.map +1 -0
  43. package/build/connection-manager.test.d.ts +11 -0
  44. package/build/connection-manager.test.d.ts.map +1 -0
  45. package/build/connection-manager.test.js +114 -0
  46. package/build/connection-manager.test.js.map +1 -0
  47. package/build/console-monitor.d.ts +150 -0
  48. package/build/console-monitor.d.ts.map +1 -0
  49. package/build/console-monitor.js +454 -0
  50. package/build/console-monitor.js.map +1 -0
  51. package/build/dashboard/bundle.js +1 -0
  52. package/build/dashboard/dashboard-client.d.ts +42 -0
  53. package/build/dashboard/dashboard-client.d.ts.map +1 -0
  54. package/build/dashboard/dashboard-client.js +184 -0
  55. package/build/dashboard/dashboard-client.js.map +1 -0
  56. package/build/dashboard/dashboard-hub.d.ts +50 -0
  57. package/build/dashboard/dashboard-hub.d.ts.map +1 -0
  58. package/build/dashboard/dashboard-hub.js +654 -0
  59. package/build/dashboard/dashboard-hub.js.map +1 -0
  60. package/build/dashboard/hub-lock.d.ts +16 -0
  61. package/build/dashboard/hub-lock.d.ts.map +1 -0
  62. package/build/dashboard/hub-lock.js +77 -0
  63. package/build/dashboard/hub-lock.js.map +1 -0
  64. package/build/dashboard/index.d.ts +25 -0
  65. package/build/dashboard/index.d.ts.map +1 -0
  66. package/build/dashboard/index.js +77 -0
  67. package/build/dashboard/index.js.map +1 -0
  68. package/build/dashboard/types.d.ts +83 -0
  69. package/build/dashboard/types.d.ts.map +1 -0
  70. package/build/dashboard/types.js +6 -0
  71. package/build/dashboard/types.js.map +1 -0
  72. package/build/debug-logger.d.ts +85 -0
  73. package/build/debug-logger.d.ts.map +1 -0
  74. package/build/debug-logger.js +195 -0
  75. package/build/debug-logger.js.map +1 -0
  76. package/build/debugger-aware-wrapper.d.ts +37 -0
  77. package/build/debugger-aware-wrapper.d.ts.map +1 -0
  78. package/build/debugger-aware-wrapper.js +128 -0
  79. package/build/debugger-aware-wrapper.js.map +1 -0
  80. package/build/dom-change-monitor.d.ts +92 -0
  81. package/build/dom-change-monitor.d.ts.map +1 -0
  82. package/build/dom-change-monitor.js +437 -0
  83. package/build/dom-change-monitor.js.map +1 -0
  84. package/build/element-collector.d.ts +16 -0
  85. package/build/element-collector.d.ts.map +1 -0
  86. package/build/element-collector.js +207 -0
  87. package/build/element-collector.js.map +1 -0
  88. package/build/error-helpers.d.ts +43 -0
  89. package/build/error-helpers.d.ts.map +1 -0
  90. package/build/error-helpers.js +143 -0
  91. package/build/error-helpers.js.map +1 -0
  92. package/build/formatters/console-formatter.d.ts +160 -0
  93. package/build/formatters/console-formatter.d.ts.map +1 -0
  94. package/build/formatters/console-formatter.js +338 -0
  95. package/build/formatters/console-formatter.js.map +1 -0
  96. package/build/helpers/parser-plugins.d.ts +44 -0
  97. package/build/helpers/parser-plugins.d.ts.map +1 -0
  98. package/build/helpers/parser-plugins.js +102 -0
  99. package/build/helpers/parser-plugins.js.map +1 -0
  100. package/build/helpers/paths.d.ts +79 -0
  101. package/build/helpers/paths.d.ts.map +1 -0
  102. package/build/helpers/paths.js +168 -0
  103. package/build/helpers/paths.js.map +1 -0
  104. package/build/helpers/process-liveness.d.ts +24 -0
  105. package/build/helpers/process-liveness.d.ts.map +1 -0
  106. package/build/helpers/process-liveness.js +36 -0
  107. package/build/helpers/process-liveness.js.map +1 -0
  108. package/build/helpers/process-liveness.test.d.ts +2 -0
  109. package/build/helpers/process-liveness.test.d.ts.map +1 -0
  110. package/build/helpers/process-liveness.test.js +40 -0
  111. package/build/helpers/process-liveness.test.js.map +1 -0
  112. package/build/helpers/sequence-tree.d.ts +27 -0
  113. package/build/helpers/sequence-tree.d.ts.map +1 -0
  114. package/build/helpers/sequence-tree.js +80 -0
  115. package/build/helpers/sequence-tree.js.map +1 -0
  116. package/build/helpers/sequence-tree.test.d.ts +2 -0
  117. package/build/helpers/sequence-tree.test.d.ts.map +1 -0
  118. package/build/helpers/sequence-tree.test.js +122 -0
  119. package/build/helpers/sequence-tree.test.js.map +1 -0
  120. package/build/index.d.ts +3 -0
  121. package/build/index.d.ts.map +1 -0
  122. package/build/index.js +2007 -0
  123. package/build/index.js.map +1 -0
  124. package/build/interaction-recorder.d.ts +214 -0
  125. package/build/interaction-recorder.d.ts.map +1 -0
  126. package/build/interaction-recorder.js +2007 -0
  127. package/build/interaction-recorder.js.map +1 -0
  128. package/build/issue-tracker.d.ts +107 -0
  129. package/build/issue-tracker.d.ts.map +1 -0
  130. package/build/issue-tracker.js +582 -0
  131. package/build/issue-tracker.js.map +1 -0
  132. package/build/issue-tracker.test.d.ts +2 -0
  133. package/build/issue-tracker.test.d.ts.map +1 -0
  134. package/build/issue-tracker.test.js +88 -0
  135. package/build/issue-tracker.test.js.map +1 -0
  136. package/build/launch-chrome-port.test.d.ts +14 -0
  137. package/build/launch-chrome-port.test.d.ts.map +1 -0
  138. package/build/launch-chrome-port.test.js +97 -0
  139. package/build/launch-chrome-port.test.js.map +1 -0
  140. package/build/log-processor/orchestrator.d.ts +32 -0
  141. package/build/log-processor/orchestrator.d.ts.map +1 -0
  142. package/build/log-processor/orchestrator.js +27 -0
  143. package/build/log-processor/orchestrator.js.map +1 -0
  144. package/build/logpoint-execution-tracker.d.ts +57 -0
  145. package/build/logpoint-execution-tracker.d.ts.map +1 -0
  146. package/build/logpoint-execution-tracker.js +112 -0
  147. package/build/logpoint-execution-tracker.js.map +1 -0
  148. package/build/mcp-supervisor.d.ts +3 -0
  149. package/build/mcp-supervisor.d.ts.map +1 -0
  150. package/build/mcp-supervisor.js +211 -0
  151. package/build/mcp-supervisor.js.map +1 -0
  152. package/build/messages.d.ts +165 -0
  153. package/build/messages.d.ts.map +1 -0
  154. package/build/messages.js +574 -0
  155. package/build/messages.js.map +1 -0
  156. package/build/network-monitor.d.ts +172 -0
  157. package/build/network-monitor.d.ts.map +1 -0
  158. package/build/network-monitor.js +350 -0
  159. package/build/network-monitor.js.map +1 -0
  160. package/build/overlays.d.ts +49 -0
  161. package/build/overlays.d.ts.map +1 -0
  162. package/build/overlays.js +409 -0
  163. package/build/overlays.js.map +1 -0
  164. package/build/persistent-profiles.test.d.ts +15 -0
  165. package/build/persistent-profiles.test.d.ts.map +1 -0
  166. package/build/persistent-profiles.test.js +470 -0
  167. package/build/persistent-profiles.test.js.map +1 -0
  168. package/build/port-reserver.d.ts +32 -0
  169. package/build/port-reserver.d.ts.map +1 -0
  170. package/build/port-reserver.js +118 -0
  171. package/build/port-reserver.js.map +1 -0
  172. package/build/puppeteer-manager.d.ts +47 -0
  173. package/build/puppeteer-manager.d.ts.map +1 -0
  174. package/build/puppeteer-manager.js +116 -0
  175. package/build/puppeteer-manager.js.map +1 -0
  176. package/build/recording-coverage.test.d.ts +12 -0
  177. package/build/recording-coverage.test.d.ts.map +1 -0
  178. package/build/recording-coverage.test.js +72 -0
  179. package/build/recording-coverage.test.js.map +1 -0
  180. package/build/reference-validator.d.ts +47 -0
  181. package/build/reference-validator.d.ts.map +1 -0
  182. package/build/reference-validator.js +86 -0
  183. package/build/reference-validator.js.map +1 -0
  184. package/build/reference-validator.test.d.ts +5 -0
  185. package/build/reference-validator.test.d.ts.map +1 -0
  186. package/build/reference-validator.test.js +243 -0
  187. package/build/reference-validator.test.js.map +1 -0
  188. package/build/replay-cursor.d.ts +27 -0
  189. package/build/replay-cursor.d.ts.map +1 -0
  190. package/build/replay-cursor.js +240 -0
  191. package/build/replay-cursor.js.map +1 -0
  192. package/build/runners/docker-compose-runner.d.ts +69 -0
  193. package/build/runners/docker-compose-runner.d.ts.map +1 -0
  194. package/build/runners/docker-compose-runner.js +438 -0
  195. package/build/runners/docker-compose-runner.js.map +1 -0
  196. package/build/runners/docker-runner.d.ts +65 -0
  197. package/build/runners/docker-runner.d.ts.map +1 -0
  198. package/build/runners/docker-runner.js +414 -0
  199. package/build/runners/docker-runner.js.map +1 -0
  200. package/build/runners/index.d.ts +19 -0
  201. package/build/runners/index.d.ts.map +1 -0
  202. package/build/runners/index.js +35 -0
  203. package/build/runners/index.js.map +1 -0
  204. package/build/runners/native-runner.d.ts +95 -0
  205. package/build/runners/native-runner.d.ts.map +1 -0
  206. package/build/runners/native-runner.js +370 -0
  207. package/build/runners/native-runner.js.map +1 -0
  208. package/build/runners/types.d.ts +147 -0
  209. package/build/runners/types.d.ts.map +1 -0
  210. package/build/runners/types.js +25 -0
  211. package/build/runners/types.js.map +1 -0
  212. package/build/self-restart.d.ts +12 -0
  213. package/build/self-restart.d.ts.map +1 -0
  214. package/build/self-restart.js +41 -0
  215. package/build/self-restart.js.map +1 -0
  216. package/build/self-restart.test.d.ts +2 -0
  217. package/build/self-restart.test.d.ts.map +1 -0
  218. package/build/self-restart.test.js +34 -0
  219. package/build/self-restart.test.js.map +1 -0
  220. package/build/server-claims.d.ts +161 -0
  221. package/build/server-claims.d.ts.map +1 -0
  222. package/build/server-claims.js +382 -0
  223. package/build/server-claims.js.map +1 -0
  224. package/build/server-claims.test.d.ts +2 -0
  225. package/build/server-claims.test.d.ts.map +1 -0
  226. package/build/server-claims.test.js +197 -0
  227. package/build/server-claims.test.js.map +1 -0
  228. package/build/server-manager.d.ts +438 -0
  229. package/build/server-manager.d.ts.map +1 -0
  230. package/build/server-manager.js +1674 -0
  231. package/build/server-manager.js.map +1 -0
  232. package/build/server-manager.test.d.ts +17 -0
  233. package/build/server-manager.test.d.ts.map +1 -0
  234. package/build/server-manager.test.js +122 -0
  235. package/build/server-manager.test.js.map +1 -0
  236. package/build/server-ownership.test.d.ts +2 -0
  237. package/build/server-ownership.test.d.ts.map +1 -0
  238. package/build/server-ownership.test.js +238 -0
  239. package/build/server-ownership.test.js.map +1 -0
  240. package/build/server-watcher.d.ts +21 -0
  241. package/build/server-watcher.d.ts.map +1 -0
  242. package/build/server-watcher.js +105 -0
  243. package/build/server-watcher.js.map +1 -0
  244. package/build/session-detector.d.ts +47 -0
  245. package/build/session-detector.d.ts.map +1 -0
  246. package/build/session-detector.js +229 -0
  247. package/build/session-detector.js.map +1 -0
  248. package/build/session-detector.test.d.ts +9 -0
  249. package/build/session-detector.test.d.ts.map +1 -0
  250. package/build/session-detector.test.js +45 -0
  251. package/build/session-detector.test.js.map +1 -0
  252. package/build/sourcemap-handler.d.ts +114 -0
  253. package/build/sourcemap-handler.d.ts.map +1 -0
  254. package/build/sourcemap-handler.js +479 -0
  255. package/build/sourcemap-handler.js.map +1 -0
  256. package/build/supervisor/child-manager.d.ts +43 -0
  257. package/build/supervisor/child-manager.d.ts.map +1 -0
  258. package/build/supervisor/child-manager.js +148 -0
  259. package/build/supervisor/child-manager.js.map +1 -0
  260. package/build/supervisor/child-manager.test.d.ts +2 -0
  261. package/build/supervisor/child-manager.test.d.ts.map +1 -0
  262. package/build/supervisor/child-manager.test.js +107 -0
  263. package/build/supervisor/child-manager.test.js.map +1 -0
  264. package/build/supervisor/client-watcher.d.ts +48 -0
  265. package/build/supervisor/client-watcher.d.ts.map +1 -0
  266. package/build/supervisor/client-watcher.js +186 -0
  267. package/build/supervisor/client-watcher.js.map +1 -0
  268. package/build/supervisor/client-watcher.test.d.ts +2 -0
  269. package/build/supervisor/client-watcher.test.d.ts.map +1 -0
  270. package/build/supervisor/client-watcher.test.js +121 -0
  271. package/build/supervisor/client-watcher.test.js.map +1 -0
  272. package/build/supervisor/idle-config.d.ts +30 -0
  273. package/build/supervisor/idle-config.d.ts.map +1 -0
  274. package/build/supervisor/idle-config.js +76 -0
  275. package/build/supervisor/idle-config.js.map +1 -0
  276. package/build/supervisor/idle-config.test.d.ts +2 -0
  277. package/build/supervisor/idle-config.test.d.ts.map +1 -0
  278. package/build/supervisor/idle-config.test.js +119 -0
  279. package/build/supervisor/idle-config.test.js.map +1 -0
  280. package/build/supervisor/ndjson-reader.d.ts +47 -0
  281. package/build/supervisor/ndjson-reader.d.ts.map +1 -0
  282. package/build/supervisor/ndjson-reader.js +75 -0
  283. package/build/supervisor/ndjson-reader.js.map +1 -0
  284. package/build/supervisor/ndjson-reader.test.d.ts +2 -0
  285. package/build/supervisor/ndjson-reader.test.d.ts.map +1 -0
  286. package/build/supervisor/ndjson-reader.test.js +92 -0
  287. package/build/supervisor/ndjson-reader.test.js.map +1 -0
  288. package/build/supervisor/pidfile.d.ts +11 -0
  289. package/build/supervisor/pidfile.d.ts.map +1 -0
  290. package/build/supervisor/pidfile.js +29 -0
  291. package/build/supervisor/pidfile.js.map +1 -0
  292. package/build/supervisor/pidfile.test.d.ts +8 -0
  293. package/build/supervisor/pidfile.test.d.ts.map +1 -0
  294. package/build/supervisor/pidfile.test.js +46 -0
  295. package/build/supervisor/pidfile.test.js.map +1 -0
  296. package/build/supervisor/restart-coordinator.d.ts +73 -0
  297. package/build/supervisor/restart-coordinator.d.ts.map +1 -0
  298. package/build/supervisor/restart-coordinator.js +300 -0
  299. package/build/supervisor/restart-coordinator.js.map +1 -0
  300. package/build/supervisor/restart-coordinator.test.d.ts +2 -0
  301. package/build/supervisor/restart-coordinator.test.d.ts.map +1 -0
  302. package/build/supervisor/restart-coordinator.test.js +434 -0
  303. package/build/supervisor/restart-coordinator.test.js.map +1 -0
  304. package/build/test-support/fake-execute-tool-call.d.ts +11 -0
  305. package/build/test-support/fake-execute-tool-call.d.ts.map +1 -0
  306. package/build/test-support/fake-execute-tool-call.js +19 -0
  307. package/build/test-support/fake-execute-tool-call.js.map +1 -0
  308. package/build/tool-error.d.ts +14 -0
  309. package/build/tool-error.d.ts.map +1 -0
  310. package/build/tool-error.js +18 -0
  311. package/build/tool-error.js.map +1 -0
  312. package/build/tool-response.d.ts +293 -0
  313. package/build/tool-response.d.ts.map +1 -0
  314. package/build/tool-response.js +365 -0
  315. package/build/tool-response.js.map +1 -0
  316. package/build/tools/assert-tools.d.ts +62 -0
  317. package/build/tools/assert-tools.d.ts.map +1 -0
  318. package/build/tools/assert-tools.js +330 -0
  319. package/build/tools/assert-tools.js.map +1 -0
  320. package/build/tools/breakpoint-await-abort.test.d.ts +2 -0
  321. package/build/tools/breakpoint-await-abort.test.d.ts.map +1 -0
  322. package/build/tools/breakpoint-await-abort.test.js +124 -0
  323. package/build/tools/breakpoint-await-abort.test.js.map +1 -0
  324. package/build/tools/breakpoint-tools.d.ts +99 -0
  325. package/build/tools/breakpoint-tools.d.ts.map +1 -0
  326. package/build/tools/breakpoint-tools.js +1197 -0
  327. package/build/tools/breakpoint-tools.js.map +1 -0
  328. package/build/tools/config-tools.d.ts +58 -0
  329. package/build/tools/config-tools.d.ts.map +1 -0
  330. package/build/tools/config-tools.js +180 -0
  331. package/build/tools/config-tools.js.map +1 -0
  332. package/build/tools/connection-routing.test.d.ts +12 -0
  333. package/build/tools/connection-routing.test.d.ts.map +1 -0
  334. package/build/tools/connection-routing.test.js +206 -0
  335. package/build/tools/connection-routing.test.js.map +1 -0
  336. package/build/tools/console-tools.d.ts +84 -0
  337. package/build/tools/console-tools.d.ts.map +1 -0
  338. package/build/tools/console-tools.js +241 -0
  339. package/build/tools/console-tools.js.map +1 -0
  340. package/build/tools/content-tools.d.ts +74 -0
  341. package/build/tools/content-tools.d.ts.map +1 -0
  342. package/build/tools/content-tools.js +582 -0
  343. package/build/tools/content-tools.js.map +1 -0
  344. package/build/tools/dashboard-tools.d.ts +38 -0
  345. package/build/tools/dashboard-tools.d.ts.map +1 -0
  346. package/build/tools/dashboard-tools.js +123 -0
  347. package/build/tools/dashboard-tools.js.map +1 -0
  348. package/build/tools/dom-tools.d.ts +41 -0
  349. package/build/tools/dom-tools.d.ts.map +1 -0
  350. package/build/tools/dom-tools.js +277 -0
  351. package/build/tools/dom-tools.js.map +1 -0
  352. package/build/tools/download-tools.d.ts +55 -0
  353. package/build/tools/download-tools.d.ts.map +1 -0
  354. package/build/tools/download-tools.js +280 -0
  355. package/build/tools/download-tools.js.map +1 -0
  356. package/build/tools/execution-tools.d.ts +40 -0
  357. package/build/tools/execution-tools.d.ts.map +1 -0
  358. package/build/tools/execution-tools.js +121 -0
  359. package/build/tools/execution-tools.js.map +1 -0
  360. package/build/tools/input-abort.test.d.ts +2 -0
  361. package/build/tools/input-abort.test.d.ts.map +1 -0
  362. package/build/tools/input-abort.test.js +227 -0
  363. package/build/tools/input-abort.test.js.map +1 -0
  364. package/build/tools/input-ambiguous-selector.test.d.ts +2 -0
  365. package/build/tools/input-ambiguous-selector.test.d.ts.map +1 -0
  366. package/build/tools/input-ambiguous-selector.test.js +34 -0
  367. package/build/tools/input-ambiguous-selector.test.js.map +1 -0
  368. package/build/tools/input-tools.d.ts +168 -0
  369. package/build/tools/input-tools.d.ts.map +1 -0
  370. package/build/tools/input-tools.js +1397 -0
  371. package/build/tools/input-tools.js.map +1 -0
  372. package/build/tools/inspection-tools.d.ts +112 -0
  373. package/build/tools/inspection-tools.d.ts.map +1 -0
  374. package/build/tools/inspection-tools.js +637 -0
  375. package/build/tools/inspection-tools.js.map +1 -0
  376. package/build/tools/interpolation.d.ts +30 -0
  377. package/build/tools/interpolation.d.ts.map +1 -0
  378. package/build/tools/interpolation.js +143 -0
  379. package/build/tools/interpolation.js.map +1 -0
  380. package/build/tools/issues-abort-hygiene.test.d.ts +2 -0
  381. package/build/tools/issues-abort-hygiene.test.d.ts.map +1 -0
  382. package/build/tools/issues-abort-hygiene.test.js +79 -0
  383. package/build/tools/issues-abort-hygiene.test.js.map +1 -0
  384. package/build/tools/issues-tools.d.ts +98 -0
  385. package/build/tools/issues-tools.d.ts.map +1 -0
  386. package/build/tools/issues-tools.js +821 -0
  387. package/build/tools/issues-tools.js.map +1 -0
  388. package/build/tools/issues-tools.test.d.ts +8 -0
  389. package/build/tools/issues-tools.test.d.ts.map +1 -0
  390. package/build/tools/issues-tools.test.js +184 -0
  391. package/build/tools/issues-tools.test.js.map +1 -0
  392. package/build/tools/modal-tools.d.ts +73 -0
  393. package/build/tools/modal-tools.d.ts.map +1 -0
  394. package/build/tools/modal-tools.js +161 -0
  395. package/build/tools/modal-tools.js.map +1 -0
  396. package/build/tools/network-tools.d.ts +72 -0
  397. package/build/tools/network-tools.d.ts.map +1 -0
  398. package/build/tools/network-tools.js +432 -0
  399. package/build/tools/network-tools.js.map +1 -0
  400. package/build/tools/page-tools.d.ts +78 -0
  401. package/build/tools/page-tools.d.ts.map +1 -0
  402. package/build/tools/page-tools.js +255 -0
  403. package/build/tools/page-tools.js.map +1 -0
  404. package/build/tools/plugin-tools.d.ts +16 -0
  405. package/build/tools/plugin-tools.d.ts.map +1 -0
  406. package/build/tools/plugin-tools.js +17 -0
  407. package/build/tools/plugin-tools.js.map +1 -0
  408. package/build/tools/replay-abort.test.d.ts +2 -0
  409. package/build/tools/replay-abort.test.d.ts.map +1 -0
  410. package/build/tools/replay-abort.test.js +259 -0
  411. package/build/tools/replay-abort.test.js.map +1 -0
  412. package/build/tools/replay-add-conditional.test.d.ts +2 -0
  413. package/build/tools/replay-add-conditional.test.d.ts.map +1 -0
  414. package/build/tools/replay-add-conditional.test.js +205 -0
  415. package/build/tools/replay-add-conditional.test.js.map +1 -0
  416. package/build/tools/replay-background-run.test.d.ts +2 -0
  417. package/build/tools/replay-background-run.test.d.ts.map +1 -0
  418. package/build/tools/replay-background-run.test.js +176 -0
  419. package/build/tools/replay-background-run.test.js.map +1 -0
  420. package/build/tools/replay-capture-variables.test.d.ts +2 -0
  421. package/build/tools/replay-capture-variables.test.d.ts.map +1 -0
  422. package/build/tools/replay-capture-variables.test.js +331 -0
  423. package/build/tools/replay-capture-variables.test.js.map +1 -0
  424. package/build/tools/replay-conditional-idb-and-launch.test.d.ts +11 -0
  425. package/build/tools/replay-conditional-idb-and-launch.test.d.ts.map +1 -0
  426. package/build/tools/replay-conditional-idb-and-launch.test.js +429 -0
  427. package/build/tools/replay-conditional-idb-and-launch.test.js.map +1 -0
  428. package/build/tools/replay-conditional-timeout.test.d.ts +14 -0
  429. package/build/tools/replay-conditional-timeout.test.d.ts.map +1 -0
  430. package/build/tools/replay-conditional-timeout.test.js +126 -0
  431. package/build/tools/replay-conditional-timeout.test.js.map +1 -0
  432. package/build/tools/replay-declare.test.d.ts +2 -0
  433. package/build/tools/replay-declare.test.d.ts.map +1 -0
  434. package/build/tools/replay-declare.test.js +106 -0
  435. package/build/tools/replay-declare.test.js.map +1 -0
  436. package/build/tools/replay-declared-browser-cleanup.test.d.ts +2 -0
  437. package/build/tools/replay-declared-browser-cleanup.test.d.ts.map +1 -0
  438. package/build/tools/replay-declared-browser-cleanup.test.js +103 -0
  439. package/build/tools/replay-declared-browser-cleanup.test.js.map +1 -0
  440. package/build/tools/replay-declared-profile.test.d.ts +2 -0
  441. package/build/tools/replay-declared-profile.test.d.ts.map +1 -0
  442. package/build/tools/replay-declared-profile.test.js +116 -0
  443. package/build/tools/replay-declared-profile.test.js.map +1 -0
  444. package/build/tools/replay-executor.d.ts +556 -0
  445. package/build/tools/replay-executor.d.ts.map +1 -0
  446. package/build/tools/replay-executor.js +2347 -0
  447. package/build/tools/replay-executor.js.map +1 -0
  448. package/build/tools/replay-folder-save.test.d.ts +2 -0
  449. package/build/tools/replay-folder-save.test.d.ts.map +1 -0
  450. package/build/tools/replay-folder-save.test.js +63 -0
  451. package/build/tools/replay-folder-save.test.js.map +1 -0
  452. package/build/tools/replay-formatters.d.ts +148 -0
  453. package/build/tools/replay-formatters.d.ts.map +1 -0
  454. package/build/tools/replay-formatters.js +856 -0
  455. package/build/tools/replay-formatters.js.map +1 -0
  456. package/build/tools/replay-kill-chrome-on-finish.test.d.ts +2 -0
  457. package/build/tools/replay-kill-chrome-on-finish.test.d.ts.map +1 -0
  458. package/build/tools/replay-kill-chrome-on-finish.test.js +175 -0
  459. package/build/tools/replay-kill-chrome-on-finish.test.js.map +1 -0
  460. package/build/tools/replay-multi-connection.test.d.ts +2 -0
  461. package/build/tools/replay-multi-connection.test.d.ts.map +1 -0
  462. package/build/tools/replay-multi-connection.test.js +547 -0
  463. package/build/tools/replay-multi-connection.test.js.map +1 -0
  464. package/build/tools/replay-output-and-record-options.test.d.ts +2 -0
  465. package/build/tools/replay-output-and-record-options.test.d.ts.map +1 -0
  466. package/build/tools/replay-output-and-record-options.test.js +240 -0
  467. package/build/tools/replay-output-and-record-options.test.js.map +1 -0
  468. package/build/tools/replay-production-error-shape.test.d.ts +7 -0
  469. package/build/tools/replay-production-error-shape.test.d.ts.map +1 -0
  470. package/build/tools/replay-production-error-shape.test.js +93 -0
  471. package/build/tools/replay-production-error-shape.test.js.map +1 -0
  472. package/build/tools/replay-rebase.test.d.ts +2 -0
  473. package/build/tools/replay-rebase.test.d.ts.map +1 -0
  474. package/build/tools/replay-rebase.test.js +58 -0
  475. package/build/tools/replay-rebase.test.js.map +1 -0
  476. package/build/tools/replay-retry-classification.test.d.ts +9 -0
  477. package/build/tools/replay-retry-classification.test.d.ts.map +1 -0
  478. package/build/tools/replay-retry-classification.test.js +57 -0
  479. package/build/tools/replay-retry-classification.test.js.map +1 -0
  480. package/build/tools/replay-run-registry.d.ts +55 -0
  481. package/build/tools/replay-run-registry.d.ts.map +1 -0
  482. package/build/tools/replay-run-registry.js +65 -0
  483. package/build/tools/replay-run-registry.js.map +1 -0
  484. package/build/tools/replay-sequence-reload.test.d.ts +2 -0
  485. package/build/tools/replay-sequence-reload.test.d.ts.map +1 -0
  486. package/build/tools/replay-sequence-reload.test.js +82 -0
  487. package/build/tools/replay-sequence-reload.test.js.map +1 -0
  488. package/build/tools/replay-socket-scope.test.d.ts +2 -0
  489. package/build/tools/replay-socket-scope.test.d.ts.map +1 -0
  490. package/build/tools/replay-socket-scope.test.js +75 -0
  491. package/build/tools/replay-socket-scope.test.js.map +1 -0
  492. package/build/tools/replay-step-connection.test.d.ts +2 -0
  493. package/build/tools/replay-step-connection.test.d.ts.map +1 -0
  494. package/build/tools/replay-step-connection.test.js +292 -0
  495. package/build/tools/replay-step-connection.test.js.map +1 -0
  496. package/build/tools/replay-step-timeout.test.d.ts +2 -0
  497. package/build/tools/replay-step-timeout.test.d.ts.map +1 -0
  498. package/build/tools/replay-step-timeout.test.js +204 -0
  499. package/build/tools/replay-step-timeout.test.js.map +1 -0
  500. package/build/tools/replay-tags.test.d.ts +2 -0
  501. package/build/tools/replay-tags.test.d.ts.map +1 -0
  502. package/build/tools/replay-tags.test.js +99 -0
  503. package/build/tools/replay-tags.test.js.map +1 -0
  504. package/build/tools/replay-teardown-and-foreach.test.d.ts +13 -0
  505. package/build/tools/replay-teardown-and-foreach.test.d.ts.map +1 -0
  506. package/build/tools/replay-teardown-and-foreach.test.js +318 -0
  507. package/build/tools/replay-teardown-and-foreach.test.js.map +1 -0
  508. package/build/tools/replay-tool-name-validation.test.d.ts +2 -0
  509. package/build/tools/replay-tool-name-validation.test.d.ts.map +1 -0
  510. package/build/tools/replay-tool-name-validation.test.js +280 -0
  511. package/build/tools/replay-tool-name-validation.test.js.map +1 -0
  512. package/build/tools/replay-tools.d.ts +288 -0
  513. package/build/tools/replay-tools.d.ts.map +1 -0
  514. package/build/tools/replay-tools.js +2994 -0
  515. package/build/tools/replay-tools.js.map +1 -0
  516. package/build/tools/request-abort.test.d.ts +2 -0
  517. package/build/tools/request-abort.test.d.ts.map +1 -0
  518. package/build/tools/request-abort.test.js +130 -0
  519. package/build/tools/request-abort.test.js.map +1 -0
  520. package/build/tools/request-tools.d.ts +56 -0
  521. package/build/tools/request-tools.d.ts.map +1 -0
  522. package/build/tools/request-tools.js +174 -0
  523. package/build/tools/request-tools.js.map +1 -0
  524. package/build/tools/screenshot-tools.d.ts +135 -0
  525. package/build/tools/screenshot-tools.d.ts.map +1 -0
  526. package/build/tools/screenshot-tools.js +636 -0
  527. package/build/tools/screenshot-tools.js.map +1 -0
  528. package/build/tools/server-tools.d.ts +88 -0
  529. package/build/tools/server-tools.d.ts.map +1 -0
  530. package/build/tools/server-tools.js +485 -0
  531. package/build/tools/server-tools.js.map +1 -0
  532. package/build/tools/source-tools.d.ts +46 -0
  533. package/build/tools/source-tools.d.ts.map +1 -0
  534. package/build/tools/source-tools.js +47 -0
  535. package/build/tools/source-tools.js.map +1 -0
  536. package/build/tools/storage-tools.d.ts +141 -0
  537. package/build/tools/storage-tools.d.ts.map +1 -0
  538. package/build/tools/storage-tools.js +894 -0
  539. package/build/tools/storage-tools.js.map +1 -0
  540. package/build/tools/storage-tools.test.d.ts +13 -0
  541. package/build/tools/storage-tools.test.d.ts.map +1 -0
  542. package/build/tools/storage-tools.test.js +707 -0
  543. package/build/tools/storage-tools.test.js.map +1 -0
  544. package/build/tools/tab-tools.d.ts +42 -0
  545. package/build/tools/tab-tools.d.ts.map +1 -0
  546. package/build/tools/tab-tools.js +296 -0
  547. package/build/tools/tab-tools.js.map +1 -0
  548. package/build/tools/wait-tools.d.ts +85 -0
  549. package/build/tools/wait-tools.d.ts.map +1 -0
  550. package/build/tools/wait-tools.js +236 -0
  551. package/build/tools/wait-tools.js.map +1 -0
  552. package/build/tools/wait-tools.test.d.ts +9 -0
  553. package/build/tools/wait-tools.test.d.ts.map +1 -0
  554. package/build/tools/wait-tools.test.js +193 -0
  555. package/build/tools/wait-tools.test.js.map +1 -0
  556. package/build/types.d.ts +133 -0
  557. package/build/types.d.ts.map +1 -0
  558. package/build/types.js +5 -0
  559. package/build/types.js.map +1 -0
  560. package/build/ui-verifier.d.ts +88 -0
  561. package/build/ui-verifier.d.ts.map +1 -0
  562. package/build/ui-verifier.js +540 -0
  563. package/build/ui-verifier.js.map +1 -0
  564. package/build/utils/abort.d.ts +68 -0
  565. package/build/utils/abort.d.ts.map +1 -0
  566. package/build/utils/abort.js +159 -0
  567. package/build/utils/abort.js.map +1 -0
  568. package/build/utils/abort.test.d.ts +2 -0
  569. package/build/utils/abort.test.d.ts.map +1 -0
  570. package/build/utils/abort.test.js +174 -0
  571. package/build/utils/abort.test.js.map +1 -0
  572. package/build/utils/modal-detection-core.d.ts +150 -0
  573. package/build/utils/modal-detection-core.d.ts.map +1 -0
  574. package/build/utils/modal-detection-core.js +332 -0
  575. package/build/utils/modal-detection-core.js.map +1 -0
  576. package/build/utils/modal-detection-core.test.d.ts +5 -0
  577. package/build/utils/modal-detection-core.test.d.ts.map +1 -0
  578. package/build/utils/modal-detection-core.test.js +492 -0
  579. package/build/utils/modal-detection-core.test.js.map +1 -0
  580. package/build/utils/modal-detector.d.ts +29 -0
  581. package/build/utils/modal-detector.d.ts.map +1 -0
  582. package/build/utils/modal-detector.js +281 -0
  583. package/build/utils/modal-detector.js.map +1 -0
  584. package/build/utils/modal-dismissal.d.ts +32 -0
  585. package/build/utils/modal-dismissal.d.ts.map +1 -0
  586. package/build/utils/modal-dismissal.js +190 -0
  587. package/build/utils/modal-dismissal.js.map +1 -0
  588. package/build/utils/port-check.d.ts +31 -0
  589. package/build/utils/port-check.d.ts.map +1 -0
  590. package/build/utils/port-check.js +87 -0
  591. package/build/utils/port-check.js.map +1 -0
  592. package/build/utils/port-check.test.d.ts +2 -0
  593. package/build/utils/port-check.test.d.ts.map +1 -0
  594. package/build/utils/port-check.test.js +66 -0
  595. package/build/utils/port-check.test.js.map +1 -0
  596. package/build/utils/selector-resolver.d.ts +66 -0
  597. package/build/utils/selector-resolver.d.ts.map +1 -0
  598. package/build/utils/selector-resolver.js +200 -0
  599. package/build/utils/selector-resolver.js.map +1 -0
  600. package/build/validation-helpers.d.ts +41 -0
  601. package/build/validation-helpers.d.ts.map +1 -0
  602. package/build/validation-helpers.js +236 -0
  603. package/build/validation-helpers.js.map +1 -0
  604. package/build/window-sizing.d.ts +26 -0
  605. package/build/window-sizing.d.ts.map +1 -0
  606. package/build/window-sizing.js +87 -0
  607. package/build/window-sizing.js.map +1 -0
  608. package/build/window-sizing.test.d.ts +8 -0
  609. package/build/window-sizing.test.d.ts.map +1 -0
  610. package/build/window-sizing.test.js +113 -0
  611. package/build/window-sizing.test.js.map +1 -0
  612. package/docs/README.md +74 -0
  613. package/docs/automation.md +562 -0
  614. package/docs/debugging.md +229 -0
  615. package/docs/installation.md +133 -0
  616. package/docs/instructions.md +227 -0
  617. package/docs/mcp-instructions.md +15 -0
  618. package/docs/message-system.md +327 -0
  619. package/docs/messages.md +3480 -0
  620. package/docs/parser-plugins.md +132 -0
  621. package/docs/replay.md +1411 -0
  622. package/docs/troubleshooting.md +272 -0
  623. package/docs/working_with_llm_notes.md +5 -0
  624. package/package.json +87 -0
  625. package/skills/devharness/SKILL.md +195 -0
  626. package/skills/devharness/references/sequences.md +613 -0
  627. package/skills/devharness/references/tool-categories.md +99 -0
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Network Monitor
3
+ * Tracks network requests from the browser
4
+ */
5
+ import { Page } from 'puppeteer-core';
6
+ export interface StoredNetworkRequest {
7
+ id: string;
8
+ url: string;
9
+ method: string;
10
+ resourceType: string;
11
+ requestHeaders: Record<string, string>;
12
+ postData?: string;
13
+ response?: {
14
+ status: number;
15
+ statusText: string;
16
+ headers: Record<string, string>;
17
+ body?: string;
18
+ bodySize?: number;
19
+ bodyTokens?: number;
20
+ bodyPath?: string;
21
+ };
22
+ timing?: {
23
+ startTime: number;
24
+ endTime?: number;
25
+ duration?: number;
26
+ };
27
+ failed: boolean;
28
+ errorText?: string;
29
+ }
30
+ /**
31
+ * One WebSocket's life. Puppeteer's page events do not cover WebSockets, so
32
+ * these come from the raw CDP Network domain.
33
+ *
34
+ * A socket that opened and is still open is healthy. One that CLOSED during a
35
+ * run is the interesting case: an app whose reads come over a socket can keep
36
+ * rendering the last synced snapshot afterwards and pass every assertion.
37
+ */
38
+ export interface StoredWebSocket {
39
+ id: string;
40
+ url: string;
41
+ openedAt: number;
42
+ closedAt?: number;
43
+ /** Frame-level protocol errors, which do not necessarily close the socket. */
44
+ errors: string[];
45
+ /**
46
+ * CDP target type that owns the socket - 'page', or a worker type such as
47
+ * 'worker'/'shared_worker'/'service_worker'. An app that syncs from a worker
48
+ * has its real transport here, not on the page.
49
+ */
50
+ target: string;
51
+ /** CDP session the socket was seen on; scopes its id and its lifetime. */
52
+ sessionId: string;
53
+ /**
54
+ * Its target is gone, so the close came with the teardown rather than from
55
+ * the transport failing. Decided when the socket is read, not when it closed:
56
+ * a close event and its target's detach race, and blaming whichever arrived
57
+ * first made healthy navigations and identity changes look like drops.
58
+ */
59
+ closedWithTarget?: boolean;
60
+ /**
61
+ * The page sent a close frame - it hung up on purpose (an app dropping a
62
+ * socket on sign-out or an identity change), rather than losing the
63
+ * transport. `Network.webSocketClosed` carries no close code, so the sent
64
+ * opcode-8 frame is the only CDP-visible signal of intent.
65
+ */
66
+ clientClosed?: boolean;
67
+ }
68
+ export declare class NetworkMonitor {
69
+ private sockets;
70
+ /**
71
+ * Sessions still attached. Whether a socket's target is gone has to be
72
+ * answered when the question is asked, not when the socket closed: the close
73
+ * event and the target's detach race, and if the close lands first the socket
74
+ * looks self-inflicted when its worker was actually being torn down.
75
+ */
76
+ private liveSessions;
77
+ private wsClient;
78
+ /** The page wsClient belongs to, so re-entry can tell "again" from "elsewhere". */
79
+ private wsPage;
80
+ private requests;
81
+ private requestIdCounter;
82
+ private maxRequests;
83
+ private isMonitoring;
84
+ private lastActivityTime;
85
+ /**
86
+ * Start monitoring network requests on a page
87
+ */
88
+ startMonitoring(page: Page): void;
89
+ /**
90
+ * Subscribe to the CDP WebSocket lifecycle events for this page and its workers.
91
+ *
92
+ * Called again after every navigation (page-tools restartMonitoring), but the
93
+ * page's CDP session and its auto-attach both survive navigation - so one
94
+ * session per page is set up once and kept.
95
+ *
96
+ * Recreating it per navigation is worse than redundant. A second session
97
+ * auto-attaches to the same workers and records every socket twice, and
98
+ * detaching the first orphans whatever it had already recorded: nothing is
99
+ * left to deliver those sockets' close events, so they read open forever. A
100
+ * frozen-open entry is exactly what makes a "is the transport up?" check pass
101
+ * over a dead socket.
102
+ */
103
+ private startSocketMonitoring;
104
+ /**
105
+ * Funnel one session's WebSocket lifecycle into the shared store.
106
+ *
107
+ * CDP requestIds are unique per session, not globally, so the store is keyed
108
+ * by session and id together - two targets can otherwise overwrite each
109
+ * other's sockets.
110
+ */
111
+ private bindSocketEvents;
112
+ /** Every WebSocket seen, oldest first. */
113
+ getSockets(): StoredWebSocket[];
114
+ /** Open / closed / errored counts, for a health check. */
115
+ getSocketHealth(): {
116
+ total: number;
117
+ open: number;
118
+ closed: number;
119
+ errored: number;
120
+ };
121
+ /**
122
+ * Stop monitoring
123
+ */
124
+ stopMonitoring(page: Page): void;
125
+ /**
126
+ * Handle request start
127
+ */
128
+ private onRequest;
129
+ /**
130
+ * Handle response
131
+ */
132
+ private onResponse;
133
+ /**
134
+ * Handle request failure
135
+ */
136
+ private onRequestFailed;
137
+ /**
138
+ * Get all requests
139
+ */
140
+ getRequests(filter?: {
141
+ resourceType?: string;
142
+ limit?: number;
143
+ offset?: number;
144
+ }): StoredNetworkRequest[];
145
+ /**
146
+ * Get a request by ID
147
+ */
148
+ getRequest(id: string): StoredNetworkRequest | undefined;
149
+ /**
150
+ * Clear all requests
151
+ */
152
+ clearSockets(): void;
153
+ clear(): void;
154
+ /**
155
+ * Get request count
156
+ */
157
+ getCount(resourceType?: string): number;
158
+ /**
159
+ * Check if monitoring
160
+ */
161
+ isActive(): boolean;
162
+ /**
163
+ * Get the timestamp of the last network activity
164
+ */
165
+ getLastActivityTime(): number;
166
+ /**
167
+ * Check if there has been network activity within the specified duration
168
+ * @param withinMs - Duration in milliseconds to check for activity
169
+ */
170
+ hasRecentActivity(withinMs: number): boolean;
171
+ }
172
+ //# sourceMappingURL=network-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-monitor.d.ts","sourceRoot":"","sources":["../src/network-monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,350 @@
1
+ /**
2
+ * Network Monitor
3
+ * Tracks network requests from the browser
4
+ */
5
+ export class NetworkMonitor {
6
+ sockets = new Map();
7
+ /**
8
+ * Sessions still attached. Whether a socket's target is gone has to be
9
+ * answered when the question is asked, not when the socket closed: the close
10
+ * event and the target's detach race, and if the close lands first the socket
11
+ * looks self-inflicted when its worker was actually being torn down.
12
+ */
13
+ liveSessions = new Set();
14
+ wsClient = null;
15
+ /** The page wsClient belongs to, so re-entry can tell "again" from "elsewhere". */
16
+ wsPage = null;
17
+ requests = new Map();
18
+ requestIdCounter = 0;
19
+ maxRequests = 1000;
20
+ isMonitoring = false;
21
+ lastActivityTime = Date.now();
22
+ /**
23
+ * Start monitoring network requests on a page
24
+ */
25
+ startMonitoring(page) {
26
+ // Remove any existing listeners first to avoid duplicates
27
+ page.removeAllListeners('request');
28
+ page.removeAllListeners('response');
29
+ page.removeAllListeners('requestfailed');
30
+ // Attach network listeners
31
+ page.on('request', (request) => {
32
+ this.onRequest(request);
33
+ });
34
+ page.on('response', async (response) => {
35
+ await this.onResponse(response);
36
+ });
37
+ page.on('requestfailed', (request) => {
38
+ this.onRequestFailed(request);
39
+ });
40
+ // WebSocket lifecycle rides the CDP Network domain - puppeteer surfaces no
41
+ // page event for it. Failing to attach must not break HTTP monitoring.
42
+ void this.startSocketMonitoring(page);
43
+ this.isMonitoring = true;
44
+ }
45
+ /**
46
+ * Subscribe to the CDP WebSocket lifecycle events for this page and its workers.
47
+ *
48
+ * Called again after every navigation (page-tools restartMonitoring), but the
49
+ * page's CDP session and its auto-attach both survive navigation - so one
50
+ * session per page is set up once and kept.
51
+ *
52
+ * Recreating it per navigation is worse than redundant. A second session
53
+ * auto-attaches to the same workers and records every socket twice, and
54
+ * detaching the first orphans whatever it had already recorded: nothing is
55
+ * left to deliver those sockets' close events, so they read open forever. A
56
+ * frozen-open entry is exactly what makes a "is the transport up?" check pass
57
+ * over a dead socket.
58
+ */
59
+ async startSocketMonitoring(page) {
60
+ if (this.wsClient && this.wsPage === page)
61
+ return;
62
+ // A genuinely different page: that session's sockets belong to a document
63
+ // that is gone.
64
+ const previous = this.wsClient;
65
+ this.wsClient = null;
66
+ if (previous) {
67
+ try {
68
+ await previous.detach();
69
+ }
70
+ catch { /* already gone with its target */ }
71
+ for (const sock of this.sockets.values())
72
+ if (!sock.closedAt)
73
+ sock.closedAt = Date.now();
74
+ this.liveSessions.clear();
75
+ }
76
+ try {
77
+ this.wsPage = page;
78
+ const client = await page.createCDPSession();
79
+ this.wsClient = client;
80
+ await client.send('Network.enable');
81
+ // The page's own session outlives every navigation, so its sockets are
82
+ // judged on their own close events, never as target teardown.
83
+ this.liveSessions.add('page');
84
+ this.bindSocketEvents(client, 'page', 'page');
85
+ // A socket opened inside a Web Worker belongs to that worker's target and
86
+ // emits nothing on the page session, so each worker needs its own session
87
+ // with Network enabled. waitForDebuggerOnStart holds the worker before its
88
+ // first line runs - otherwise a socket opened at worker boot is missed.
89
+ client.on('Target.attachedToTarget', async (e) => {
90
+ const child = client.connection?.()?.session(e.sessionId);
91
+ try {
92
+ if (child) {
93
+ await child.send('Network.enable');
94
+ this.liveSessions.add(e.sessionId);
95
+ this.bindSocketEvents(child, String(e.targetInfo?.type || 'worker'), e.sessionId);
96
+ }
97
+ }
98
+ catch {
99
+ // Target went away mid-attach; nothing to unwind.
100
+ }
101
+ finally {
102
+ // Must run on EVERY path, including no child session. The target is
103
+ // held before its first line, so failing to resume it does not lose
104
+ // monitoring - it stops the worker existing, and an app whose sync
105
+ // lives in that worker simply never starts.
106
+ if (e.waitingForDebugger) {
107
+ const resume = child ?? client;
108
+ await resume.send('Runtime.runIfWaitingForDebugger', child ? undefined : { sessionId: e.sessionId })
109
+ .catch(() => { });
110
+ }
111
+ }
112
+ });
113
+ // A target that goes away takes its sockets with it and delivers no
114
+ // webSocketClosed for them - a navigation replaces the worker, and its
115
+ // socket would otherwise read as open forever.
116
+ client.on('Target.detachedFromTarget', (e) => {
117
+ this.liveSessions.delete(e.sessionId);
118
+ for (const sock of this.sockets.values()) {
119
+ if (sock.sessionId === e.sessionId && !sock.closedAt) {
120
+ sock.closedAt = Date.now();
121
+ }
122
+ }
123
+ });
124
+ await client.send('Target.setAutoAttach', {
125
+ autoAttach: true,
126
+ waitForDebuggerOnStart: true,
127
+ flatten: true,
128
+ });
129
+ }
130
+ catch {
131
+ // No CDP session: HTTP monitoring still works, sockets are simply unseen.
132
+ }
133
+ }
134
+ /**
135
+ * Funnel one session's WebSocket lifecycle into the shared store.
136
+ *
137
+ * CDP requestIds are unique per session, not globally, so the store is keyed
138
+ * by session and id together - two targets can otherwise overwrite each
139
+ * other's sockets.
140
+ */
141
+ bindSocketEvents(client, target, sessionId) {
142
+ const key = (requestId) => `${sessionId}:${requestId}`;
143
+ client.on('Network.webSocketCreated', (e) => {
144
+ this.sockets.set(key(e.requestId), {
145
+ id: e.requestId, url: e.url, openedAt: Date.now(), errors: [], target, sessionId,
146
+ });
147
+ this.lastActivityTime = Date.now();
148
+ });
149
+ client.on('Network.webSocketClosed', (e) => {
150
+ const sock = this.sockets.get(key(e.requestId));
151
+ if (sock)
152
+ sock.closedAt = Date.now();
153
+ this.lastActivityTime = Date.now();
154
+ });
155
+ client.on('Network.webSocketFrameError', (e) => {
156
+ const sock = this.sockets.get(key(e.requestId));
157
+ if (sock)
158
+ sock.errors.push(String(e.errorMessage || 'frame error'));
159
+ });
160
+ // Opcode 8 is the close frame. Sent by the page means it chose to hang up.
161
+ client.on('Network.webSocketFrameSent', (e) => {
162
+ if (e?.response?.opcode !== 8)
163
+ return;
164
+ const sock = this.sockets.get(key(e.requestId));
165
+ if (sock)
166
+ sock.clientClosed = true;
167
+ });
168
+ }
169
+ /** Every WebSocket seen, oldest first. */
170
+ getSockets() {
171
+ return [...this.sockets.values()]
172
+ .map(s => ({
173
+ ...s,
174
+ // Answered now rather than at close time - see closedWithTarget. The
175
+ // page session is never detached while monitoring runs, so a page
176
+ // socket is only ever judged on its own close.
177
+ closedWithTarget: !!s.closedAt && !this.liveSessions.has(s.sessionId),
178
+ }))
179
+ .sort((a, b) => a.openedAt - b.openedAt);
180
+ }
181
+ /** Open / closed / errored counts, for a health check. */
182
+ getSocketHealth() {
183
+ const all = this.getSockets();
184
+ return {
185
+ total: all.length,
186
+ open: all.filter(s => !s.closedAt).length,
187
+ closed: all.filter(s => s.closedAt).length,
188
+ errored: all.filter(s => s.errors.length > 0).length,
189
+ };
190
+ }
191
+ /**
192
+ * Stop monitoring
193
+ */
194
+ stopMonitoring(page) {
195
+ page.removeAllListeners('request');
196
+ page.removeAllListeners('response');
197
+ page.removeAllListeners('requestfailed');
198
+ this.isMonitoring = false;
199
+ }
200
+ /**
201
+ * Handle request start
202
+ */
203
+ onRequest(request) {
204
+ const id = `network-${this.requestIdCounter++}`;
205
+ this.lastActivityTime = Date.now();
206
+ const storedRequest = {
207
+ id,
208
+ url: request.url(),
209
+ method: request.method(),
210
+ resourceType: request.resourceType(),
211
+ requestHeaders: request.headers(),
212
+ postData: request.postData(),
213
+ timing: {
214
+ startTime: Date.now(),
215
+ },
216
+ failed: false,
217
+ };
218
+ this.requests.set(id, storedRequest);
219
+ // Keep only last N requests
220
+ if (this.requests.size > this.maxRequests) {
221
+ const firstKey = this.requests.keys().next().value;
222
+ if (firstKey) {
223
+ this.requests.delete(firstKey);
224
+ }
225
+ }
226
+ }
227
+ /**
228
+ * Handle response
229
+ */
230
+ async onResponse(response) {
231
+ const request = response.request();
232
+ const url = request.url();
233
+ // Find the stored request
234
+ const storedRequest = Array.from(this.requests.values()).find(r => r.url === url && !r.response);
235
+ if (storedRequest && storedRequest.timing) {
236
+ storedRequest.timing.endTime = Date.now();
237
+ storedRequest.timing.duration = storedRequest.timing.endTime - storedRequest.timing.startTime;
238
+ try {
239
+ // Get response body (only for certain content types to avoid binary data issues)
240
+ let body;
241
+ let bodySize;
242
+ let bodyTokens;
243
+ const contentType = response.headers()['content-type'] || '';
244
+ const isText = contentType.includes('text') ||
245
+ contentType.includes('json') ||
246
+ contentType.includes('javascript');
247
+ if (isText) {
248
+ try {
249
+ body = await response.text();
250
+ // Track body size and estimate token count
251
+ if (body) {
252
+ bodySize = body.length;
253
+ // Rough estimation: 1 token ≈ 4 characters
254
+ bodyTokens = Math.ceil(bodySize / 4);
255
+ }
256
+ }
257
+ catch {
258
+ // Ignore errors when reading body
259
+ }
260
+ }
261
+ storedRequest.response = {
262
+ status: response.status(),
263
+ statusText: response.statusText(),
264
+ headers: response.headers(),
265
+ body,
266
+ bodySize,
267
+ bodyTokens,
268
+ };
269
+ }
270
+ catch (error) {
271
+ // Response might not be available
272
+ }
273
+ }
274
+ }
275
+ /**
276
+ * Handle request failure
277
+ */
278
+ onRequestFailed(request) {
279
+ const url = request.url();
280
+ // Find the stored request
281
+ const storedRequest = Array.from(this.requests.values()).find(r => r.url === url && !r.failed);
282
+ if (storedRequest) {
283
+ storedRequest.failed = true;
284
+ storedRequest.errorText = request.failure()?.errorText;
285
+ if (storedRequest.timing) {
286
+ storedRequest.timing.endTime = Date.now();
287
+ storedRequest.timing.duration = storedRequest.timing.endTime - storedRequest.timing.startTime;
288
+ }
289
+ }
290
+ }
291
+ /**
292
+ * Get all requests
293
+ */
294
+ getRequests(filter) {
295
+ let filtered = Array.from(this.requests.values());
296
+ // Filter by resource type
297
+ if (filter?.resourceType) {
298
+ filtered = filtered.filter(req => req.resourceType === filter.resourceType);
299
+ }
300
+ // Apply offset and limit
301
+ const offset = filter?.offset || 0;
302
+ const limit = filter?.limit || filtered.length;
303
+ return filtered.slice(offset, offset + limit);
304
+ }
305
+ /**
306
+ * Get a request by ID
307
+ */
308
+ getRequest(id) {
309
+ return this.requests.get(id);
310
+ }
311
+ /**
312
+ * Clear all requests
313
+ */
314
+ clearSockets() {
315
+ this.sockets.clear();
316
+ }
317
+ clear() {
318
+ this.requests.clear();
319
+ this.requestIdCounter = 0;
320
+ }
321
+ /**
322
+ * Get request count
323
+ */
324
+ getCount(resourceType) {
325
+ if (resourceType) {
326
+ return Array.from(this.requests.values()).filter(req => req.resourceType === resourceType).length;
327
+ }
328
+ return this.requests.size;
329
+ }
330
+ /**
331
+ * Check if monitoring
332
+ */
333
+ isActive() {
334
+ return this.isMonitoring;
335
+ }
336
+ /**
337
+ * Get the timestamp of the last network activity
338
+ */
339
+ getLastActivityTime() {
340
+ return this.lastActivityTime;
341
+ }
342
+ /**
343
+ * Check if there has been network activity within the specified duration
344
+ * @param withinMs - Duration in milliseconds to check for activity
345
+ */
346
+ hasRecentActivity(withinMs) {
347
+ return Date.now() - this.lastActivityTime < withinMs;
348
+ }
349
+ }
350
+ //# sourceMappingURL=network-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-monitor.js","sourceRoot":"","sources":["../src/network-monitor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoEH,MAAM,OAAO,cAAc;IACjB,OAAO,GAAiC,IAAI,GAAG,EAAE,CAAC;IAC1D;;;;;OAKG;IACK,YAAY,GAAgB,IAAI,GAAG,EAAE,CAAC;IACtC,QAAQ,GAAQ,IAAI,CAAC;IAC7B,mFAAmF;IAC3E,MAAM,GAAQ,IAAI,CAAC;IACnB,QAAQ,GAAsC,IAAI,GAAG,EAAE,CAAC;IACxD,gBAAgB,GAAG,CAAC,CAAC;IACrB,WAAW,GAAG,IAAI,CAAC;IACnB,YAAY,GAAG,KAAK,CAAC;IACrB,gBAAgB,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;IAE9C;;OAEG;IACH,eAAe,CAAC,IAAU;QACxB,0DAA0D;QAC1D,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QACpC,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;QAEzC,2BAA2B;QAC3B,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAoB,EAAE,EAAE;YAC1C,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,QAAsB,EAAE,EAAE;YACnD,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,OAAoB,EAAE,EAAE;YAChD,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,uEAAuE;QACvE,KAAK,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAEtC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED;;;;;;;;;;;;;OAaG;IACK,KAAK,CAAC,qBAAqB,CAAC,IAAU;QAC5C,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;YAAE,OAAO;QAClD,0EAA0E;QAC1E,gBAAgB;QAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC;gBAAC,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,kCAAkC,CAAC,CAAC;YAC7E,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;oBAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACzF,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,MAAM,MAAM,GAAQ,MAAO,IAAY,CAAC,gBAAgB,EAAE,CAAC;YAC3D,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;YACvB,MAAM,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACpC,uEAAuE;YACvE,8DAA8D;YAC9D,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC9B,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAE9C,0EAA0E;YAC1E,0EAA0E;YAC1E,2EAA2E;YAC3E,wEAAwE;YACxE,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,KAAK,EAAE,CAAM,EAAE,EAAE;gBACpD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBAC1D,IAAI,CAAC;oBACH,IAAI,KAAK,EAAE,CAAC;wBACV,MAAM,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;wBACnC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;wBACnC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;oBACpF,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,kDAAkD;gBACpD,CAAC;wBAAS,CAAC;oBACT,oEAAoE;oBACpE,oEAAoE;oBACpE,mEAAmE;oBACnE,4CAA4C;oBAC5C,IAAI,CAAC,CAAC,kBAAkB,EAAE,CAAC;wBACzB,MAAM,MAAM,GAAG,KAAK,IAAI,MAAM,CAAC;wBAC/B,MAAM,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;6BACjG,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;oBACrB,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,oEAAoE;YACpE,uEAAuE;YACvE,+CAA+C;YAC/C,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,CAAM,EAAE,EAAE;gBAChD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBACtC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;oBACzC,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACrD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC7B,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;gBACxC,UAAU,EAAE,IAAI;gBAChB,sBAAsB,EAAE,IAAI;gBAC5B,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,0EAA0E;QAC5E,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACK,gBAAgB,CAAC,MAAW,EAAE,MAAc,EAAE,SAAiB;QACrE,MAAM,GAAG,GAAG,CAAC,SAAiB,EAAE,EAAE,CAAC,GAAG,SAAS,IAAI,SAAS,EAAE,CAAC;QAC/D,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,CAAM,EAAE,EAAE;YAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE;gBACjC,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS;aACjF,CAAC,CAAC;YACH,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,CAAM,EAAE,EAAE;YAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YAChD,IAAI,IAAI;gBAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACrC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,CAAM,EAAE,EAAE;YAClD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YAChD,IAAI,IAAI;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,IAAI,aAAa,CAAC,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QACH,2EAA2E;QAC3E,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,CAAM,EAAE,EAAE;YACjD,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;gBAAE,OAAO;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YAChD,IAAI,IAAI;gBAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,0CAA0C;IAC1C,UAAU;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;aAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACT,GAAG,CAAC;YACJ,qEAAqE;YACrE,kEAAkE;YAClE,+CAA+C;YAC/C,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;SACtE,CAAC,CAAC;aACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,0DAA0D;IAC1D,eAAe;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC9B,OAAO;YACL,KAAK,EAAE,GAAG,CAAC,MAAM;YACjB,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM;YACzC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM;YAC1C,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM;SACrD,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,IAAU;QACvB,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QACpC,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;QACzC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IAED;;OAEG;IACK,SAAS,CAAC,OAAoB;QACpC,MAAM,EAAE,GAAG,WAAW,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;QAChD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEnC,MAAM,aAAa,GAAyB;YAC1C,EAAE;YACF,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;YACxB,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE;YACpC,cAAc,EAAE,OAAO,CAAC,OAAO,EAAE;YACjC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE;YAC5B,MAAM,EAAE;gBACN,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB;YACD,MAAM,EAAE,KAAK;SACd,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;QAErC,4BAA4B;QAC5B,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YACnD,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU,CAAC,QAAsB;QAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAE1B,0BAA0B;QAC1B,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAC3D,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAClC,CAAC;QAEF,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;YAC1C,aAAa,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC1C,aAAa,CAAC,MAAM,CAAC,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC;YAE9F,IAAI,CAAC;gBACH,iFAAiF;gBACjF,IAAI,IAAwB,CAAC;gBAC7B,IAAI,QAA4B,CAAC;gBACjC,IAAI,UAA8B,CAAC;gBAEnC,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;gBAC7D,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAC7B,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAC5B,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gBAEjD,IAAI,MAAM,EAAE,CAAC;oBACX,IAAI,CAAC;wBACH,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;wBAC7B,2CAA2C;wBAC3C,IAAI,IAAI,EAAE,CAAC;4BACT,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;4BACvB,2CAA2C;4BAC3C,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;wBACvC,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,kCAAkC;oBACpC,CAAC;gBACH,CAAC;gBAED,aAAa,CAAC,QAAQ,GAAG;oBACvB,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE;oBACzB,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE;oBACjC,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE;oBAC3B,IAAI;oBACJ,QAAQ;oBACR,UAAU;iBACX,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,kCAAkC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,OAAoB;QAC1C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAE1B,0BAA0B;QAC1B,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAC3D,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAChC,CAAC;QAEF,IAAI,aAAa,EAAE,CAAC;YAClB,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC;YAC5B,aAAa,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC;YACvD,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;gBACzB,aAAa,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC1C,aAAa,CAAC,MAAM,CAAC,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC;YAChG,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,MAAmE;QAC7E,IAAI,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAElD,0BAA0B;QAC1B,IAAI,MAAM,EAAE,YAAY,EAAE,CAAC;YACzB,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,KAAK,MAAM,CAAC,YAAY,CAAC,CAAC;QAC9E,CAAC;QAED,yBAAyB;QACzB,MAAM,MAAM,GAAG,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC;QAE/C,OAAO,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,EAAU;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,YAAY;QACV,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,YAAqB;QAC5B,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAC9C,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,KAAK,YAAY,CACzC,CAAC,MAAM,CAAC;QACX,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,iBAAiB,CAAC,QAAgB;QAChC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;IACvD,CAAC;CACF"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Shared overlay system for cdp-tools
3
+ * Provides consistent UI for issue workflows (workOn, resolve, replay)
4
+ */
5
+ import type { Page } from 'puppeteer-core';
6
+ export type OverlayAction = 'cancel' | 'record' | 'explore' | 'begin' | 'yes' | 'no';
7
+ export interface OverlayButton {
8
+ id: string;
9
+ label: string;
10
+ action: OverlayAction;
11
+ primary?: boolean;
12
+ danger?: boolean;
13
+ }
14
+ export interface OverlayConfig {
15
+ id: string;
16
+ title: string;
17
+ description: string;
18
+ instructions?: string;
19
+ buttons: OverlayButton[];
20
+ showComment?: boolean;
21
+ commentPlaceholder?: string;
22
+ }
23
+ export interface OverlayResult {
24
+ action: OverlayAction;
25
+ comment?: string;
26
+ }
27
+ /**
28
+ * Overlay for workOn when there's no sequence - offers Record or Explore
29
+ */
30
+ export declare function getWorkOnNoSequenceConfig(issueType: 'bug' | 'feature', issueId: number, issueTitle: string): OverlayConfig;
31
+ /**
32
+ * Overlay for workOn/resolve when there IS a sequence - just Begin or Cancel
33
+ */
34
+ export declare function getTestReadyConfig(issueType: 'bug' | 'feature', issueId: number, issueTitle: string): OverlayConfig;
35
+ /**
36
+ * Overlay for resolve verification - asks if issue is fixed
37
+ */
38
+ export declare function getVerificationConfig(issueType: 'bug' | 'feature', issueId: number, issueTitle: string): OverlayConfig;
39
+ /**
40
+ * Show a modal overlay with configurable buttons
41
+ * Returns the action taken and optional comment
42
+ */
43
+ export declare function showOverlay(page: Page, config: OverlayConfig): Promise<OverlayResult>;
44
+ /**
45
+ * Show a "Replay in progress" overlay that blocks user interaction
46
+ * Returns a cleanup function to remove the overlay
47
+ */
48
+ export declare function showReplayBanner(page: Page, issueType: 'bug' | 'feature', issueTitle: string, issueId: number): Promise<() => Promise<void>>;
49
+ //# sourceMappingURL=overlays.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlays.d.ts","sourceRoot":"","sources":["../src/overlays.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAM3C,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC;AAErF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,KAAK,GAAG,SAAS,EAC5B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,aAAa,CAef;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,KAAK,GAAG,SAAS,EAC5B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,aAAa,CAaf;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,KAAK,GAAG,SAAS,EAC5B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,aAAa,CAoBf;AAMD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,aAAa,CAAC,CAgNxB;AAMD;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,KAAK,GAAG,SAAS,EAC5B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAyJ9B"}