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,197 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { mkdtempSync, rmSync, writeFileSync, readdirSync } from 'fs';
3
+ import { tmpdir } from 'os';
4
+ import { join } from 'path';
5
+ import { ServerClaimsStore } from './server-claims.js';
6
+ import { initializePaths } from './helpers/paths.js';
7
+ /**
8
+ * Claims are written next to servers.json, which getOutputPath() resolves from
9
+ * the working directory - so these run in a scratch cwd.
10
+ */
11
+ let workDir;
12
+ let originalCwd;
13
+ let originalGlobalDir;
14
+ beforeEach(() => {
15
+ originalCwd = process.cwd();
16
+ workDir = mkdtempSync(join(tmpdir(), 'cdp-claims-test-'));
17
+ process.chdir(workDir);
18
+ // Point the global scope at the scratch dir too - without this the
19
+ // global-scope cases write claims into the developer's real ~/.cdp-tools.
20
+ originalGlobalDir = process.env.CDP_TOOLS_DIR;
21
+ process.env.CDP_TOOLS_DIR = join(workDir, 'global');
22
+ initializePaths();
23
+ });
24
+ afterEach(() => {
25
+ process.chdir(originalCwd);
26
+ if (originalGlobalDir === undefined)
27
+ delete process.env.CDP_TOOLS_DIR;
28
+ else
29
+ process.env.CDP_TOOLS_DIR = originalGlobalDir;
30
+ initializePaths();
31
+ rmSync(workDir, { recursive: true, force: true });
32
+ });
33
+ /** A store whose liveness and start times are entirely under the test's control. */
34
+ function makeStore(supervisorPid, live) {
35
+ return new ServerClaimsStore({
36
+ supervisorPid,
37
+ isAlive: (pid) => live.has(pid),
38
+ startTimeReader: (pid) => live.get(pid) ?? '',
39
+ });
40
+ }
41
+ describe('ServerClaimsStore', () => {
42
+ it('claims a server and sees its own claim as live', async () => {
43
+ const live = new Map([[100, 'Mon Jan 1 00:00:00 2026']]);
44
+ const store = makeStore(100, live);
45
+ await store.claim('web', '/proj', false);
46
+ const claims = store.readAll(false);
47
+ expect(claims).toHaveLength(1);
48
+ expect(claims[0].claim).toMatchObject({ serverId: 'web', supervisorPid: 100 });
49
+ expect(store.isClaimLive(claims[0].claim)).toBe(true);
50
+ });
51
+ it('does not report its own claim as foreign', async () => {
52
+ const live = new Map([[100, 'start-100']]);
53
+ const store = makeStore(100, live);
54
+ await store.claim('web', '/proj', false);
55
+ expect(store.hasForeignLiveClaim('web', false)).toBe(false);
56
+ });
57
+ it('sees another live session as a foreign claim', async () => {
58
+ const live = new Map([[100, 'start-100'], [200, 'start-200']]);
59
+ await makeStore(200, live).claim('web', '/proj', false);
60
+ expect(makeStore(100, live).hasForeignLiveClaim('web', false)).toBe(true);
61
+ });
62
+ it('ignores a foreign claim whose session has died', async () => {
63
+ const live = new Map([[100, 'start-100'], [200, 'start-200']]);
64
+ await makeStore(200, live).claim('web', '/proj', false);
65
+ live.delete(200); // that session's supervisor is gone
66
+ expect(makeStore(100, live).hasForeignLiveClaim('web', false)).toBe(false);
67
+ });
68
+ it('ignores a claim whose pid was reused by a different process', async () => {
69
+ const live = new Map([[100, 'start-100'], [200, 'start-200']]);
70
+ await makeStore(200, live).claim('web', '/proj', false);
71
+ // Same pid, different process: alive, but not the one that claimed.
72
+ live.set(200, 'start-200-RECYCLED');
73
+ expect(makeStore(100, live).hasForeignLiveClaim('web', false)).toBe(false);
74
+ });
75
+ it('keeps a claim when start times cannot be read at all', async () => {
76
+ // No start time available (a platform without ps): a claim that cannot be
77
+ // disproved must count as live, since the cost of being wrong is stopping
78
+ // a running server.
79
+ const live = new Map([[200, '']]);
80
+ await makeStore(200, live).claim('web', '/proj', false);
81
+ expect(makeStore(100, new Map([[100, ''], [200, '']])).hasForeignLiveClaim('web', false)).toBe(true);
82
+ });
83
+ it('releases only its own claim', async () => {
84
+ const live = new Map([[100, 'start-100'], [200, 'start-200']]);
85
+ const mine = makeStore(100, live);
86
+ await mine.claim('web', '/proj', false);
87
+ await makeStore(200, live).claim('web', '/proj', false);
88
+ mine.release('web', false);
89
+ const remaining = mine.readAll(false);
90
+ expect(remaining).toHaveLength(1);
91
+ expect(remaining[0].claim.supervisorPid).toBe(200);
92
+ });
93
+ it('releases every claim it holds across both scopes', async () => {
94
+ const live = new Map([[100, 'start-100'], [200, 'start-200']]);
95
+ const mine = makeStore(100, live);
96
+ await mine.claim('web', '/proj', false);
97
+ await mine.claim('api', '/proj', false);
98
+ await makeStore(200, live).claim('web', '/proj', false);
99
+ mine.releaseAllOwn();
100
+ const remaining = mine.readAll(false);
101
+ expect(remaining.map((entry) => entry.claim.supervisorPid)).toEqual([200]);
102
+ });
103
+ it('collects dead claims and reports servers nobody is coming back for', async () => {
104
+ const live = new Map([[100, 'start-100'], [200, 'start-200'], [300, 'start-300']]);
105
+ await makeStore(200, live).claim('abandoned', '/proj', false);
106
+ await makeStore(300, live).claim('shared', '/proj', false);
107
+ await makeStore(100, live).claim('shared', '/proj', false);
108
+ live.delete(200); // the only claimant of 'abandoned' is gone
109
+ live.delete(300); // one of two claimants of 'shared' is gone
110
+ const store = makeStore(100, live);
111
+ const { removed, unclaimedServerIds } = store.collectDeadClaims(false);
112
+ expect(removed).toBe(2);
113
+ expect(unclaimedServerIds).toEqual(['abandoned']);
114
+ // The dead claims are gone from disk; the live one survives.
115
+ expect(store.readAll(false).map((entry) => entry.claim.supervisorPid)).toEqual([100]);
116
+ });
117
+ it('survives a corrupt claim file without throwing', async () => {
118
+ const live = new Map([[100, 'start-100']]);
119
+ const store = makeStore(100, live);
120
+ await store.claim('web', '/proj', false);
121
+ const dir = join(workDir, '.cdp-tools', 'server-claims');
122
+ writeFileSync(join(dir, 'garbage.json'), '{ not json');
123
+ expect(() => store.readAll(false)).not.toThrow();
124
+ expect(store.readAll(false)).toHaveLength(1);
125
+ expect(store.hasForeignLiveClaim('web', false)).toBe(false);
126
+ });
127
+ it('reports no claims when the directory does not exist', () => {
128
+ const store = makeStore(100, new Map([[100, 'start-100']]));
129
+ expect(store.readAll(false)).toEqual([]);
130
+ expect(store.hasForeignLiveClaim('web', false)).toBe(false);
131
+ });
132
+ it('keeps a claim for a server id containing path separators', async () => {
133
+ const live = new Map([[100, 'start-100']]);
134
+ const store = makeStore(100, live);
135
+ await store.claim('team/web', '/proj', false);
136
+ // The id must not escape the claims directory.
137
+ const dir = join(workDir, '.cdp-tools', 'server-claims');
138
+ expect(readdirSync(dir)).toHaveLength(1);
139
+ expect(store.hasForeignLiveClaim('team/web', false)).toBe(false);
140
+ expect(store.readAll(false)[0].claim.serverId).toBe('team/web');
141
+ });
142
+ it('protects a server while another live session works in its directory', async () => {
143
+ // The ordering that claims alone cannot cover: the other window was open
144
+ // first, so it never claimed the server, but it is plainly still using the
145
+ // project.
146
+ const live = new Map([[100, 'start-100'], [200, 'start-200']]);
147
+ await makeStore(200, live).registerSession('/proj');
148
+ const store = makeStore(100, live);
149
+ expect(store.hasOtherLiveSessionIn('/proj')).toBe(true);
150
+ expect(store.mayStop('web', '/proj', false)).toBe(false);
151
+ // A different project is unaffected.
152
+ expect(store.mayStop('web', '/other', false)).toBe(true);
153
+ });
154
+ it('ignores presence of a session that has died', async () => {
155
+ const live = new Map([[100, 'start-100'], [200, 'start-200']]);
156
+ await makeStore(200, live).registerSession('/proj');
157
+ live.delete(200);
158
+ expect(makeStore(100, live).mayStop('web', '/proj', false)).toBe(true);
159
+ });
160
+ it('ignores presence of a session whose pid was recycled', async () => {
161
+ const live = new Map([[100, 'start-100'], [200, 'start-200']]);
162
+ await makeStore(200, live).registerSession('/proj');
163
+ live.set(200, 'start-200-RECYCLED');
164
+ expect(makeStore(100, live).mayStop('web', '/proj', false)).toBe(true);
165
+ });
166
+ it('does not count its own presence against itself', async () => {
167
+ const live = new Map([[100, 'start-100']]);
168
+ const store = makeStore(100, live);
169
+ await store.registerSession('/proj');
170
+ expect(store.hasOtherLiveSessionIn('/proj')).toBe(false);
171
+ expect(store.mayStop('web', '/proj', false)).toBe(true);
172
+ });
173
+ it('collects presence records of dead sessions', async () => {
174
+ const live = new Map([[100, 'start-100'], [200, 'start-200'], [300, 'start-300']]);
175
+ await makeStore(200, live).registerSession('/proj');
176
+ await makeStore(300, live).registerSession('/proj');
177
+ live.delete(300);
178
+ const store = makeStore(100, live);
179
+ expect(store.collectDeadSessions()).toBe(1);
180
+ expect(store.readSessions().map((entry) => entry.presence.supervisorPid)).toEqual([200]);
181
+ });
182
+ it('withdraws its own presence on request', async () => {
183
+ const live = new Map([[100, 'start-100']]);
184
+ const store = makeStore(100, live);
185
+ await store.registerSession('/proj');
186
+ store.unregisterSession();
187
+ expect(makeStore(200, new Map([[100, 'start-100'], [200, 'start-200']])).hasOtherLiveSessionIn('/proj')).toBe(false);
188
+ });
189
+ it('keeps local and global claims apart', async () => {
190
+ const live = new Map([[100, 'start-100'], [200, 'start-200']]);
191
+ await makeStore(200, live).claim('web', '/proj', true);
192
+ const store = makeStore(100, live);
193
+ expect(store.hasForeignLiveClaim('web', false)).toBe(false);
194
+ expect(store.hasForeignLiveClaim('web', true)).toBe(true);
195
+ });
196
+ });
197
+ //# sourceMappingURL=server-claims.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-claims.test.js","sourceRoot":"","sources":["../src/server-claims.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,438 @@
1
+ /**
2
+ * Server Manager
3
+ * Manages development servers (any language/framework) - start, stop, restart, and monitor
4
+ * Supports multiple runner types: native (spawn), docker, docker-compose
5
+ * Persists state to .cdp-tools/servers.json for recovery and auto-run
6
+ * Logs to .cdp-tools/logs/<server-id>/ for cross-MCP access (native runner only)
7
+ */
8
+ import * as net from 'net';
9
+ import { type ServerClaimsStore } from './server-claims.js';
10
+ import { type RunnerType } from './runners/index.js';
11
+ /**
12
+ * Returns the matched auto-restart pattern name if `command` looks like it
13
+ * self-restarts on file changes, or null otherwise.
14
+ */
15
+ export declare function detectAutoRestartCommand(command: string): string | null;
16
+ /**
17
+ * Extract the Node inspector port from a `--inspect`/`--inspect-brk` flag in
18
+ * a command string, if present. Falls back to Node's default port (9229)
19
+ * when the flag is given with no explicit port. Does not handle a separate
20
+ * `--inspect-port=` flag overriding a bare `--inspect`'s port - a rare
21
+ * combination not worth the extra complexity here.
22
+ */
23
+ export declare function extractInspectorPort(command: string): number | null;
24
+ export interface ServerStatus {
25
+ id: string;
26
+ command: string;
27
+ cwd: string;
28
+ pid: number;
29
+ containerId?: string;
30
+ startedAt: Date;
31
+ uptime: string;
32
+ port?: number;
33
+ running: boolean;
34
+ autoRun: boolean;
35
+ runnerType: RunnerType;
36
+ global: boolean;
37
+ watch: boolean;
38
+ }
39
+ export interface StartServerOptions {
40
+ command: string;
41
+ cwd: string;
42
+ id: string;
43
+ autoRun?: boolean;
44
+ env?: Record<string, string>;
45
+ port?: number;
46
+ /** Runner type - auto-detected from command if not specified */
47
+ runner?: RunnerType;
48
+ /** If true, auto-add detected port to monitoredPorts with default level 'block' */
49
+ monitorPort?: boolean;
50
+ /** If true, store server state in global ~/.cdp-tools/ instead of project directory */
51
+ global?: boolean;
52
+ /** If true, watch this server's files and auto-restart it (pause-aware) on change instead of relying on --watch/nodemon */
53
+ watch?: boolean;
54
+ /** Paths to watch when `watch` is true (default: [cwd]) */
55
+ watchPaths?: string[];
56
+ }
57
+ export interface LogStats {
58
+ serverId: string;
59
+ newStdout: number;
60
+ newStderr: number;
61
+ }
62
+ /** A watch-triggered restart that's queued behind a paused breakpoint debugger. */
63
+ export interface PendingRestartInfo {
64
+ serverId: string;
65
+ queuedAt: Date;
66
+ }
67
+ export type MonitoringLevel = 'inform' | 'error' | 'block';
68
+ export interface PersistedMonitoredPort {
69
+ port: number;
70
+ level: MonitoringLevel;
71
+ description?: string;
72
+ interval?: number;
73
+ }
74
+ export interface MonitoredPort {
75
+ port: number;
76
+ level: MonitoringLevel;
77
+ description?: string;
78
+ interval?: number;
79
+ status: 'up' | 'down' | 'connecting';
80
+ socket: net.Socket | null;
81
+ failedAt?: Date;
82
+ acknowledged: boolean;
83
+ reconnectTimer?: ReturnType<typeof setTimeout>;
84
+ }
85
+ export interface MonitoredPortStatus {
86
+ port: number;
87
+ level: MonitoringLevel;
88
+ description?: string;
89
+ interval?: number;
90
+ status: 'up' | 'down' | 'connecting';
91
+ failedAt?: Date;
92
+ acknowledged: boolean;
93
+ }
94
+ export interface PortFailureInfo {
95
+ port: number;
96
+ level: MonitoringLevel;
97
+ description?: string;
98
+ failedAt: Date;
99
+ }
100
+ /** Function type for getting interval for a monitoring level */
101
+ export type GetIntervalForLevel = (level: MonitoringLevel) => number;
102
+ export type PendingStartupReason = 'timeout' | 'died';
103
+ export interface PendingStartup {
104
+ serverId: string;
105
+ startedAt: Date;
106
+ timeoutAt: Date;
107
+ acknowledged: boolean;
108
+ reason?: PendingStartupReason;
109
+ }
110
+ export interface PersistedPendingStartup {
111
+ serverId: string;
112
+ startedAt: string;
113
+ timeoutAt: string;
114
+ acknowledged: boolean;
115
+ reason?: PendingStartupReason;
116
+ }
117
+ export interface PendingStartupFailureInfo {
118
+ serverId: string;
119
+ startedAt: Date;
120
+ reason: PendingStartupReason;
121
+ }
122
+ /**
123
+ * Port Monitor - monitors ports using persistent TCP connections
124
+ */
125
+ export declare class PortMonitor {
126
+ private ports;
127
+ private onFailureCallback?;
128
+ private getIntervalForLevel;
129
+ private pauseCount;
130
+ constructor(getIntervalForLevel?: GetIntervalForLevel);
131
+ onFailure(callback: (port: number, level: MonitoringLevel) => void): void;
132
+ startMonitoring(port: number, level: MonitoringLevel, description?: string, interval?: number): Promise<void>;
133
+ private connectToPort;
134
+ private scheduleReconnect;
135
+ stopMonitoring(port: number): Promise<boolean>;
136
+ acknowledgeFailure(port: number): Promise<boolean>;
137
+ getFailedPorts(): PortFailureInfo[];
138
+ getFailedPortsByLevel(level: MonitoringLevel): PortFailureInfo[];
139
+ hasBlockingFailures(): boolean;
140
+ isMonitoring(port: number): boolean;
141
+ getStatus(port?: number): MonitoredPortStatus[];
142
+ getPersistedState(): PersistedMonitoredPort[];
143
+ restoreFromState(ports: PersistedMonitoredPort[]): Promise<void>;
144
+ stopAll(): Promise<void>;
145
+ /**
146
+ * Pause all port monitoring (e.g., when paused at a breakpoint)
147
+ * Stops reconnection attempts but preserves port state
148
+ */
149
+ pauseMonitoring(): void;
150
+ /**
151
+ * Resume all port monitoring (e.g., when resuming from a breakpoint)
152
+ * Restarts connection attempts for all monitored ports, once every
153
+ * outstanding pauseMonitoring() call has a matching resumeMonitoring().
154
+ */
155
+ resumeMonitoring(): void;
156
+ }
157
+ export declare class ServerManager {
158
+ private servers;
159
+ private portMonitor;
160
+ private pendingStartups;
161
+ /** Mutex to serialize saveState calls - prevents concurrent file writes */
162
+ private saveMutex;
163
+ /** Injected from index.ts - decouples ServerManager from ConnectionManager directly */
164
+ private pauseChecker;
165
+ /** Watch-mode restart coordination, keyed by serverId - see WatchRestartState */
166
+ private watchState;
167
+ /** Ownership claims - who may stop a shared dev server (see server-claims.ts) */
168
+ private readonly claims;
169
+ constructor(claimsStore?: ServerClaimsStore);
170
+ /**
171
+ * Set the function used to check whether a CDP connection at a given
172
+ * inspector port is currently paused at a breakpoint. Mirrors the existing
173
+ * setChromeLauncher() injection pattern.
174
+ */
175
+ setPauseChecker(fn: (inspectorPort: number) => boolean): void;
176
+ /**
177
+ * Get the port monitor instance (lazy-initialized)
178
+ * Must be called after configManager.load() for config values to be used
179
+ */
180
+ getPortMonitor(): PortMonitor;
181
+ private getServersFilePath;
182
+ /**
183
+ * Initialize - load state and recover/start auto-run servers
184
+ * Loads from both local (project) and global (~/.cdp-tools/) storage
185
+ */
186
+ initialize(): Promise<{
187
+ recovered: string[];
188
+ started: string[];
189
+ failed: string[];
190
+ monitoredPorts: number[];
191
+ collected: string[];
192
+ }>;
193
+ /**
194
+ * Resume port detection for a server after MCP restart
195
+ * @param serverId The server to resume detection for
196
+ * @param remainingMs Time remaining until timeout
197
+ */
198
+ private resumePortDetection;
199
+ private loadState;
200
+ /**
201
+ * Save state to disk - serialized through mutex to prevent concurrent writes
202
+ */
203
+ saveState(): Promise<void>;
204
+ /**
205
+ * Internal save implementation - uses atomic writes to prevent corruption
206
+ */
207
+ private doSaveState;
208
+ private getRunnerCommand;
209
+ private getRunnerCwd;
210
+ /**
211
+ * Find the managed server whose command's --inspect/--inspect-brk port
212
+ * matches `port` - i.e. the server a CDP debugger connection at that port
213
+ * actually belongs to. This is deliberately NOT the server's own detected
214
+ * app/service port (e.g. an HTTP port parsed from "listening on port
215
+ * 3000") - a Node process's inspector port and its own app port are
216
+ * normally different numbers, so matching on the app port would almost
217
+ * never find anything real.
218
+ */
219
+ getManagedServerByInspectorPort(port: number): Promise<{
220
+ id: string;
221
+ command: string;
222
+ } | null>;
223
+ /** Sync core of getManagedServerByInspectorPort() - reused by watch-restart lookups, which run in a sync pre-execution hot path (checkBreakpointPause) and can't await. */
224
+ private findManagedServerByInspectorPortSync;
225
+ private isPortInUse;
226
+ /**
227
+ * Find PIDs of processes listening on a port using lsof
228
+ */
229
+ private findProcessesOnPort;
230
+ /**
231
+ * Get the working directory of a process by PID
232
+ */
233
+ private getProcessCwd;
234
+ /**
235
+ * Kill orphan processes holding a port, but only if they're in the expected directory
236
+ * Returns: { killed: PIDs killed, foreign: PIDs that are from a different directory }
237
+ */
238
+ private killOrphanProcessesOnPort;
239
+ private waitForPortRelease;
240
+ /**
241
+ * Start a server
242
+ */
243
+ startServer(options: StartServerOptions): Promise<{
244
+ id: string;
245
+ pid: number;
246
+ runnerType: RunnerType;
247
+ containerId?: string;
248
+ autoRestartWarning?: string;
249
+ }>;
250
+ /**
251
+ * Background port detection with timeout management
252
+ * @param serverId The server to detect port for
253
+ * @param timeoutMs How long to wait before triggering blocking (default 30s)
254
+ */
255
+ private detectPortInBackgroundWithTimeout;
256
+ /**
257
+ * @deprecated Use detectPortInBackgroundWithTimeout instead
258
+ */
259
+ private detectPortInBackground;
260
+ /**
261
+ * Get pending startup failures that should trigger blocking
262
+ * Returns only startups that have timed out or died and are not acknowledged
263
+ */
264
+ getPendingStartupFailures(): PendingStartupFailureInfo[];
265
+ /**
266
+ * Check if a server has a pending startup (regardless of state)
267
+ */
268
+ hasPendingStartup(serverId: string): boolean;
269
+ /**
270
+ * Get pending startup status for a server
271
+ */
272
+ getPendingStartup(serverId: string): PendingStartup | undefined;
273
+ /**
274
+ * Acknowledge a pending startup failure
275
+ * Clears the blocking state and starts background health monitoring
276
+ */
277
+ acknowledgeStartup(serverId: string): Promise<boolean>;
278
+ /**
279
+ * Monitor server health after acknowledgment
280
+ * Checks every 5 seconds for:
281
+ * - Port detection (sets up port monitoring when found)
282
+ * - Server death (re-triggers blocking)
283
+ * Runs until port is found, server dies, or server is removed
284
+ */
285
+ private monitorServerHealth;
286
+ /**
287
+ * Extend the startup timeout by another 30 seconds
288
+ * Resets the acknowledged flag and reason, resumes detection
289
+ */
290
+ extendStartupTimeout(serverId: string): Promise<boolean>;
291
+ /**
292
+ * Remove pending startup entry (called when server is stopped or removed)
293
+ */
294
+ private removePendingStartup;
295
+ /**
296
+ * Stop a server
297
+ */
298
+ stopServer(serverId: string): Promise<void>;
299
+ /**
300
+ * Restart a server
301
+ * Reloads config from persisted state to pick up any manual edits (e.g., port changes)
302
+ */
303
+ restartServer(serverId: string): Promise<{
304
+ id: string;
305
+ pid: number;
306
+ runnerType: RunnerType;
307
+ containerId?: string;
308
+ }>;
309
+ private getOrCreateWatchState;
310
+ private startWatcher;
311
+ private stopWatcher;
312
+ /**
313
+ * Single entry point for every watch-triggered restart (file-change,
314
+ * resume-triggered auto-fire, and its own re-entrant re-check once an
315
+ * in-flight restart finishes). Always re-checks pause state fresh rather
316
+ * than trusting a cached value - see issue #88.
317
+ */
318
+ requestWatchRestart(serverId: string): Promise<void>;
319
+ /**
320
+ * Explicit, forced restart (bypasses the pause-check entirely - the caller
321
+ * has already decided to end any paused debug session). Shares the same
322
+ * in-flight guard as requestWatchRestart(): if a watch-triggered restart is
323
+ * already running, piggybacks on its result instead of racing it.
324
+ */
325
+ forceRestart(serverId: string): Promise<{
326
+ id: string;
327
+ pid: number;
328
+ runnerType: RunnerType;
329
+ containerId?: string;
330
+ }>;
331
+ /** Shared restart guard used by both requestWatchRestart() and forceRestart(). */
332
+ private performGuardedRestart;
333
+ /** For checkBreakpointPause's lookup (via a paused connection's inspector port). */
334
+ getPendingRestartByInspectorPort(port: number): PendingRestartInfo | null;
335
+ /** Discard a queued watch-restart without performing it - keep debugging. */
336
+ cancelPendingRestart(serverId: string): boolean;
337
+ /**
338
+ * Re-check a port's pause state and let its queued watch-restart (if any)
339
+ * fire now that the debugger has resumed. Call this after any resume that
340
+ * un-pauses a connection - requestWatchRestart() only re-fires on the next
341
+ * file change otherwise, so without this hook a restart deferred by a
342
+ * pause would sit queued forever if no further edits happen.
343
+ */
344
+ retryPendingRestartByInspectorPort(port: number): void;
345
+ /**
346
+ * Set autoRun flag
347
+ */
348
+ setAutoRun(serverId: string, autoRun: boolean): Promise<void>;
349
+ /**
350
+ * Get status of servers
351
+ */
352
+ getStatus(serverId?: string): Promise<ServerStatus[]>;
353
+ /**
354
+ * Get log stats (for native runner only)
355
+ */
356
+ getLogStats(): LogStats[];
357
+ /**
358
+ * Get logs from a server
359
+ */
360
+ getLogs(serverId: string, options?: {
361
+ type?: 'stdout' | 'stderr' | 'all';
362
+ lines?: number;
363
+ delta?: boolean;
364
+ }): Promise<string[]>;
365
+ /**
366
+ * Clear logs (native runner only)
367
+ */
368
+ clearLogs(serverId: string): Promise<{
369
+ logDir: string;
370
+ stdoutPath: string;
371
+ stderrPath: string;
372
+ }>;
373
+ /**
374
+ * Get log access info (file paths for native, commands for docker)
375
+ */
376
+ getLogAccess(serverId: string): {
377
+ type: 'file';
378
+ logDir: string;
379
+ stdoutPath: string;
380
+ stderrPath: string;
381
+ } | {
382
+ type: 'command';
383
+ command: string;
384
+ } | null;
385
+ /**
386
+ * Stop every server this session owns outright - one no live session other
387
+ * than this one claims. Used when the session is going away for good (an
388
+ * idle suspend, or a client that closed), which is the only time it is safe
389
+ * to take a dev server down.
390
+ *
391
+ * A server another window is still using is left alone, and so is one whose
392
+ * ownership cannot be established: over-stopping destroys running work,
393
+ * under-stopping leaves a process for the next `initialize()` to collect.
394
+ */
395
+ stopOwnedServers(): Promise<{
396
+ stopped: string[];
397
+ keptForOthers: string[];
398
+ }>;
399
+ /**
400
+ * Server ids whose every claim was dead, per storage scope, with those dead
401
+ * claims deleted as a side effect.
402
+ *
403
+ * Must be read BEFORE this session claims anything during recovery -
404
+ * otherwise our own fresh claim makes an orphan look owned, and nothing is
405
+ * ever collected.
406
+ *
407
+ * A server with no claim file at all is absent from this: it predates
408
+ * claims, or was started outside cdp-tools, and neither is ours to kill.
409
+ */
410
+ private findAbandonedServerIds;
411
+ /**
412
+ * Stop all servers
413
+ */
414
+ stopAll(): Promise<string[]>;
415
+ /**
416
+ * Remove a server from config
417
+ */
418
+ removeServer(serverId: string): Promise<void>;
419
+ /**
420
+ * Get running server IDs
421
+ */
422
+ getRunningServerIds(): Promise<string[]>;
423
+ /**
424
+ * Cleanup - refresh status of all servers (no longer removes stopped servers)
425
+ * Stopped servers remain in config and can be manually restarted
426
+ */
427
+ cleanup(): Promise<number>;
428
+ /**
429
+ * Add running servers that appeared in persisted state since this session
430
+ * loaded, claiming each one: seeing a server is enough to depend on it.
431
+ */
432
+ private adoptNewlyPersistedServers;
433
+ /**
434
+ * Reload a server's config from persisted state (for picking up manual edits)
435
+ */
436
+ private reloadServerConfig;
437
+ }
438
+ //# sourceMappingURL=server-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-manager.d.ts","sourceRoot":"","sources":["../src/server-manager.ts"],"names":[],"mappings":"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"}