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,546 @@
1
+ /**
2
+ * Unit tests for CDPManager getVariables token budget logic, and for
3
+ * disconnect()'s resume-callback handling.
4
+ */
5
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
6
+ import { CDPManager, EvaluateExpressionExceptionError } from './cdp-manager.js';
7
+ // We can't directly test the private methods, but we can test the logic
8
+ // by extracting and testing the calculations
9
+ describe('Token Budget Calculations', () => {
10
+ /**
11
+ * Mirror of the calculateEffectiveBudget logic for testing
12
+ */
13
+ function calculateEffectiveBudget(maxTokens) {
14
+ const FIXED_OVERHEAD = 200; // Message template + code block + wrapper
15
+ const PROPORTIONAL_OVERHEAD = 1.3; // JSON indentation adds ~30%
16
+ return Math.floor((maxTokens - FIXED_OVERHEAD) / PROPORTIONAL_OVERHEAD);
17
+ }
18
+ /**
19
+ * Mirror of the estimateTokens logic for testing
20
+ */
21
+ function estimateTokens(value) {
22
+ const str = typeof value === 'string' ? value : JSON.stringify(value);
23
+ return Math.ceil(str.length / 4);
24
+ }
25
+ describe('calculateEffectiveBudget', () => {
26
+ it('should return ~615 tokens for default maxTokens of 1000', () => {
27
+ // (1000 - 200) / 1.3 = 615.38... -> 615
28
+ const result = calculateEffectiveBudget(1000);
29
+ expect(result).toBe(615);
30
+ });
31
+ it('should return 0 for maxTokens <= 200 (all consumed by overhead)', () => {
32
+ expect(calculateEffectiveBudget(200)).toBe(0);
33
+ expect(calculateEffectiveBudget(100)).toBeLessThan(0);
34
+ });
35
+ it('should scale proportionally with larger budgets', () => {
36
+ // (2000 - 200) / 1.3 = 1384.61... -> 1384
37
+ expect(calculateEffectiveBudget(2000)).toBe(1384);
38
+ // (5000 - 200) / 1.3 = 3692.30... -> 3692
39
+ expect(calculateEffectiveBudget(5000)).toBe(3692);
40
+ });
41
+ });
42
+ describe('estimateTokens', () => {
43
+ it('should estimate ~4 chars per token', () => {
44
+ expect(estimateTokens('1234')).toBe(1);
45
+ expect(estimateTokens('12345678')).toBe(2);
46
+ expect(estimateTokens('123')).toBe(1); // ceil(3/4) = 1
47
+ });
48
+ it('should handle objects via JSON.stringify', () => {
49
+ const obj = { a: 1 };
50
+ // JSON.stringify({ a: 1 }) = '{"a":1}' = 7 chars -> ceil(7/4) = 2
51
+ expect(estimateTokens(obj)).toBe(2);
52
+ });
53
+ it('should handle arrays', () => {
54
+ const arr = [1, 2, 3];
55
+ // JSON.stringify([1,2,3]) = '[1,2,3]' = 7 chars -> ceil(7/4) = 2
56
+ expect(estimateTokens(arr)).toBe(2);
57
+ });
58
+ });
59
+ describe('Response Type Selection Logic', () => {
60
+ /**
61
+ * Simulates the getVariables response type selection
62
+ */
63
+ function selectResponseType(fullAtDepthTokens, depth0Tokens, namesOnlyTokens, effectiveBudget, requestedDepth, hasFilter) {
64
+ // Step 1: Try full at requested depth
65
+ if (requestedDepth > 0 && fullAtDepthTokens <= effectiveBudget) {
66
+ return { responseType: 'full', filterInsufficient: false };
67
+ }
68
+ // Step 2: Try depth 0
69
+ if (depth0Tokens <= effectiveBudget) {
70
+ const wasDepthReduced = requestedDepth > 0;
71
+ return {
72
+ responseType: wasDepthReduced ? 'depth_reduced' : 'full',
73
+ filterInsufficient: false
74
+ };
75
+ }
76
+ // Step 3: Try names only
77
+ if (namesOnlyTokens <= effectiveBudget) {
78
+ return { responseType: 'names_only', filterInsufficient: hasFilter };
79
+ }
80
+ // Step 4: Counts only (always fits)
81
+ return { responseType: 'counts_only', filterInsufficient: hasFilter };
82
+ }
83
+ it('should return full when data fits at requested depth', () => {
84
+ const result = selectResponseType(500, // fullAtDepthTokens
85
+ 200, // depth0Tokens
86
+ 50, // namesOnlyTokens
87
+ 615, // effectiveBudget
88
+ 2, // requestedDepth
89
+ false // hasFilter
90
+ );
91
+ expect(result.responseType).toBe('full');
92
+ expect(result.filterInsufficient).toBe(false);
93
+ });
94
+ it('should return depth_reduced when only depth 0 fits', () => {
95
+ const result = selectResponseType(1000, // fullAtDepthTokens - too big
96
+ 500, // depth0Tokens - fits
97
+ 50, // namesOnlyTokens
98
+ 615, // effectiveBudget
99
+ 2, // requestedDepth
100
+ false // hasFilter
101
+ );
102
+ expect(result.responseType).toBe('depth_reduced');
103
+ expect(result.filterInsufficient).toBe(false);
104
+ });
105
+ it('should return full (not depth_reduced) when depth 0 was requested', () => {
106
+ const result = selectResponseType(500, // fullAtDepthTokens
107
+ 500, // depth0Tokens
108
+ 50, // namesOnlyTokens
109
+ 615, // effectiveBudget
110
+ 0, // requestedDepth = 0
111
+ false // hasFilter
112
+ );
113
+ expect(result.responseType).toBe('full');
114
+ expect(result.filterInsufficient).toBe(false);
115
+ });
116
+ it('should return names_only when depth 0 is too big', () => {
117
+ const result = selectResponseType(2000, // fullAtDepthTokens - too big
118
+ 1000, // depth0Tokens - too big
119
+ 300, // namesOnlyTokens - fits
120
+ 615, // effectiveBudget
121
+ 2, // requestedDepth
122
+ false // hasFilter
123
+ );
124
+ expect(result.responseType).toBe('names_only');
125
+ expect(result.filterInsufficient).toBe(false);
126
+ });
127
+ it('should set filterInsufficient when filter provided but still too large', () => {
128
+ const result = selectResponseType(2000, // fullAtDepthTokens - too big
129
+ 1000, // depth0Tokens - too big
130
+ 300, // namesOnlyTokens - fits
131
+ 615, // effectiveBudget
132
+ 2, // requestedDepth
133
+ true // hasFilter
134
+ );
135
+ expect(result.responseType).toBe('names_only');
136
+ expect(result.filterInsufficient).toBe(true);
137
+ });
138
+ it('should return counts_only when names too big', () => {
139
+ const result = selectResponseType(5000, // fullAtDepthTokens - too big
140
+ 3000, // depth0Tokens - too big
141
+ 1000, // namesOnlyTokens - too big
142
+ 615, // effectiveBudget
143
+ 2, // requestedDepth
144
+ false // hasFilter
145
+ );
146
+ expect(result.responseType).toBe('counts_only');
147
+ expect(result.filterInsufficient).toBe(false);
148
+ });
149
+ it('should set filterInsufficient on counts_only when filter provided', () => {
150
+ const result = selectResponseType(5000, // fullAtDepthTokens - too big
151
+ 3000, // depth0Tokens - too big
152
+ 1000, // namesOnlyTokens - too big
153
+ 615, // effectiveBudget
154
+ 2, // requestedDepth
155
+ true // hasFilter
156
+ );
157
+ expect(result.responseType).toBe('counts_only');
158
+ expect(result.filterInsufficient).toBe(true);
159
+ });
160
+ });
161
+ describe('Real-world Scenarios', () => {
162
+ it('should handle small scope (5 local variables, no global) - expect full', () => {
163
+ const variables = [
164
+ { name: 'count', value: 42, type: 'number', scopeType: 'local' },
165
+ { name: 'name', value: 'test', type: 'string', scopeType: 'local' },
166
+ { name: 'user', value: { id: 1, name: 'John' }, type: 'object', scopeType: 'local' },
167
+ { name: 'items', value: [1, 2, 3], type: 'object', scopeType: 'local' },
168
+ { name: 'config', value: { debug: true }, type: 'object', scopeType: 'local' },
169
+ ];
170
+ const tokens = estimateTokens(variables);
171
+ const budget = calculateEffectiveBudget(1000);
172
+ // This should easily fit
173
+ expect(tokens).toBeLessThan(budget);
174
+ });
175
+ it('should handle large scope with many variables - may need fallback', () => {
176
+ // Create 100 variables
177
+ const variables = Array.from({ length: 100 }, (_, i) => ({
178
+ name: `variable${i}`,
179
+ value: { data: `value${i}`, nested: { deep: i } },
180
+ type: 'object',
181
+ scopeType: 'local',
182
+ }));
183
+ const tokens = estimateTokens(variables);
184
+ const budget = calculateEffectiveBudget(1000);
185
+ // This should exceed the budget
186
+ expect(tokens).toBeGreaterThan(budget);
187
+ // But names only should fit
188
+ const namesOnly = { local: variables.map(v => v.name) };
189
+ const namesTokens = estimateTokens(namesOnly);
190
+ expect(namesTokens).toBeLessThan(budget);
191
+ });
192
+ it('should demonstrate the overhead calculation is reasonable', () => {
193
+ // Test that our overhead accounts for realistic message formatting
194
+ const data = { local: [{ name: 'x', value: 1, type: 'number' }] };
195
+ const rawTokens = estimateTokens(data);
196
+ // Simulate what the final response might look like
197
+ const messageTemplate = 'Variables for call frame abc123: 1 of 1 total at depth 2';
198
+ const codeBlock = '```json\n' + JSON.stringify(data, null, 2) + '\n```';
199
+ const fullResponse = messageTemplate + '\n\n' + codeBlock;
200
+ const fullTokens = estimateTokens(fullResponse);
201
+ const overhead = fullTokens - rawTokens;
202
+ // Our FIXED_OVERHEAD of 200 should be greater than actual overhead
203
+ // to provide a safety buffer
204
+ expect(200).toBeGreaterThanOrEqual(overhead);
205
+ });
206
+ });
207
+ });
208
+ describe('CDPManager.disconnect() resume-callback handling', () => {
209
+ // `client` and `state` are private, but typed loosely enough (client: any)
210
+ // that poking them directly is the simplest way to exercise disconnect()'s
211
+ // cleanup logic without standing up a real CDP connection.
212
+ function withMockClient(cdpManager, close, paused) {
213
+ cdpManager.client = { close };
214
+ cdpManager.state.paused = paused;
215
+ }
216
+ it('fires resumeCallback when disconnecting a paused connection', async () => {
217
+ const cdpManager = new CDPManager();
218
+ const resumeCallback = vi.fn();
219
+ cdpManager.setResumeCallback(resumeCallback);
220
+ const close = vi.fn().mockResolvedValue(undefined);
221
+ withMockClient(cdpManager, close, true);
222
+ await cdpManager.disconnect();
223
+ expect(close).toHaveBeenCalledTimes(1);
224
+ expect(resumeCallback).toHaveBeenCalledTimes(1);
225
+ });
226
+ it('does not fire resumeCallback when disconnecting a connection that was not paused', async () => {
227
+ const cdpManager = new CDPManager();
228
+ const resumeCallback = vi.fn();
229
+ cdpManager.setResumeCallback(resumeCallback);
230
+ const close = vi.fn().mockResolvedValue(undefined);
231
+ withMockClient(cdpManager, close, false);
232
+ await cdpManager.disconnect();
233
+ expect(resumeCallback).not.toHaveBeenCalled();
234
+ });
235
+ it('still fires resumeCallback even if client.close() throws', async () => {
236
+ const cdpManager = new CDPManager();
237
+ const resumeCallback = vi.fn();
238
+ cdpManager.setResumeCallback(resumeCallback);
239
+ const close = vi.fn().mockRejectedValue(new Error('socket already closed'));
240
+ withMockClient(cdpManager, close, true);
241
+ await expect(cdpManager.disconnect()).rejects.toThrow('socket already closed');
242
+ expect(resumeCallback).toHaveBeenCalledTimes(1);
243
+ });
244
+ });
245
+ describe('CDPManager.evaluateExpression() - bug-004 (hang on thrown RangeError)', () => {
246
+ // Root cause: Runtime.evaluate()/Debugger.evaluateOnCallFrame() report a
247
+ // thrown exception via `exceptionDetails` on an otherwise *successful*
248
+ // response, not via promise rejection. The old code never looked at
249
+ // exceptionDetails, so a genuinely wedged CDP response (e.g. triggered by
250
+ // a stack-exhaustion RangeError) had no code path that could ever produce
251
+ // a result, an error, or a timeout - it just hung.
252
+ function withMockRuntime(cdpManager, evaluate) {
253
+ cdpManager.client = { Runtime: { evaluate }, Debugger: {} };
254
+ cdpManager.state.connected = true;
255
+ }
256
+ beforeEach(() => {
257
+ vi.useRealTimers();
258
+ });
259
+ afterEach(() => {
260
+ vi.useRealTimers();
261
+ });
262
+ it('surfaces a thrown RangeError (exceptionDetails) as EvaluateExpressionExceptionError instead of hanging or swallowing it', async () => {
263
+ const cdpManager = new CDPManager();
264
+ const evaluate = vi.fn().mockResolvedValue({
265
+ result: { type: 'undefined' },
266
+ exceptionDetails: {
267
+ text: 'Uncaught RangeError',
268
+ exception: {
269
+ type: 'object',
270
+ subtype: 'error',
271
+ className: 'RangeError',
272
+ description: 'RangeError: Maximum call stack size exceeded\n at <anonymous>:1:1',
273
+ },
274
+ },
275
+ });
276
+ withMockRuntime(cdpManager, evaluate);
277
+ await expect(cdpManager.evaluateExpression('Math.max(...new Float32Array(32768))')).rejects.toMatchObject({
278
+ name: 'EvaluateExpressionExceptionError',
279
+ exceptionType: 'RangeError',
280
+ exceptionMessage: 'RangeError: Maximum call stack size exceeded',
281
+ });
282
+ });
283
+ it('does not treat a thrown-exception response as a successful result', async () => {
284
+ const cdpManager = new CDPManager();
285
+ const evaluate = vi.fn().mockResolvedValue({
286
+ result: { type: 'undefined' },
287
+ exceptionDetails: {
288
+ text: 'Uncaught RangeError',
289
+ exception: { className: 'RangeError', description: 'RangeError: boom' },
290
+ },
291
+ });
292
+ withMockRuntime(cdpManager, evaluate);
293
+ let threw = false;
294
+ try {
295
+ await cdpManager.evaluateExpression('boom()');
296
+ }
297
+ catch (error) {
298
+ threw = true;
299
+ expect(error).toBeInstanceOf(EvaluateExpressionExceptionError);
300
+ }
301
+ expect(threw).toBe(true);
302
+ });
303
+ it('rejects with EvaluateExpressionTimeoutError instead of hanging forever when CDP never responds', async () => {
304
+ vi.useFakeTimers();
305
+ const cdpManager = new CDPManager();
306
+ cdpManager.evaluateExpressionTimeoutMs = 5_000; // short bound, driven by fake timers
307
+ const evaluate = vi.fn().mockReturnValue(new Promise(() => { })); // never resolves - simulates the wedged renderer
308
+ withMockRuntime(cdpManager, evaluate);
309
+ const resultPromise = cdpManager.evaluateExpression('while(true){}');
310
+ // Attach a rejection handler immediately so Node doesn't complain about
311
+ // an unhandled rejection while fake timers are advanced below.
312
+ const assertion = expect(resultPromise).rejects.toMatchObject({
313
+ name: 'EvaluateExpressionTimeoutError',
314
+ timeoutMs: 5_000,
315
+ });
316
+ await vi.advanceTimersByTimeAsync(6_000);
317
+ await assertion;
318
+ });
319
+ it('still returns a normal formatted value when evaluation succeeds without an exception', async () => {
320
+ const cdpManager = new CDPManager();
321
+ const evaluate = vi.fn().mockResolvedValue({ result: { type: 'number', value: 42 } });
322
+ withMockRuntime(cdpManager, evaluate);
323
+ const result = await cdpManager.evaluateExpression('40 + 2');
324
+ expect(result).toBe('42');
325
+ });
326
+ it('passes CDP\'s own timeout param so well-behaved renderers can abort the runaway script themselves', async () => {
327
+ const cdpManager = new CDPManager();
328
+ cdpManager.evaluateExpressionTimeoutMs = 10_000;
329
+ const evaluate = vi.fn().mockResolvedValue({ result: { type: 'number', value: 1 } });
330
+ withMockRuntime(cdpManager, evaluate);
331
+ await cdpManager.evaluateExpression('1');
332
+ expect(evaluate).toHaveBeenCalledWith(expect.objectContaining({ expression: '1', timeout: expect.any(Number) }));
333
+ const passedTimeout = evaluate.mock.calls[0][0].timeout;
334
+ expect(passedTimeout).toBeLessThan(10_000); // strictly less than our own client-side bound
335
+ expect(passedTimeout).toBeGreaterThan(0);
336
+ });
337
+ });
338
+ describe('CDPManager.evaluateExpression() - bug-015 (promises not awaited)', () => {
339
+ // Empirically verified against Chrome 150 (see bug-015):
340
+ // - Runtime.evaluate({ awaitPromise: true }) resolves promises normally
341
+ // while the page is running, but HANGS if the debugger is paused (the
342
+ // event loop is stopped, so the promise can never settle).
343
+ // - Debugger.evaluateOnCallFrame IGNORES awaitPromise entirely and returns
344
+ // the Promise RemoteObject immediately.
345
+ // - While paused, an already-settled promise's value is still recoverable
346
+ // via the [[PromiseState]]/[[PromiseResult]] internal properties.
347
+ function withMockClient(cdpManager, mocks) {
348
+ cdpManager.client = {
349
+ Runtime: {
350
+ evaluate: mocks.evaluate,
351
+ getProperties: mocks.getProperties,
352
+ callFunctionOn: mocks.callFunctionOn,
353
+ },
354
+ Debugger: { evaluateOnCallFrame: mocks.evaluateOnCallFrame },
355
+ };
356
+ cdpManager.state.connected = true;
357
+ cdpManager.state.paused = mocks.paused ?? false;
358
+ }
359
+ const fulfilledPromiseRemote = {
360
+ type: 'object',
361
+ subtype: 'promise',
362
+ className: 'Promise',
363
+ description: 'Promise',
364
+ objectId: 'promise-1',
365
+ };
366
+ it('passes awaitPromise: true to Runtime.evaluate by default so async results resolve', async () => {
367
+ const cdpManager = new CDPManager();
368
+ const evaluate = vi.fn().mockResolvedValue({ result: { type: 'string', value: 'AWAITED_OK' } });
369
+ withMockClient(cdpManager, { evaluate });
370
+ const result = await cdpManager.evaluateExpression("(async () => 'AWAITED_OK')()");
371
+ expect(evaluate).toHaveBeenCalledWith(expect.objectContaining({ awaitPromise: true }));
372
+ expect(result).toBe('"AWAITED_OK"');
373
+ });
374
+ it('does NOT pass awaitPromise to Runtime.evaluate while the debugger is paused (it would hang until timeout)', async () => {
375
+ const cdpManager = new CDPManager();
376
+ const evaluate = vi.fn().mockResolvedValue({ result: fulfilledPromiseRemote });
377
+ const getProperties = vi.fn().mockResolvedValue({
378
+ result: [],
379
+ internalProperties: [
380
+ { name: '[[PromiseState]]', value: { type: 'string', value: 'fulfilled' } },
381
+ { name: '[[PromiseResult]]', value: { type: 'string', value: 'RECOVERED' } },
382
+ ],
383
+ });
384
+ withMockClient(cdpManager, { evaluate, getProperties, paused: true });
385
+ const result = await cdpManager.evaluateExpression('Promise.resolve("RECOVERED")');
386
+ expect(evaluate.mock.calls[0][0]).not.toHaveProperty('awaitPromise');
387
+ // ...but a promise that already settled is still recovered exactly,
388
+ // via its [[PromiseResult]] internal property.
389
+ expect(result).toBe('"RECOVERED"');
390
+ });
391
+ it('never passes awaitPromise to Debugger.evaluateOnCallFrame and recovers a settled promise via internal properties', async () => {
392
+ const cdpManager = new CDPManager();
393
+ const evaluateOnCallFrame = vi.fn().mockResolvedValue({ result: fulfilledPromiseRemote });
394
+ const getProperties = vi.fn().mockResolvedValue({
395
+ result: [],
396
+ internalProperties: [
397
+ { name: '[[PromiseState]]', value: { type: 'string', value: 'fulfilled' } },
398
+ { name: '[[PromiseResult]]', value: { type: 'number', value: 42 } },
399
+ ],
400
+ });
401
+ withMockClient(cdpManager, { evaluateOnCallFrame, getProperties, paused: true });
402
+ const result = await cdpManager.evaluateExpression('Promise.resolve(42)', 'frame-1');
403
+ expect(evaluateOnCallFrame.mock.calls[0][0]).not.toHaveProperty('awaitPromise');
404
+ expect(result).toBe('42');
405
+ });
406
+ it('fails fast with EvaluateExpressionPendingPromiseError when a promise cannot settle at a paused frame', async () => {
407
+ const cdpManager = new CDPManager();
408
+ const evaluateOnCallFrame = vi.fn().mockResolvedValue({ result: fulfilledPromiseRemote });
409
+ const getProperties = vi.fn().mockResolvedValue({
410
+ result: [],
411
+ internalProperties: [
412
+ { name: '[[PromiseState]]', value: { type: 'string', value: 'pending' } },
413
+ { name: '[[PromiseResult]]', value: { type: 'undefined' } },
414
+ ],
415
+ });
416
+ withMockClient(cdpManager, { evaluateOnCallFrame, getProperties, paused: true });
417
+ const started = Date.now();
418
+ await expect(cdpManager.evaluateExpression('fetch("/never")', 'frame-1')).rejects.toMatchObject({ name: 'EvaluateExpressionPendingPromiseError' });
419
+ // Fail-fast, not a burn of the 10s client-side timeout.
420
+ expect(Date.now() - started).toBeLessThan(2_000);
421
+ });
422
+ it('surfaces a promise already rejected at a paused frame as EvaluateExpressionExceptionError', async () => {
423
+ const cdpManager = new CDPManager();
424
+ const evaluateOnCallFrame = vi.fn().mockResolvedValue({ result: fulfilledPromiseRemote });
425
+ const getProperties = vi.fn().mockResolvedValue({
426
+ result: [],
427
+ internalProperties: [
428
+ { name: '[[PromiseState]]', value: { type: 'string', value: 'rejected' } },
429
+ {
430
+ name: '[[PromiseResult]]',
431
+ value: {
432
+ type: 'object',
433
+ subtype: 'error',
434
+ className: 'Error',
435
+ description: 'Error: PRE_PAUSE_REJ\n at <anonymous>:1:1',
436
+ },
437
+ },
438
+ ],
439
+ });
440
+ withMockClient(cdpManager, { evaluateOnCallFrame, getProperties, paused: true });
441
+ await expect(cdpManager.evaluateExpression('globalThis.__rejected', 'frame-1')).rejects.toMatchObject({
442
+ name: 'EvaluateExpressionExceptionError',
443
+ exceptionType: 'Error',
444
+ exceptionMessage: 'Error: PRE_PAUSE_REJ',
445
+ });
446
+ });
447
+ it('surfaces an awaited rejection with a primitive reason (no description on the exception)', async () => {
448
+ const cdpManager = new CDPManager();
449
+ // Chrome reports Promise.reject('plain-reason') as exceptionDetails with
450
+ // text "Uncaught (in promise)" and the primitive as exception.value.
451
+ const evaluate = vi.fn().mockResolvedValue({
452
+ result: { type: 'undefined' },
453
+ exceptionDetails: {
454
+ text: 'Uncaught (in promise)',
455
+ exception: { type: 'string', value: 'plain-reason' },
456
+ },
457
+ });
458
+ withMockClient(cdpManager, { evaluate });
459
+ await expect(cdpManager.evaluateExpression("Promise.reject('plain-reason')")).rejects.toMatchObject({
460
+ name: 'EvaluateExpressionExceptionError',
461
+ exceptionMessage: 'plain-reason',
462
+ });
463
+ });
464
+ it('returns the Promise object itself when awaitPromise: false is passed', async () => {
465
+ const cdpManager = new CDPManager();
466
+ const evaluate = vi.fn().mockResolvedValue({ result: fulfilledPromiseRemote });
467
+ const getProperties = vi.fn();
468
+ withMockClient(cdpManager, { evaluate, getProperties });
469
+ const result = await cdpManager.evaluateExpression('Promise.resolve(1)', undefined, false, 2, {
470
+ awaitPromise: false,
471
+ });
472
+ expect(evaluate.mock.calls[0][0]).not.toHaveProperty('awaitPromise');
473
+ expect(getProperties).not.toHaveBeenCalled();
474
+ expect(result).toBe('Promise');
475
+ });
476
+ });
477
+ describe('CDPManager.evaluateExpressionDetailed() - exact raw capture for saveAs (bug-015)', () => {
478
+ function withMockClient(cdpManager, mocks) {
479
+ cdpManager.client = {
480
+ Runtime: {
481
+ evaluate: mocks.evaluate,
482
+ getProperties: mocks.getProperties,
483
+ callFunctionOn: mocks.callFunctionOn,
484
+ },
485
+ Debugger: { evaluateOnCallFrame: mocks.evaluateOnCallFrame },
486
+ };
487
+ cdpManager.state.connected = true;
488
+ cdpManager.state.paused = mocks.paused ?? false;
489
+ }
490
+ it('captures a plain object exactly via callFunctionOn returnByValue (no display round-trip)', async () => {
491
+ const cdpManager = new CDPManager();
492
+ const evaluate = vi.fn().mockResolvedValue({
493
+ result: { type: 'object', className: 'Object', description: 'Object', objectId: 'obj-1' },
494
+ });
495
+ const callFunctionOn = vi.fn().mockResolvedValue({
496
+ result: { type: 'object', value: { id: 7, name: 'kit', nested: { s: '42' } } },
497
+ });
498
+ // formatValue expansion path
499
+ const getProperties = vi.fn().mockResolvedValue({ result: [] });
500
+ withMockClient(cdpManager, { evaluate, getProperties, callFunctionOn });
501
+ const detailed = await cdpManager.evaluateExpressionDetailed('state', undefined, true, 2, {
502
+ captureRaw: true,
503
+ });
504
+ expect(callFunctionOn).toHaveBeenCalledWith(expect.objectContaining({ objectId: 'obj-1', returnByValue: true }));
505
+ expect(detailed.rawCaptured).toBe(true);
506
+ // The string "42" stays a string - no deformat quoting heuristics involved.
507
+ expect(detailed.rawValue).toEqual({ id: 7, name: 'kit', nested: { s: '42' } });
508
+ });
509
+ it('captures primitives exactly from the RemoteObject value', async () => {
510
+ const cdpManager = new CDPManager();
511
+ const evaluate = vi.fn().mockResolvedValue({ result: { type: 'string', value: 'x "quoted" y' } });
512
+ withMockClient(cdpManager, { evaluate });
513
+ const detailed = await cdpManager.evaluateExpressionDetailed('s', undefined, true, 2, {
514
+ captureRaw: true,
515
+ });
516
+ expect(detailed.rawCaptured).toBe(true);
517
+ expect(detailed.rawValue).toBe('x "quoted" y');
518
+ });
519
+ it('falls back (rawCaptured: false) when the value is not serializable by value', async () => {
520
+ const cdpManager = new CDPManager();
521
+ const evaluate = vi.fn().mockResolvedValue({
522
+ result: { type: 'object', className: 'Object', description: 'Window', objectId: 'win-1' },
523
+ });
524
+ const callFunctionOn = vi.fn().mockRejectedValue(new Error('Object reference chain is too long'));
525
+ const getProperties = vi.fn().mockResolvedValue({ result: [] });
526
+ withMockClient(cdpManager, { evaluate, getProperties, callFunctionOn });
527
+ const detailed = await cdpManager.evaluateExpressionDetailed('window', undefined, true, 2, {
528
+ captureRaw: true,
529
+ });
530
+ expect(detailed.rawCaptured).toBe(false);
531
+ });
532
+ it('does not attempt by-value capture for values that JSON-collapse to {} (Date, Map, DOM nodes)', async () => {
533
+ const cdpManager = new CDPManager();
534
+ const evaluate = vi.fn().mockResolvedValue({
535
+ result: { type: 'object', subtype: 'date', className: 'Date', description: 'Thu Jan 02 2026', objectId: 'date-1' },
536
+ });
537
+ const callFunctionOn = vi.fn();
538
+ withMockClient(cdpManager, { evaluate, callFunctionOn });
539
+ const detailed = await cdpManager.evaluateExpressionDetailed('new Date()', undefined, false, 2, {
540
+ captureRaw: true,
541
+ });
542
+ expect(callFunctionOn).not.toHaveBeenCalled();
543
+ expect(detailed.rawCaptured).toBe(false);
544
+ });
545
+ });
546
+ //# sourceMappingURL=cdp-manager.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdp-manager.test.js","sourceRoot":"","sources":["../src/cdp-manager.test.ts"],"names":[],"mappings":"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"}