browser-debugger-cli 0.6.2 → 0.6.5

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 (328) hide show
  1. package/README.md +9 -3
  2. package/dist/cdp/protocol.d.ts.map +1 -1
  3. package/dist/cdp/protocol.js +0 -6
  4. package/dist/cdp/protocol.js.map +1 -1
  5. package/dist/cdp/schema.d.ts.map +1 -1
  6. package/dist/cdp/schema.js +0 -2
  7. package/dist/cdp/schema.js.map +1 -1
  8. package/dist/commands/__tests__/machineReadableHelp.contract.test.d.ts +12 -0
  9. package/dist/commands/__tests__/machineReadableHelp.contract.test.d.ts.map +1 -0
  10. package/dist/commands/__tests__/machineReadableHelp.contract.test.js +102 -0
  11. package/dist/commands/__tests__/machineReadableHelp.contract.test.js.map +1 -0
  12. package/dist/commands/cdp.d.ts.map +1 -1
  13. package/dist/commands/cdp.js +9 -24
  14. package/dist/commands/cdp.js.map +1 -1
  15. package/dist/commands/cleanup.d.ts.map +1 -1
  16. package/dist/commands/cleanup.js +0 -13
  17. package/dist/commands/cleanup.js.map +1 -1
  18. package/dist/commands/console.d.ts.map +1 -1
  19. package/dist/commands/console.js +22 -7
  20. package/dist/commands/console.js.map +1 -1
  21. package/dist/commands/details.d.ts.map +1 -1
  22. package/dist/commands/details.js +0 -5
  23. package/dist/commands/details.js.map +1 -1
  24. package/dist/commands/dom/a11y.d.ts.map +1 -1
  25. package/dist/commands/dom/a11y.js +51 -15
  26. package/dist/commands/dom/a11y.js.map +1 -1
  27. package/dist/commands/dom/evalHelpers.d.ts +1 -1
  28. package/dist/commands/dom/evalHelpers.d.ts.map +1 -1
  29. package/dist/commands/dom/evalHelpers.js +3 -7
  30. package/dist/commands/dom/evalHelpers.js.map +1 -1
  31. package/dist/commands/dom/formFillHelpers.d.ts.map +1 -1
  32. package/dist/commands/dom/formFillHelpers.js +30 -11
  33. package/dist/commands/dom/formFillHelpers.js.map +1 -1
  34. package/dist/commands/dom/formInteraction.d.ts.map +1 -1
  35. package/dist/commands/dom/formInteraction.js +0 -5
  36. package/dist/commands/dom/formInteraction.js.map +1 -1
  37. package/dist/commands/dom/formSubmitHelpers.d.ts.map +1 -1
  38. package/dist/commands/dom/formSubmitHelpers.js +0 -13
  39. package/dist/commands/dom/formSubmitHelpers.js.map +1 -1
  40. package/dist/commands/dom/helpers.d.ts.map +1 -1
  41. package/dist/commands/dom/helpers.js +0 -22
  42. package/dist/commands/dom/helpers.js.map +1 -1
  43. package/dist/commands/dom/index.d.ts.map +1 -1
  44. package/dist/commands/dom/index.js +85 -19
  45. package/dist/commands/dom/index.js.map +1 -1
  46. package/dist/commands/dom/reactEventHelpers.d.ts +3 -3
  47. package/dist/commands/dom/reactEventHelpers.d.ts.map +1 -1
  48. package/dist/commands/dom/reactEventHelpers.js +3 -31
  49. package/dist/commands/dom/reactEventHelpers.js.map +1 -1
  50. package/dist/commands/machineReadableHelp.d.ts +48 -0
  51. package/dist/commands/machineReadableHelp.d.ts.map +1 -1
  52. package/dist/commands/machineReadableHelp.js +80 -0
  53. package/dist/commands/machineReadableHelp.js.map +1 -1
  54. package/dist/commands/network.d.ts.map +1 -1
  55. package/dist/commands/network.js +185 -10
  56. package/dist/commands/network.js.map +1 -1
  57. package/dist/commands/peek.d.ts.map +1 -1
  58. package/dist/commands/peek.js +17 -14
  59. package/dist/commands/peek.js.map +1 -1
  60. package/dist/commands/shared/CommandRunner.d.ts +2 -0
  61. package/dist/commands/shared/CommandRunner.d.ts.map +1 -1
  62. package/dist/commands/shared/CommandRunner.js +3 -8
  63. package/dist/commands/shared/CommandRunner.js.map +1 -1
  64. package/dist/commands/shared/__tests__/validation.unit.test.d.ts +7 -0
  65. package/dist/commands/shared/__tests__/validation.unit.test.d.ts.map +1 -0
  66. package/dist/commands/shared/__tests__/validation.unit.test.js +141 -0
  67. package/dist/commands/shared/__tests__/validation.unit.test.js.map +1 -0
  68. package/dist/commands/shared/startHelpers.d.ts.map +1 -1
  69. package/dist/commands/shared/startHelpers.js +0 -10
  70. package/dist/commands/shared/startHelpers.js.map +1 -1
  71. package/dist/commands/shared/validation.d.ts +19 -0
  72. package/dist/commands/shared/validation.d.ts.map +1 -1
  73. package/dist/commands/shared/validation.js +110 -7
  74. package/dist/commands/shared/validation.js.map +1 -1
  75. package/dist/commands/start.d.ts.map +1 -1
  76. package/dist/commands/start.js +0 -6
  77. package/dist/commands/start.js.map +1 -1
  78. package/dist/commands/status.d.ts.map +1 -1
  79. package/dist/commands/status.js +0 -2
  80. package/dist/commands/status.js.map +1 -1
  81. package/dist/commands/stop.d.ts.map +1 -1
  82. package/dist/commands/stop.js +2 -11
  83. package/dist/commands/stop.js.map +1 -1
  84. package/dist/commands/tail.js +6 -7
  85. package/dist/commands/tail.js.map +1 -1
  86. package/dist/commands.d.ts.map +1 -1
  87. package/dist/commands.js +0 -5
  88. package/dist/commands.js.map +1 -1
  89. package/dist/connection/cdp.d.ts.map +1 -1
  90. package/dist/connection/cdp.js +9 -12
  91. package/dist/connection/cdp.js.map +1 -1
  92. package/dist/connection/diagnostics.d.ts.map +1 -1
  93. package/dist/connection/diagnostics.js +7 -4
  94. package/dist/connection/diagnostics.js.map +1 -1
  95. package/dist/connection/pageReadiness.d.ts.map +1 -1
  96. package/dist/connection/pageReadiness.js +0 -1
  97. package/dist/connection/pageReadiness.js.map +1 -1
  98. package/dist/constants.d.ts.map +1 -1
  99. package/dist/constants.js +3 -1
  100. package/dist/constants.js.map +1 -1
  101. package/dist/daemon/__tests__/commandRegistry.contract.test.js +259 -0
  102. package/dist/daemon/__tests__/commandRegistry.contract.test.js.map +1 -1
  103. package/dist/daemon/handlers/BaseHandler.d.ts +75 -0
  104. package/dist/daemon/handlers/BaseHandler.d.ts.map +1 -0
  105. package/dist/daemon/handlers/BaseHandler.js +103 -0
  106. package/dist/daemon/handlers/BaseHandler.js.map +1 -0
  107. package/dist/daemon/handlers/CommandHandlers.d.ts +3 -4
  108. package/dist/daemon/handlers/CommandHandlers.d.ts.map +1 -1
  109. package/dist/daemon/handlers/CommandHandlers.js +14 -52
  110. package/dist/daemon/handlers/CommandHandlers.js.map +1 -1
  111. package/dist/daemon/handlers/QueryHandlers.d.ts +8 -6
  112. package/dist/daemon/handlers/QueryHandlers.d.ts.map +1 -1
  113. package/dist/daemon/handlers/QueryHandlers.js +42 -94
  114. package/dist/daemon/handlers/QueryHandlers.js.map +1 -1
  115. package/dist/daemon/handlers/SessionHandlers.d.ts.map +1 -1
  116. package/dist/daemon/handlers/SessionHandlers.js +0 -15
  117. package/dist/daemon/handlers/SessionHandlers.js.map +1 -1
  118. package/dist/daemon/handlers/requestHandlers.d.ts +5 -1
  119. package/dist/daemon/handlers/requestHandlers.d.ts.map +1 -1
  120. package/dist/daemon/handlers/requestHandlers.js +7 -2
  121. package/dist/daemon/handlers/requestHandlers.js.map +1 -1
  122. package/dist/daemon/handlers/responseHandler.d.ts.map +1 -1
  123. package/dist/daemon/handlers/responseHandler.js +19 -8
  124. package/dist/daemon/handlers/responseHandler.js.map +1 -1
  125. package/dist/daemon/ipcServer.d.ts.map +1 -1
  126. package/dist/daemon/ipcServer.js +4 -11
  127. package/dist/daemon/ipcServer.js.map +1 -1
  128. package/dist/daemon/launcher.d.ts.map +1 -1
  129. package/dist/daemon/launcher.js +0 -18
  130. package/dist/daemon/launcher.js.map +1 -1
  131. package/dist/daemon/lifecycle/cdpSetup.d.ts.map +1 -1
  132. package/dist/daemon/lifecycle/cdpSetup.js +0 -4
  133. package/dist/daemon/lifecycle/cdpSetup.js.map +1 -1
  134. package/dist/daemon/lifecycle/chromeConnection.js +0 -1
  135. package/dist/daemon/lifecycle/chromeConnection.js.map +1 -1
  136. package/dist/daemon/lifecycle/signalHandlers.d.ts.map +1 -1
  137. package/dist/daemon/lifecycle/signalHandlers.js +0 -3
  138. package/dist/daemon/lifecycle/signalHandlers.js.map +1 -1
  139. package/dist/daemon/lifecycle/workerCleanup.d.ts.map +1 -1
  140. package/dist/daemon/lifecycle/workerCleanup.js +0 -7
  141. package/dist/daemon/lifecycle/workerCleanup.js.map +1 -1
  142. package/dist/daemon/lifecycle/workerIpc.d.ts.map +1 -1
  143. package/dist/daemon/lifecycle/workerIpc.js +0 -1
  144. package/dist/daemon/lifecycle/workerIpc.js.map +1 -1
  145. package/dist/daemon/patternDefinitions.d.ts +47 -0
  146. package/dist/daemon/patternDefinitions.d.ts.map +1 -0
  147. package/dist/daemon/patternDefinitions.js +71 -0
  148. package/dist/daemon/patternDefinitions.js.map +1 -0
  149. package/dist/daemon/patternDetector.d.ts +60 -0
  150. package/dist/daemon/patternDetector.d.ts.map +1 -0
  151. package/dist/daemon/patternDetector.js +74 -0
  152. package/dist/daemon/patternDetector.js.map +1 -0
  153. package/dist/daemon/server/JsonlParser.d.ts.map +1 -1
  154. package/dist/daemon/server/JsonlParser.js +0 -2
  155. package/dist/daemon/server/JsonlParser.js.map +1 -1
  156. package/dist/daemon/startSession.d.ts.map +1 -1
  157. package/dist/daemon/startSession.js +0 -15
  158. package/dist/daemon/startSession.js.map +1 -1
  159. package/dist/daemon/worker/__tests__/PatternDetector.unit.test.d.ts +11 -0
  160. package/dist/daemon/worker/__tests__/PatternDetector.unit.test.d.ts.map +1 -0
  161. package/dist/daemon/worker/__tests__/PatternDetector.unit.test.js +136 -0
  162. package/dist/daemon/worker/__tests__/PatternDetector.unit.test.js.map +1 -0
  163. package/dist/daemon/worker/commandRegistry.d.ts.map +1 -1
  164. package/dist/daemon/worker/commandRegistry.js +46 -2
  165. package/dist/daemon/worker/commandRegistry.js.map +1 -1
  166. package/dist/daemon/worker/plugins.d.ts.map +1 -1
  167. package/dist/daemon/worker/plugins.js +0 -3
  168. package/dist/daemon/worker/plugins.js.map +1 -1
  169. package/dist/daemon/worker.js +0 -9
  170. package/dist/daemon/worker.js.map +1 -1
  171. package/dist/daemon.js +0 -2
  172. package/dist/daemon.js.map +1 -1
  173. package/dist/index.js +0 -14
  174. package/dist/index.js.map +1 -1
  175. package/dist/ipc/client.d.ts +47 -1
  176. package/dist/ipc/client.d.ts.map +1 -1
  177. package/dist/ipc/client.js +51 -0
  178. package/dist/ipc/client.js.map +1 -1
  179. package/dist/ipc/index.d.ts.map +1 -1
  180. package/dist/ipc/index.js +0 -6
  181. package/dist/ipc/index.js.map +1 -1
  182. package/dist/ipc/protocol/commands.d.ts +46 -0
  183. package/dist/ipc/protocol/commands.d.ts.map +1 -1
  184. package/dist/ipc/protocol/commands.js +8 -0
  185. package/dist/ipc/protocol/commands.js.map +1 -1
  186. package/dist/ipc/session/queries.d.ts +26 -2
  187. package/dist/ipc/session/queries.d.ts.map +1 -1
  188. package/dist/ipc/transport/index.d.ts.map +1 -1
  189. package/dist/ipc/transport/index.js +0 -1
  190. package/dist/ipc/transport/index.js.map +1 -1
  191. package/dist/ipc/transport/jsonl.d.ts.map +1 -1
  192. package/dist/ipc/transport/jsonl.js +0 -1
  193. package/dist/ipc/transport/jsonl.js.map +1 -1
  194. package/dist/session/cleanup.d.ts.map +1 -1
  195. package/dist/session/cleanup.js +2 -20
  196. package/dist/session/cleanup.js.map +1 -1
  197. package/dist/session/queryCache.d.ts +35 -0
  198. package/dist/session/queryCache.d.ts.map +1 -0
  199. package/dist/session/queryCache.js +83 -0
  200. package/dist/session/queryCache.js.map +1 -0
  201. package/dist/telemetry/__tests__/filters.unit.test.js +119 -1
  202. package/dist/telemetry/__tests__/filters.unit.test.js.map +1 -1
  203. package/dist/telemetry/__tests__/network.contract.test.js +114 -0
  204. package/dist/telemetry/__tests__/network.contract.test.js.map +1 -1
  205. package/dist/telemetry/a11y.d.ts +8 -5
  206. package/dist/telemetry/a11y.d.ts.map +1 -1
  207. package/dist/telemetry/a11y.js +34 -19
  208. package/dist/telemetry/a11y.js.map +1 -1
  209. package/dist/telemetry/dom.js +4 -4
  210. package/dist/telemetry/dom.js.map +1 -1
  211. package/dist/telemetry/filters.d.ts +17 -0
  212. package/dist/telemetry/filters.d.ts.map +1 -1
  213. package/dist/telemetry/filters.js +25 -0
  214. package/dist/telemetry/filters.js.map +1 -1
  215. package/dist/telemetry/har/__tests__/builder.unit.test.d.ts +8 -0
  216. package/dist/telemetry/har/__tests__/builder.unit.test.d.ts.map +1 -0
  217. package/dist/telemetry/har/__tests__/builder.unit.test.js +694 -0
  218. package/dist/telemetry/har/__tests__/builder.unit.test.js.map +1 -0
  219. package/dist/telemetry/har/builder.d.ts +43 -0
  220. package/dist/telemetry/har/builder.d.ts.map +1 -0
  221. package/dist/telemetry/har/builder.js +440 -0
  222. package/dist/telemetry/har/builder.js.map +1 -0
  223. package/dist/telemetry/har/types.d.ts +290 -0
  224. package/dist/telemetry/har/types.d.ts.map +1 -0
  225. package/dist/telemetry/har/types.js +7 -0
  226. package/dist/telemetry/har/types.js.map +1 -0
  227. package/dist/telemetry/network.d.ts.map +1 -1
  228. package/dist/telemetry/network.js +37 -4
  229. package/dist/telemetry/network.js.map +1 -1
  230. package/dist/types.d.ts +31 -0
  231. package/dist/types.d.ts.map +1 -1
  232. package/dist/ui/OutputBuilder.d.ts.map +1 -1
  233. package/dist/ui/OutputBuilder.js +0 -8
  234. package/dist/ui/OutputBuilder.js.map +1 -1
  235. package/dist/ui/errors/CommandError.d.ts +5 -1
  236. package/dist/ui/errors/CommandError.d.ts.map +1 -1
  237. package/dist/ui/errors/CommandError.js +0 -1
  238. package/dist/ui/errors/CommandError.js.map +1 -1
  239. package/dist/ui/errors/index.d.ts.map +1 -1
  240. package/dist/ui/errors/index.js +0 -2
  241. package/dist/ui/errors/index.js.map +1 -1
  242. package/dist/ui/formatters/__tests__/preview.unit.test.d.ts +13 -0
  243. package/dist/ui/formatters/__tests__/preview.unit.test.d.ts.map +1 -0
  244. package/dist/ui/formatters/__tests__/preview.unit.test.js +180 -0
  245. package/dist/ui/formatters/__tests__/preview.unit.test.js.map +1 -0
  246. package/dist/ui/formatters/details.d.ts.map +1 -1
  247. package/dist/ui/formatters/details.js +1 -0
  248. package/dist/ui/formatters/details.js.map +1 -1
  249. package/dist/ui/formatters/dom.d.ts.map +1 -1
  250. package/dist/ui/formatters/dom.js +5 -5
  251. package/dist/ui/formatters/dom.js.map +1 -1
  252. package/dist/ui/formatters/helpFormatters.d.ts +41 -0
  253. package/dist/ui/formatters/helpFormatters.d.ts.map +1 -0
  254. package/dist/ui/formatters/helpFormatters.js +80 -0
  255. package/dist/ui/formatters/helpFormatters.js.map +1 -0
  256. package/dist/ui/formatters/index.d.ts +1 -0
  257. package/dist/ui/formatters/index.d.ts.map +1 -1
  258. package/dist/ui/formatters/index.js +1 -0
  259. package/dist/ui/formatters/index.js.map +1 -1
  260. package/dist/ui/formatters/networkHeaders.d.ts +14 -0
  261. package/dist/ui/formatters/networkHeaders.d.ts.map +1 -0
  262. package/dist/ui/formatters/networkHeaders.js +47 -0
  263. package/dist/ui/formatters/networkHeaders.js.map +1 -0
  264. package/dist/ui/formatters/preview.d.ts.map +1 -1
  265. package/dist/ui/formatters/preview.js +102 -33
  266. package/dist/ui/formatters/preview.js.map +1 -1
  267. package/dist/ui/formatters/sessionFormatters.d.ts +58 -0
  268. package/dist/ui/formatters/sessionFormatters.d.ts.map +1 -0
  269. package/dist/ui/formatters/sessionFormatters.js +116 -0
  270. package/dist/ui/formatters/sessionFormatters.js.map +1 -0
  271. package/dist/ui/formatters/status.d.ts.map +1 -1
  272. package/dist/ui/formatters/status.js +0 -11
  273. package/dist/ui/formatters/status.js.map +1 -1
  274. package/dist/ui/formatting.d.ts.map +1 -1
  275. package/dist/ui/formatting.js +0 -6
  276. package/dist/ui/formatting.js.map +1 -1
  277. package/dist/ui/logging/logger.d.ts +1 -1
  278. package/dist/ui/logging/logger.d.ts.map +1 -1
  279. package/dist/ui/logging/logger.js.map +1 -1
  280. package/dist/ui/messages/chrome.d.ts.map +1 -1
  281. package/dist/ui/messages/chrome.js +0 -6
  282. package/dist/ui/messages/chrome.js.map +1 -1
  283. package/dist/ui/messages/commands.d.ts +9 -0
  284. package/dist/ui/messages/commands.d.ts.map +1 -1
  285. package/dist/ui/messages/commands.js +11 -13
  286. package/dist/ui/messages/commands.js.map +1 -1
  287. package/dist/ui/messages/debug.d.ts.map +1 -1
  288. package/dist/ui/messages/debug.js +0 -6
  289. package/dist/ui/messages/debug.js.map +1 -1
  290. package/dist/ui/messages/errors.d.ts +53 -0
  291. package/dist/ui/messages/errors.d.ts.map +1 -1
  292. package/dist/ui/messages/errors.js +59 -0
  293. package/dist/ui/messages/errors.js.map +1 -1
  294. package/dist/ui/messages/hints.d.ts +33 -0
  295. package/dist/ui/messages/hints.d.ts.map +1 -0
  296. package/dist/ui/messages/hints.js +37 -0
  297. package/dist/ui/messages/hints.js.map +1 -0
  298. package/dist/ui/messages/internal.d.ts.map +1 -1
  299. package/dist/ui/messages/internal.js +0 -3
  300. package/dist/ui/messages/internal.js.map +1 -1
  301. package/dist/ui/messages/preview.d.ts.map +1 -1
  302. package/dist/ui/messages/preview.js +0 -12
  303. package/dist/ui/messages/preview.js.map +1 -1
  304. package/dist/ui/messages/session.d.ts +11 -1
  305. package/dist/ui/messages/session.d.ts.map +1 -1
  306. package/dist/ui/messages/session.js +14 -24
  307. package/dist/ui/messages/session.js.map +1 -1
  308. package/dist/utils/atomicFile.d.ts.map +1 -1
  309. package/dist/utils/atomicFile.js +9 -6
  310. package/dist/utils/atomicFile.js.map +1 -1
  311. package/dist/utils/decisionTrees.d.ts +54 -0
  312. package/dist/utils/decisionTrees.d.ts.map +1 -0
  313. package/dist/utils/decisionTrees.js +171 -0
  314. package/dist/utils/decisionTrees.js.map +1 -0
  315. package/dist/utils/exitCodes.d.ts.map +1 -1
  316. package/dist/utils/exitCodes.js +0 -2
  317. package/dist/utils/exitCodes.js.map +1 -1
  318. package/dist/utils/taskMappings.d.ts +47 -0
  319. package/dist/utils/taskMappings.d.ts.map +1 -0
  320. package/dist/utils/taskMappings.js +118 -0
  321. package/dist/utils/taskMappings.js.map +1 -0
  322. package/dist/utils/validation.d.ts.map +1 -1
  323. package/dist/utils/validation.js +0 -3
  324. package/dist/utils/validation.js.map +1 -1
  325. package/dist/utils/version.d.ts.map +1 -1
  326. package/dist/utils/version.js +0 -1
  327. package/dist/utils/version.js.map +1 -1
  328. package/package.json +3 -3
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Pattern detector for identifying verbose CDP usage.
3
+ *
4
+ * Tracks CDP command execution and detects patterns that indicate
5
+ * agents are using verbose approaches when high-level alternatives exist.
6
+ */
7
+ import { type PatternDefinition } from './patternDefinitions.js';
8
+ /**
9
+ * Pattern detection result with hint information.
10
+ */
11
+ export interface PatternDetectionResult {
12
+ /** Whether a hint should be shown */
13
+ shouldShow: boolean;
14
+ /** Pattern that was detected */
15
+ pattern?: PatternDefinition;
16
+ /** How many times this hint has been shown */
17
+ shownCount?: number;
18
+ }
19
+ /**
20
+ * Pattern detector for tracking CDP usage and suggesting alternatives.
21
+ *
22
+ * Maintains state for pattern occurrence counts and hint display limits.
23
+ * Designed to provide helpful guidance without overwhelming users.
24
+ */
25
+ export declare class PatternDetector {
26
+ private readonly methodCounts;
27
+ private readonly hintShownCounts;
28
+ private readonly maxHintsPerPattern;
29
+ /**
30
+ * Track a CDP command execution.
31
+ *
32
+ * Records the command and checks if any patterns are triggered.
33
+ * Returns detection result indicating if a hint should be shown.
34
+ *
35
+ * @param method - CDP method that was executed (e.g., "Runtime.evaluate")
36
+ * @returns Detection result with hint information
37
+ */
38
+ trackCommand(method: string): PatternDetectionResult;
39
+ /**
40
+ * Reset all pattern tracking state.
41
+ *
42
+ * Useful for testing or when starting a fresh analysis.
43
+ */
44
+ reset(): void;
45
+ /**
46
+ * Get current method count for a specific CDP method.
47
+ *
48
+ * @param method - CDP method name
49
+ * @returns Number of times method has been called
50
+ */
51
+ getMethodCount(method: string): number;
52
+ /**
53
+ * Get hint shown count for a specific pattern.
54
+ *
55
+ * @param patternName - Pattern identifier
56
+ * @returns Number of times hint has been shown for this pattern
57
+ */
58
+ getHintShownCount(patternName: string): number;
59
+ }
60
+ //# sourceMappingURL=patternDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patternDetector.d.ts","sourceRoot":"","sources":["../../src/daemon/patternDetector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAyB,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAExF;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,qCAAqC;IACrC,UAAU,EAAE,OAAO,CAAC;IACpB,gCAAgC;IAChC,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkC;IAC/D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkC;IAClE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAK;IAExC;;;;;;;;OAQG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB;IAwBpD;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAKb;;;;;OAKG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAItC;;;;;OAKG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;CAG/C"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Pattern detector for identifying verbose CDP usage.
3
+ *
4
+ * Tracks CDP command execution and detects patterns that indicate
5
+ * agents are using verbose approaches when high-level alternatives exist.
6
+ */
7
+ import { findPatternsForMethod } from './patternDefinitions.js';
8
+ /**
9
+ * Pattern detector for tracking CDP usage and suggesting alternatives.
10
+ *
11
+ * Maintains state for pattern occurrence counts and hint display limits.
12
+ * Designed to provide helpful guidance without overwhelming users.
13
+ */
14
+ export class PatternDetector {
15
+ methodCounts = new Map();
16
+ hintShownCounts = new Map();
17
+ maxHintsPerPattern = 3;
18
+ /**
19
+ * Track a CDP command execution.
20
+ *
21
+ * Records the command and checks if any patterns are triggered.
22
+ * Returns detection result indicating if a hint should be shown.
23
+ *
24
+ * @param method - CDP method that was executed (e.g., "Runtime.evaluate")
25
+ * @returns Detection result with hint information
26
+ */
27
+ trackCommand(method) {
28
+ const currentCount = (this.methodCounts.get(method) ?? 0) + 1;
29
+ this.methodCounts.set(method, currentCount);
30
+ const matchingPatterns = findPatternsForMethod(method);
31
+ for (const pattern of matchingPatterns) {
32
+ if (currentCount >= pattern.threshold) {
33
+ const shownCount = this.hintShownCounts.get(pattern.name) ?? 0;
34
+ if (shownCount < this.maxHintsPerPattern) {
35
+ this.hintShownCounts.set(pattern.name, shownCount + 1);
36
+ return {
37
+ shouldShow: true,
38
+ pattern,
39
+ shownCount: shownCount + 1,
40
+ };
41
+ }
42
+ }
43
+ }
44
+ return { shouldShow: false };
45
+ }
46
+ /**
47
+ * Reset all pattern tracking state.
48
+ *
49
+ * Useful for testing or when starting a fresh analysis.
50
+ */
51
+ reset() {
52
+ this.methodCounts.clear();
53
+ this.hintShownCounts.clear();
54
+ }
55
+ /**
56
+ * Get current method count for a specific CDP method.
57
+ *
58
+ * @param method - CDP method name
59
+ * @returns Number of times method has been called
60
+ */
61
+ getMethodCount(method) {
62
+ return this.methodCounts.get(method) ?? 0;
63
+ }
64
+ /**
65
+ * Get hint shown count for a specific pattern.
66
+ *
67
+ * @param patternName - Pattern identifier
68
+ * @returns Number of times hint has been shown for this pattern
69
+ */
70
+ getHintShownCount(patternName) {
71
+ return this.hintShownCounts.get(patternName) ?? 0;
72
+ }
73
+ }
74
+ //# sourceMappingURL=patternDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patternDetector.js","sourceRoot":"","sources":["../../src/daemon/patternDetector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,qBAAqB,EAA0B,MAAM,yBAAyB,CAAC;AAcxF;;;;;GAKG;AACH,MAAM,OAAO,eAAe;IACT,YAAY,GAAwB,IAAI,GAAG,EAAE,CAAC;IAC9C,eAAe,GAAwB,IAAI,GAAG,EAAE,CAAC;IACjD,kBAAkB,GAAG,CAAC,CAAC;IAExC;;;;;;;;OAQG;IACH,YAAY,CAAC,MAAc;QACzB,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC9D,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAE5C,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAEvD,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;YACvC,IAAI,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACtC,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAE/D,IAAI,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBACzC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC;oBACvD,OAAO;wBACL,UAAU,EAAE,IAAI;wBAChB,OAAO;wBACP,UAAU,EAAE,UAAU,GAAG,CAAC;qBAC3B,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACH,KAAK;QACH,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED;;;;;OAKG;IACH,cAAc,CAAC,MAAc;QAC3B,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED;;;;;OAKG;IACH,iBAAiB,CAAC,WAAmB;QACnC,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"JsonlParser.d.ts","sourceRoot":"","sources":["../../../src/daemon/server/JsonlParser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD;;GAEG;AACH,qBAAa,WAAW;IAGV,OAAO,CAAC,QAAQ,CAAC,GAAG;IAFhC,OAAO,CAAC,MAAM,CAAM;gBAES,GAAG,EAAE,MAAM;IAExC;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE;IA0B/B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,SAAS,IAAI,MAAM;CAGpB"}
1
+ {"version":3,"file":"JsonlParser.d.ts","sourceRoot":"","sources":["../../../src/daemon/server/JsonlParser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD;;GAEG;AACH,qBAAa,WAAW;IAGV,OAAO,CAAC,QAAQ,CAAC,GAAG;IAFhC,OAAO,CAAC,MAAM,CAAM;gBAES,GAAG,EAAE,MAAM;IAExC;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE;IAwB/B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,SAAS,IAAI,MAAM;CAGpB"}
@@ -22,9 +22,7 @@ export class JsonlParser {
22
22
  */
23
23
  parse(chunk) {
24
24
  this.buffer += chunk.toString('utf-8');
25
- // Split on newlines to find complete messages
26
25
  const lines = this.buffer.split('\n');
27
- // Keep incomplete line in buffer for next chunk
28
26
  this.buffer = lines.pop() ?? '';
29
27
  const messages = [];
30
28
  for (const line of lines) {
@@ -1 +1 @@
1
- {"version":3,"file":"JsonlParser.js","sourceRoot":"","sources":["../../../src/daemon/server/JsonlParser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD;;GAEG;AACH,MAAM,OAAO,WAAW;IAGO;IAFrB,MAAM,GAAG,EAAE,CAAC;IAEpB,YAA6B,GAAW;QAAX,QAAG,GAAH,GAAG,CAAQ;IAAG,CAAC;IAE5C;;;;;OAKG;IACH,KAAK,CAAC,KAAa;QACjB,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAEvC,8CAA8C;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,gDAAgD;QAChD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QAEhC,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACjB,SAAS;YACX,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACzC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,+BAA+B,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF"}
1
+ {"version":3,"file":"JsonlParser.js","sourceRoot":"","sources":["../../../src/daemon/server/JsonlParser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD;;GAEG;AACH,MAAM,OAAO,WAAW;IAGO;IAFrB,MAAM,GAAG,EAAE,CAAC;IAEpB,YAA6B,GAAW;QAAX,QAAG,GAAH,GAAG,CAAQ;IAAG,CAAC;IAE5C;;;;;OAKG;IACH,KAAK,CAAC,KAAa;QACjB,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAEvC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QAEhC,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACjB,SAAS;YACX,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACzC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,+BAA+B,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"startSession.d.ts","sourceRoot":"","sources":["../../src/daemon/startSession.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAKzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA2ChD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,YAAY,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,aAAa,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;aAGvB,IAAI,EAChB,cAAc,GACd,eAAe,GACf,cAAc,GACd,uBAAuB;aACX,OAAO,CAAC,EAAE,MAAM;gBANhC,OAAO,EAAE,MAAM,EACC,IAAI,EAChB,cAAc,GACd,eAAe,GACf,cAAc,GACd,uBAAuB,EACX,OAAO,CAAC,EAAE,MAAM,YAAA;CAKnC;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,cAAc,CAAC,CAuJzB"}
1
+ {"version":3,"file":"startSession.d.ts","sourceRoot":"","sources":["../../src/daemon/startSession.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAKzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA2ChD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,YAAY,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,aAAa,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;aAGvB,IAAI,EAChB,cAAc,GACd,eAAe,GACf,cAAc,GACd,uBAAuB;aACX,OAAO,CAAC,EAAE,MAAM;gBANhC,OAAO,EAAE,MAAM,EACC,IAAI,EAChB,cAAc,GACd,eAAe,GACf,cAAc,GACd,uBAAuB,EACX,OAAO,CAAC,EAAE,MAAM,YAAA;CAKnC;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,cAAc,CAAC,CAwIzB"}
@@ -59,12 +59,10 @@ export class WorkerStartError extends Error {
59
59
  * @throws WorkerStartError if worker fails to start
60
60
  */
61
61
  export async function launchSessionInWorker(url, options = {}) {
62
- // Validate URL (P1 Fix #3)
63
62
  const validation = validateUrl(url);
64
63
  if (!validation.valid) {
65
64
  throw new WorkerStartError(validation.error ?? 'Invalid URL', 'SPAWN_FAILED', validation.suggestion);
66
65
  }
67
- // Use filterDefined to build config, automatically omitting undefined values
68
66
  const config = filterDefined({
69
67
  url,
70
68
  port: options.port ?? 9222,
@@ -76,11 +74,9 @@ export async function launchSessionInWorker(url, options = {}) {
76
74
  headless: options.headless,
77
75
  chromeWsUrl: options.chromeWsUrl,
78
76
  });
79
- // Resolve worker script path
80
77
  const currentDir = dirname(fileURLToPath(import.meta.url));
81
78
  const workerPath = join(currentDir, 'worker.js');
82
79
  log.debug(daemonSpawningWorker(workerPath, config));
83
- // Spawn worker process
84
80
  let worker;
85
81
  try {
86
82
  worker = spawn('node', [workerPath, JSON.stringify(config)], {
@@ -95,13 +91,10 @@ export async function launchSessionInWorker(url, options = {}) {
95
91
  if (worker.pid) {
96
92
  log.debug(daemonWorkerSpawned(worker.pid));
97
93
  }
98
- // Wait for worker_ready signal
99
94
  return new Promise((resolve, reject) => {
100
95
  let stdoutBuffer = '';
101
96
  let stderrBuffer = '';
102
97
  let resolved = false;
103
- // Timeout for ready signal (40 seconds)
104
- // Must exceed DEFAULT_PAGE_READINESS_TIMEOUT_MS (30s) + Chrome launch time (~2s) + buffer
105
98
  const readyTimeout = setTimeout(() => {
106
99
  if (!resolved) {
107
100
  resolved = true;
@@ -109,11 +102,9 @@ export async function launchSessionInWorker(url, options = {}) {
109
102
  reject(new WorkerStartError('Worker did not send ready signal within 40 seconds', 'READY_TIMEOUT', `stderr: ${stderrBuffer}`));
110
103
  }
111
104
  }, 40000);
112
- // Handle stdout (ready signal)
113
105
  if (worker.stdout) {
114
106
  worker.stdout.on('data', (chunk) => {
115
107
  stdoutBuffer += chunk.toString('utf-8');
116
- // Look for complete JSONL message (ends with newline)
117
108
  const lines = stdoutBuffer.split('\n');
118
109
  stdoutBuffer = lines.pop() ?? ''; // Keep incomplete line in buffer
119
110
  for (const line of lines) {
@@ -122,7 +113,6 @@ export async function launchSessionInWorker(url, options = {}) {
122
113
  try {
123
114
  const parsed = JSON.parse(line);
124
115
  if (!isWorkerReadyMessage(parsed)) {
125
- // Not a worker_ready message, might be a log line
126
116
  continue;
127
117
  }
128
118
  if (!resolved) {
@@ -130,7 +120,6 @@ export async function launchSessionInWorker(url, options = {}) {
130
120
  clearTimeout(readyTimeout);
131
121
  log.debug(daemonWorkerReady(parsed.workerPid, parsed.chromePid));
132
122
  // NOTE: Don't unref() - we need to keep the worker reference for IPC
133
- // Worker continues running as detached process
134
123
  resolve({
135
124
  workerPid: parsed.workerPid,
136
125
  chromePid: parsed.chromePid,
@@ -148,15 +137,12 @@ export async function launchSessionInWorker(url, options = {}) {
148
137
  }
149
138
  });
150
139
  }
151
- // Handle stderr (log messages)
152
140
  if (worker.stderr) {
153
141
  worker.stderr.on('data', (chunk) => {
154
142
  stderrBuffer += chunk.toString('utf-8');
155
- // Forward worker stderr to daemon stderr
156
143
  process.stderr.write(chunk);
157
144
  });
158
145
  }
159
- // Handle worker exit
160
146
  worker.on('exit', (code, signal) => {
161
147
  if (!resolved) {
162
148
  resolved = true;
@@ -164,7 +150,6 @@ export async function launchSessionInWorker(url, options = {}) {
164
150
  reject(new WorkerStartError(`Worker process exited before sending ready signal (code: ${code}, signal: ${signal})`, 'WORKER_CRASH', `stderr: ${stderrBuffer}`));
165
151
  }
166
152
  });
167
- // Handle spawn errors
168
153
  worker.on('error', (error) => {
169
154
  if (!resolved) {
170
155
  resolved = true;
@@ -1 +1 @@
1
- {"version":3,"file":"startSession.js","sourceRoot":"","sources":["../../src/daemon/startSession.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"startSession.js","sourceRoot":"","sources":["../../src/daemon/startSession.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Unit tests for PatternDetector.
3
+ *
4
+ * Tests the contract of pattern detection behavior:
5
+ * - Hint display after threshold
6
+ * - Per-pattern threshold respect
7
+ * - Max shows limit
8
+ * - Pattern matching logic
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=PatternDetector.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PatternDetector.unit.test.d.ts","sourceRoot":"","sources":["../../../../src/daemon/worker/__tests__/PatternDetector.unit.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Unit tests for PatternDetector.
3
+ *
4
+ * Tests the contract of pattern detection behavior:
5
+ * - Hint display after threshold
6
+ * - Per-pattern threshold respect
7
+ * - Max shows limit
8
+ * - Pattern matching logic
9
+ */
10
+ import assert from 'node:assert';
11
+ import { describe, test } from 'node:test';
12
+ import { PatternDetector } from '../../../daemon/patternDetector.js';
13
+ describe('PatternDetector', () => {
14
+ describe('threshold-based hint display', () => {
15
+ test('does not show hint below threshold', () => {
16
+ const detector = new PatternDetector();
17
+ const result1 = detector.trackCommand('Runtime.evaluate');
18
+ assert.strictEqual(result1.shouldShow, false);
19
+ assert.strictEqual(result1.pattern, undefined);
20
+ });
21
+ test('shows hint when threshold is reached', () => {
22
+ const detector = new PatternDetector();
23
+ detector.trackCommand('Runtime.evaluate');
24
+ const result2 = detector.trackCommand('Runtime.evaluate');
25
+ assert.strictEqual(result2.shouldShow, true);
26
+ assert.ok(result2.pattern);
27
+ assert.ok(result2.pattern.alternative.includes('bdg dom query'));
28
+ });
29
+ test('continues showing hint after threshold until max shows', () => {
30
+ const detector = new PatternDetector();
31
+ detector.trackCommand('Runtime.evaluate');
32
+ detector.trackCommand('Runtime.evaluate');
33
+ const result3 = detector.trackCommand('Runtime.evaluate');
34
+ assert.strictEqual(result3.shouldShow, true);
35
+ });
36
+ });
37
+ describe('per-pattern threshold configuration', () => {
38
+ test('respects threshold of 1 for screenshot pattern', () => {
39
+ const detector = new PatternDetector();
40
+ const result = detector.trackCommand('Page.captureScreenshot');
41
+ assert.strictEqual(result.shouldShow, true);
42
+ assert.ok(result.pattern?.alternative.includes('bdg dom screenshot'));
43
+ });
44
+ test('respects threshold of 1 for cookies pattern', () => {
45
+ const detector = new PatternDetector();
46
+ const result1 = detector.trackCommand('Network.getCookies');
47
+ assert.strictEqual(result1.shouldShow, true);
48
+ assert.ok(result1.pattern?.alternative.includes('bdg network getCookies'));
49
+ });
50
+ test('respects threshold of 3 for network body pattern', () => {
51
+ const detector = new PatternDetector();
52
+ const result1 = detector.trackCommand('Network.getResponseBody');
53
+ const result2 = detector.trackCommand('Network.getResponseBody');
54
+ assert.strictEqual(result1.shouldShow, false);
55
+ assert.strictEqual(result2.shouldShow, false);
56
+ const result3 = detector.trackCommand('Network.getResponseBody');
57
+ assert.strictEqual(result3.shouldShow, true);
58
+ assert.ok(result3.pattern?.alternative.includes('bdg details network'));
59
+ });
60
+ test('respects threshold of 4 for multiple runtime evaluations', () => {
61
+ const detector = new PatternDetector();
62
+ detector.trackCommand('Runtime.evaluate');
63
+ detector.trackCommand('Runtime.evaluate');
64
+ detector.trackCommand('Runtime.evaluate');
65
+ const result4 = detector.trackCommand('Runtime.evaluate');
66
+ assert.strictEqual(result4.shouldShow, true);
67
+ assert.ok(result4.pattern?.alternative.includes('bdg dom eval'));
68
+ });
69
+ });
70
+ describe('max shows limit', () => {
71
+ test('stops showing hint after max shows limit reached', () => {
72
+ const detector = new PatternDetector();
73
+ detector.trackCommand('Runtime.evaluate');
74
+ detector.trackCommand('Runtime.evaluate');
75
+ let lastResult;
76
+ for (let i = 0; i < 10; i++) {
77
+ lastResult = detector.trackCommand('Runtime.evaluate');
78
+ }
79
+ assert.strictEqual(lastResult?.shouldShow, false);
80
+ });
81
+ test('tracks hint count per pattern independently', () => {
82
+ const detector = new PatternDetector();
83
+ detector.trackCommand('Runtime.evaluate');
84
+ detector.trackCommand('Runtime.evaluate');
85
+ for (let i = 0; i < 10; i++) {
86
+ detector.trackCommand('Runtime.evaluate');
87
+ }
88
+ const screenshotResult = detector.trackCommand('Page.captureScreenshot');
89
+ assert.strictEqual(screenshotResult.shouldShow, true);
90
+ });
91
+ });
92
+ describe('pattern matching', () => {
93
+ test('matches multiple CDP methods to same pattern', () => {
94
+ const detector = new PatternDetector();
95
+ const result1 = detector.trackCommand('Network.getCookies');
96
+ const result2 = detector.trackCommand('Network.getAllCookies');
97
+ assert.strictEqual(result1.shouldShow, true);
98
+ assert.strictEqual(result2.shouldShow, false);
99
+ assert.strictEqual(result1.pattern?.name, result2.pattern?.name);
100
+ });
101
+ test('returns undefined pattern for unmatched commands', () => {
102
+ const detector = new PatternDetector();
103
+ const result = detector.trackCommand('DOM.getDocument');
104
+ assert.strictEqual(result.shouldShow, false);
105
+ assert.strictEqual(result.pattern, undefined);
106
+ });
107
+ test('handles case-insensitive method names', () => {
108
+ const detector = new PatternDetector();
109
+ detector.trackCommand('runtime.evaluate');
110
+ const result = detector.trackCommand('RUNTIME.EVALUATE');
111
+ assert.strictEqual(result.shouldShow, true);
112
+ assert.ok(result.pattern?.alternative.includes('bdg dom query'));
113
+ });
114
+ });
115
+ describe('state persistence', () => {
116
+ test('maintains count across multiple method calls', () => {
117
+ const detector = new PatternDetector();
118
+ detector.trackCommand('Runtime.evaluate');
119
+ detector.trackCommand('Page.captureScreenshot');
120
+ const result = detector.trackCommand('Runtime.evaluate');
121
+ assert.strictEqual(result.shouldShow, true);
122
+ });
123
+ test('tracks separate counts for different patterns', () => {
124
+ const detector = new PatternDetector();
125
+ detector.trackCommand('Runtime.evaluate');
126
+ detector.trackCommand('Network.getResponseBody');
127
+ detector.trackCommand('Runtime.evaluate');
128
+ const evalResult = detector.trackCommand('Runtime.evaluate');
129
+ assert.strictEqual(evalResult.shouldShow, false);
130
+ detector.trackCommand('Network.getResponseBody');
131
+ const bodyResult = detector.trackCommand('Network.getResponseBody');
132
+ assert.strictEqual(bodyResult.shouldShow, true);
133
+ });
134
+ });
135
+ });
136
+ //# sourceMappingURL=PatternDetector.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PatternDetector.unit.test.js","sourceRoot":"","sources":["../../../../src/daemon/worker/__tests__/PatternDetector.unit.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"commandRegistry.d.ts","sourceRoot":"","sources":["../../../src/daemon/worker/commandRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAoB,MAAM,gBAAgB,CAAC;AAIpF,KAAK,OAAO,CAAC,CAAC,SAAS,WAAW,IAAI,CACpC,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,KACvC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAElD,MAAM,MAAM,eAAe,GAAG;KAC3B,CAAC,IAAI,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;CAC/B,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CAoH5E"}
1
+ {"version":3,"file":"commandRegistry.d.ts","sourceRoot":"","sources":["../../../src/daemon/worker/commandRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAoB,MAAM,gBAAgB,CAAC;AAKpF,KAAK,OAAO,CAAC,CAAC,SAAS,WAAW,IAAI,CACpC,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,KACvC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAElD,MAAM,MAAM,eAAe,GAAG;KAC3B,CAAC,IAAI,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;CAC/B,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CAmL5E"}
@@ -1,12 +1,14 @@
1
+ import { PatternDetector } from '../../daemon/patternDetector.js';
2
+ import { generatePatternHint } from '../../ui/messages/hints.js';
1
3
  import { filterDefined } from '../../utils/objects.js';
2
4
  import { VERSION } from '../../utils/version.js';
3
5
  export function createCommandRegistry(store) {
6
+ const patternDetector = new PatternDetector();
4
7
  return {
5
8
  worker_peek: async (_cdp, params) => {
6
9
  const lastN = Math.min(params.lastN ?? 10, 100);
7
10
  const offset = params.offset ?? 0;
8
11
  const duration = Date.now() - store.sessionStartTime;
9
- // Calculate slice positions from the end, accounting for offset
10
12
  const totalNetwork = store.networkRequests.length;
11
13
  const totalConsole = store.consoleMessages.length;
12
14
  const networkStart = Math.max(0, totalNetwork - lastN - offset);
@@ -20,6 +22,7 @@ export function createCommandRegistry(store) {
20
22
  url: req.url,
21
23
  status: req.status,
22
24
  mimeType: req.mimeType,
25
+ resourceType: req.resourceType,
23
26
  }));
24
27
  const recentConsole = store.consoleMessages.slice(consoleStart, consoleEnd).map((msg) => ({
25
28
  timestamp: msg.timestamp,
@@ -85,9 +88,50 @@ export function createCommandRegistry(store) {
85
88
  };
86
89
  return Promise.resolve(result);
87
90
  },
91
+ worker_har_data: async (_cdp, _params) => {
92
+ return Promise.resolve({
93
+ requests: store.networkRequests,
94
+ });
95
+ },
96
+ worker_network_headers: async (_cdp, params) => {
97
+ let targetRequest;
98
+ if (!params.id) {
99
+ const currentNavId = store.getCurrentNavigationId?.() ?? 0;
100
+ targetRequest = store.networkRequests.findLast((r) => r.navigationId === currentNavId && r.resourceType === 'Document');
101
+ targetRequest ??= store.networkRequests.findLast((r) => r.mimeType?.includes('html'));
102
+ targetRequest ??= store.networkRequests.findLast((r) => r.responseHeaders && Object.keys(r.responseHeaders).length > 0);
103
+ if (!targetRequest) {
104
+ return Promise.reject(new Error('No network requests with headers found'));
105
+ }
106
+ }
107
+ else {
108
+ targetRequest = store.networkRequests.find((r) => r.requestId === params.id);
109
+ if (!targetRequest) {
110
+ return Promise.reject(new Error(`Network request not found: ${params.id}`));
111
+ }
112
+ }
113
+ let requestHeaders = targetRequest.requestHeaders ?? {};
114
+ let responseHeaders = targetRequest.responseHeaders ?? {};
115
+ if (params.headerName) {
116
+ const name = params.headerName.toLowerCase();
117
+ requestHeaders = Object.fromEntries(Object.entries(requestHeaders).filter(([k]) => k.toLowerCase() === name));
118
+ responseHeaders = Object.fromEntries(Object.entries(responseHeaders).filter(([k]) => k.toLowerCase() === name));
119
+ }
120
+ return Promise.resolve({
121
+ url: targetRequest.url,
122
+ requestId: targetRequest.requestId,
123
+ requestHeaders,
124
+ responseHeaders,
125
+ });
126
+ },
88
127
  cdp_call: async (cdp, params) => {
89
128
  const result = await cdp.send(params.method, params.params ?? {});
90
- return { result };
129
+ const detectionResult = patternDetector.trackCommand(params.method);
130
+ let hint;
131
+ if (detectionResult.shouldShow && detectionResult.pattern) {
132
+ hint = generatePatternHint(detectionResult.pattern);
133
+ }
134
+ return { result, hint };
91
135
  },
92
136
  };
93
137
  }
@@ -1 +1 @@
1
- {"version":3,"file":"commandRegistry.js","sourceRoot":"","sources":["../../../src/daemon/worker/commandRegistry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commandRegistry.js","sourceRoot":"","sources":["../../../src/daemon/worker/commandRegistry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../../src/daemon/worker/plugins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAMzD,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAGpD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,KAAK,EAAE,CAAC,GAAG,EAAE,sBAAsB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CAClE;AAED,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,aAAa,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,6BAA6B,IAAI,eAAe,EAAE,CAuDjE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAQ5F;AAQD,wBAAgB,6BAA6B,IAAI,eAAe,EAAE,CAEjE"}
1
+ {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../../src/daemon/worker/plugins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAMzD,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAGpD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,KAAK,EAAE,CAAC,GAAG,EAAE,sBAAsB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CAClE;AAED,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,aAAa,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,6BAA6B,IAAI,eAAe,EAAE,CAuDjE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAQ5F;AAID,wBAAgB,6BAA6B,IAAI,eAAe,EAAE,CAEjE"}
@@ -61,9 +61,6 @@ export function shouldActivatePlugin(plugin, store) {
61
61
  }
62
62
  return false;
63
63
  }
64
- // ---------------------------------------------------------------------------
65
- // Registry helpers - allow other modules/tests to register custom plugins
66
- // ---------------------------------------------------------------------------
67
64
  const pluginRegistry = createDefaultTelemetryPlugins();
68
65
  export function getRegisteredTelemetryPlugins() {
69
66
  return [...pluginRegistry];
@@ -1 +1 @@
1
- {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../../src/daemon/worker/plugins.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAGhE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAgBnD,MAAM,UAAU,6BAA6B;IAC3C,OAAO;QACL;YACE,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,IAAI;YACf,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE;gBACjB,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAClC,CAAC;SACF;QACD;YACE,IAAI,EAAE,YAAY;YAClB,SAAS,EAAE,IAAI;YACf,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE;gBACxB,MAAM,EAAE,OAAO,EAAE,sBAAsB,EAAE,GAAG,MAAM,uBAAuB,CACvE,GAAG,EACH,KAAK,CAAC,gBAAgB,CACvB,CAAC;gBACF,KAAK,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,CAAC;gBACpD,OAAO,OAAO,CAAC;YACjB,CAAC;SACF;QACD;YACE,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,SAAS;YACpB,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE;gBAChC,MAAM,cAAc,GAAG;oBACrB,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,KAAK;oBACtC,sBAAsB,EAAE,KAAK,CAAC,sBAAsB,IAAI,SAAS;oBACjE,GAAG,aAAa,CAAC;wBACf,WAAW,EAAE,MAAM,CAAC,WAAW;qBAChC,CAAC;iBACH,CAAC;gBACF,OAAO,sBAAsB,CAAC,GAAG,EAAE,KAAK,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;YAC5E,CAAC;SACF;QACD;YACE,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,SAAS;YACpB,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE;gBAChC,OAAO,sBAAsB,CAC3B,GAAG,EACH,KAAK,CAAC,eAAe,EACrB,MAAM,CAAC,UAAU,IAAI,KAAK,EAC1B,KAAK,CAAC,sBAAsB,IAAI,SAAS,CAC1C,CAAC;YACJ,CAAC;SACF;QACD;YACE,IAAI,EAAE,KAAK;YACX,SAAS,EAAE,KAAK;YAChB,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE;gBACjB,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAuB,EAAE,KAAqB;IACjF,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8EAA8E;AAC9E,0EAA0E;AAC1E,8EAA8E;AAE9E,MAAM,cAAc,GAAsB,6BAA6B,EAAE,CAAC;AAE1E,MAAM,UAAU,6BAA6B;IAC3C,OAAO,CAAC,GAAG,cAAc,CAAC,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../../src/daemon/worker/plugins.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAGhE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAgBnD,MAAM,UAAU,6BAA6B;IAC3C,OAAO;QACL;YACE,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,IAAI;YACf,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE;gBACjB,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAClC,CAAC;SACF;QACD;YACE,IAAI,EAAE,YAAY;YAClB,SAAS,EAAE,IAAI;YACf,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE;gBACxB,MAAM,EAAE,OAAO,EAAE,sBAAsB,EAAE,GAAG,MAAM,uBAAuB,CACvE,GAAG,EACH,KAAK,CAAC,gBAAgB,CACvB,CAAC;gBACF,KAAK,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,CAAC;gBACpD,OAAO,OAAO,CAAC;YACjB,CAAC;SACF;QACD;YACE,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,SAAS;YACpB,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE;gBAChC,MAAM,cAAc,GAAG;oBACrB,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,KAAK;oBACtC,sBAAsB,EAAE,KAAK,CAAC,sBAAsB,IAAI,SAAS;oBACjE,GAAG,aAAa,CAAC;wBACf,WAAW,EAAE,MAAM,CAAC,WAAW;qBAChC,CAAC;iBACH,CAAC;gBACF,OAAO,sBAAsB,CAAC,GAAG,EAAE,KAAK,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;YAC5E,CAAC;SACF;QACD;YACE,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,SAAS;YACpB,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE;gBAChC,OAAO,sBAAsB,CAC3B,GAAG,EACH,KAAK,CAAC,eAAe,EACrB,MAAM,CAAC,UAAU,IAAI,KAAK,EAC1B,KAAK,CAAC,sBAAsB,IAAI,SAAS,CAC1C,CAAC;YACJ,CAAC;SACF;QACD;YACE,IAAI,EAAE,KAAK;YACX,SAAS,EAAE,KAAK;YAChB,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE;gBACjB,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAuB,EAAE,KAAqB;IACjF,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,cAAc,GAAsB,6BAA6B,EAAE,CAAC;AAE1E,MAAM,UAAU,6BAA6B;IAC3C,OAAO,CAAC,GAAG,cAAc,CAAC,CAAC;AAC7B,CAAC"}
@@ -63,22 +63,16 @@ function initializeTelemetryStore() {
63
63
  async function main() {
64
64
  console.error(`[worker] Starting (PID ${process.pid})`);
65
65
  try {
66
- // Parse configuration
67
66
  const config = parseWorkerConfig();
68
67
  console.error(`[worker] Config: ${JSON.stringify(config)}`);
69
- // Initialize state
70
68
  initializeTelemetryStore();
71
69
  writePid(process.pid);
72
- // Setup Chrome connection (launch or connect to external)
73
70
  chrome = await setupChromeConnection(config, telemetryStore, log);
74
- // Setup CDP connection, telemetry, and navigate
75
71
  const result = await setupCDPAndNavigate(config, telemetryStore, chrome, log, () => {
76
- // CDP disconnect callback
77
72
  void cleanupWorker('crash', { chrome, cdp, cleanupFunctions, telemetryStore, log }).then(() => process.exit(1));
78
73
  });
79
74
  cdp = result.cdp;
80
75
  cleanupFunctions = result.cleanupFunctions;
81
- // Write session metadata
82
76
  writeSessionMetadata({
83
77
  bdgPid: process.pid,
84
78
  chromePid: chrome?.pid ?? 0,
@@ -89,11 +83,8 @@ async function main() {
89
83
  activeTelemetry: telemetryStore.activeTelemetry,
90
84
  });
91
85
  console.error(`[worker] Session metadata written`);
92
- // Setup IPC listener BEFORE sending ready signal
93
86
  setupStdinListener(cdp, commandRegistry, log);
94
- // Send ready signal to daemon
95
87
  sendReadySignal(process.pid, chrome?.pid ?? 0, config.port);
96
- // Setup signal handlers (SIGTERM, SIGINT, timeout)
97
88
  setupSignalHandlers({ chrome, cdp, cleanupFunctions, telemetryStore, log }, config.timeout);
98
89
  log.debug(workerSessionActive());
99
90
  }