agent-web-interface 4.4.0 → 4.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (334) hide show
  1. package/README.md +35 -34
  2. package/dist/src/browser/browser-session-config.d.ts +33 -0
  3. package/dist/src/browser/browser-session-config.d.ts.map +1 -0
  4. package/dist/src/browser/browser-session-config.js +25 -0
  5. package/dist/src/browser/browser-session-config.js.map +1 -0
  6. package/dist/src/browser/ensure-browser.d.ts +12 -27
  7. package/dist/src/browser/ensure-browser.d.ts.map +1 -1
  8. package/dist/src/browser/ensure-browser.js +131 -39
  9. package/dist/src/browser/ensure-browser.js.map +1 -1
  10. package/dist/src/browser/index.d.ts +2 -1
  11. package/dist/src/browser/index.d.ts.map +1 -1
  12. package/dist/src/browser/index.js +1 -0
  13. package/dist/src/browser/index.js.map +1 -1
  14. package/dist/src/browser/page-network-recorder.d.ts +95 -0
  15. package/dist/src/browser/page-network-recorder.d.ts.map +1 -0
  16. package/dist/src/browser/page-network-recorder.js +306 -0
  17. package/dist/src/browser/page-network-recorder.js.map +1 -0
  18. package/dist/src/browser/session-manager.d.ts +20 -0
  19. package/dist/src/browser/session-manager.d.ts.map +1 -1
  20. package/dist/src/browser/session-manager.js +169 -20
  21. package/dist/src/browser/session-manager.js.map +1 -1
  22. package/dist/src/browser/session-manager.types.d.ts +14 -2
  23. package/dist/src/browser/session-manager.types.d.ts.map +1 -1
  24. package/dist/src/browser/session-manager.types.js +5 -1
  25. package/dist/src/browser/session-manager.types.js.map +1 -1
  26. package/dist/src/cli/args.d.ts +12 -18
  27. package/dist/src/cli/args.d.ts.map +1 -1
  28. package/dist/src/cli/args.js +35 -40
  29. package/dist/src/cli/args.js.map +1 -1
  30. package/dist/src/form/constraint-extraction.d.ts +5 -0
  31. package/dist/src/form/constraint-extraction.d.ts.map +1 -1
  32. package/dist/src/form/constraint-extraction.js +13 -6
  33. package/dist/src/form/constraint-extraction.js.map +1 -1
  34. package/dist/src/form/field-extractor.d.ts.map +1 -1
  35. package/dist/src/form/field-extractor.js +14 -7
  36. package/dist/src/form/field-extractor.js.map +1 -1
  37. package/dist/src/form/form-state.d.ts.map +1 -1
  38. package/dist/src/form/form-state.js +16 -4
  39. package/dist/src/form/form-state.js.map +1 -1
  40. package/dist/src/gateway/http-gateway.d.ts +56 -0
  41. package/dist/src/gateway/http-gateway.d.ts.map +1 -0
  42. package/dist/src/gateway/http-gateway.js +229 -0
  43. package/dist/src/gateway/http-gateway.js.map +1 -0
  44. package/dist/src/gateway/json-rpc-errors.d.ts +6 -0
  45. package/dist/src/gateway/json-rpc-errors.d.ts.map +1 -0
  46. package/dist/src/gateway/json-rpc-errors.js +11 -0
  47. package/dist/src/gateway/json-rpc-errors.js.map +1 -0
  48. package/dist/src/gateway/session-router.d.ts +80 -0
  49. package/dist/src/gateway/session-router.d.ts.map +1 -0
  50. package/dist/src/gateway/session-router.js +177 -0
  51. package/dist/src/gateway/session-router.js.map +1 -0
  52. package/dist/src/http-entry.d.ts +20 -0
  53. package/dist/src/http-entry.d.ts.map +1 -0
  54. package/dist/src/http-entry.js +112 -0
  55. package/dist/src/http-entry.js.map +1 -0
  56. package/dist/src/index.d.ts +1 -10
  57. package/dist/src/index.d.ts.map +1 -1
  58. package/dist/src/index.js +25 -232
  59. package/dist/src/index.js.map +1 -1
  60. package/dist/src/lib/text-utils.d.ts +0 -24
  61. package/dist/src/lib/text-utils.d.ts.map +1 -1
  62. package/dist/src/lib/text-utils.js +2 -38
  63. package/dist/src/lib/text-utils.js.map +1 -1
  64. package/dist/src/observation/eid-linker.d.ts.map +1 -1
  65. package/dist/src/observation/eid-linker.js +1 -21
  66. package/dist/src/observation/eid-linker.js.map +1 -1
  67. package/dist/src/server/index.d.ts +0 -1
  68. package/dist/src/server/index.d.ts.map +1 -1
  69. package/dist/src/server/index.js +0 -1
  70. package/dist/src/server/index.js.map +1 -1
  71. package/dist/src/server/mcp-server.d.ts +6 -2
  72. package/dist/src/server/mcp-server.d.ts.map +1 -1
  73. package/dist/src/server/mcp-server.js +3 -91
  74. package/dist/src/server/mcp-server.js.map +1 -1
  75. package/dist/src/server/server-config.d.ts +4 -20
  76. package/dist/src/server/server-config.d.ts.map +1 -1
  77. package/dist/src/server/server-config.js +6 -50
  78. package/dist/src/server/server-config.js.map +1 -1
  79. package/dist/src/server/tool-registrar.types.d.ts +25 -0
  80. package/dist/src/server/tool-registrar.types.d.ts.map +1 -0
  81. package/dist/src/server/tool-registrar.types.js +10 -0
  82. package/dist/src/server/tool-registrar.types.js.map +1 -0
  83. package/dist/src/server/tool-result-handler.d.ts +61 -0
  84. package/dist/src/server/tool-result-handler.d.ts.map +1 -0
  85. package/dist/src/server/tool-result-handler.js +155 -0
  86. package/dist/src/server/tool-result-handler.js.map +1 -0
  87. package/dist/src/session/session-controller.d.ts +124 -0
  88. package/dist/src/session/session-controller.d.ts.map +1 -0
  89. package/dist/src/session/session-controller.js +276 -0
  90. package/dist/src/session/session-controller.js.map +1 -0
  91. package/dist/src/shared/services/index.d.ts +0 -2
  92. package/dist/src/shared/services/index.d.ts.map +1 -1
  93. package/dist/src/shared/services/index.js +0 -2
  94. package/dist/src/shared/services/index.js.map +1 -1
  95. package/dist/src/shared/version.d.ts +10 -0
  96. package/dist/src/shared/version.d.ts.map +1 -0
  97. package/dist/src/shared/version.js +32 -0
  98. package/dist/src/shared/version.js.map +1 -0
  99. package/dist/src/snapshot/element-resolver.d.ts +3 -2
  100. package/dist/src/snapshot/element-resolver.d.ts.map +1 -1
  101. package/dist/src/snapshot/element-resolver.js +83 -8
  102. package/dist/src/snapshot/element-resolver.js.map +1 -1
  103. package/dist/src/snapshot/extractors/attribute-extractor.d.ts.map +1 -1
  104. package/dist/src/snapshot/extractors/attribute-extractor.js +4 -0
  105. package/dist/src/snapshot/extractors/attribute-extractor.js.map +1 -1
  106. package/dist/src/snapshot/extractors/layout-extractor.d.ts +9 -7
  107. package/dist/src/snapshot/extractors/layout-extractor.d.ts.map +1 -1
  108. package/dist/src/snapshot/extractors/layout-extractor.js +34 -19
  109. package/dist/src/snapshot/extractors/layout-extractor.js.map +1 -1
  110. package/dist/src/snapshot/extractors/state-extractor.d.ts +2 -2
  111. package/dist/src/snapshot/extractors/state-extractor.d.ts.map +1 -1
  112. package/dist/src/snapshot/extractors/state-extractor.js +22 -2
  113. package/dist/src/snapshot/extractors/state-extractor.js.map +1 -1
  114. package/dist/src/snapshot/extractors/types.d.ts +6 -0
  115. package/dist/src/snapshot/extractors/types.d.ts.map +1 -1
  116. package/dist/src/snapshot/extractors/types.js.map +1 -1
  117. package/dist/src/snapshot/snapshot-compiler.d.ts.map +1 -1
  118. package/dist/src/snapshot/snapshot-compiler.js +15 -2
  119. package/dist/src/snapshot/snapshot-compiler.js.map +1 -1
  120. package/dist/src/snapshot/snapshot.types.d.ts +10 -1
  121. package/dist/src/snapshot/snapshot.types.d.ts.map +1 -1
  122. package/dist/src/snapshot/snapshot.types.js.map +1 -1
  123. package/dist/src/state/actionables-filter.d.ts.map +1 -1
  124. package/dist/src/state/actionables-filter.js +7 -3
  125. package/dist/src/state/actionables-filter.js.map +1 -1
  126. package/dist/src/state/atoms-extractor.d.ts.map +1 -1
  127. package/dist/src/state/atoms-extractor.js +3 -23
  128. package/dist/src/state/atoms-extractor.js.map +1 -1
  129. package/dist/src/state/diff-engine.d.ts.map +1 -1
  130. package/dist/src/state/diff-engine.js +6 -33
  131. package/dist/src/state/diff-engine.js.map +1 -1
  132. package/dist/src/state/element-identity.d.ts +3 -6
  133. package/dist/src/state/element-identity.d.ts.map +1 -1
  134. package/dist/src/state/element-identity.js +10 -7
  135. package/dist/src/state/element-identity.js.map +1 -1
  136. package/dist/src/state/element-ref.types.d.ts +5 -27
  137. package/dist/src/state/element-ref.types.d.ts.map +1 -1
  138. package/dist/src/state/state-manager.d.ts.map +1 -1
  139. package/dist/src/state/state-manager.js +3 -1
  140. package/dist/src/state/state-manager.js.map +1 -1
  141. package/dist/src/state/state-renderer.d.ts.map +1 -1
  142. package/dist/src/state/state-renderer.js +3 -1
  143. package/dist/src/state/state-renderer.js.map +1 -1
  144. package/dist/src/state/types.d.ts +2 -1
  145. package/dist/src/state/types.d.ts.map +1 -1
  146. package/dist/src/state/url-sanitization.d.ts +1 -1
  147. package/dist/src/state/url-sanitization.d.ts.map +1 -1
  148. package/dist/src/state/url-sanitization.js +29 -13
  149. package/dist/src/state/url-sanitization.js.map +1 -1
  150. package/dist/src/tools/action-context.d.ts +6 -11
  151. package/dist/src/tools/action-context.d.ts.map +1 -1
  152. package/dist/src/tools/action-context.js +10 -19
  153. package/dist/src/tools/action-context.js.map +1 -1
  154. package/dist/src/tools/action-stabilization.d.ts.map +1 -1
  155. package/dist/src/tools/action-stabilization.js +6 -0
  156. package/dist/src/tools/action-stabilization.js.map +1 -1
  157. package/dist/src/tools/browser-tools.d.ts +4 -2
  158. package/dist/src/tools/browser-tools.d.ts.map +1 -1
  159. package/dist/src/tools/browser-tools.js +7 -3
  160. package/dist/src/tools/browser-tools.js.map +1 -1
  161. package/dist/src/tools/canvas-tools.d.ts +2 -1
  162. package/dist/src/tools/canvas-tools.d.ts.map +1 -1
  163. package/dist/src/tools/canvas-tools.js +5 -7
  164. package/dist/src/tools/canvas-tools.js.map +1 -1
  165. package/dist/src/tools/errors.d.ts +2 -34
  166. package/dist/src/tools/errors.d.ts.map +1 -1
  167. package/dist/src/tools/errors.js +1 -44
  168. package/dist/src/tools/errors.js.map +1 -1
  169. package/dist/src/tools/execute-action.d.ts +4 -3
  170. package/dist/src/tools/execute-action.d.ts.map +1 -1
  171. package/dist/src/tools/execute-action.js +32 -23
  172. package/dist/src/tools/execute-action.js.map +1 -1
  173. package/dist/src/tools/form-tools.d.ts +3 -8
  174. package/dist/src/tools/form-tools.d.ts.map +1 -1
  175. package/dist/src/tools/form-tools.js +38 -18
  176. package/dist/src/tools/form-tools.js.map +1 -1
  177. package/dist/src/tools/index.d.ts +8 -6
  178. package/dist/src/tools/index.d.ts.map +1 -1
  179. package/dist/src/tools/index.js +10 -10
  180. package/dist/src/tools/index.js.map +1 -1
  181. package/dist/src/tools/interaction-tools.d.ts +6 -5
  182. package/dist/src/tools/interaction-tools.d.ts.map +1 -1
  183. package/dist/src/tools/interaction-tools.js +29 -32
  184. package/dist/src/tools/interaction-tools.js.map +1 -1
  185. package/dist/src/tools/navigation-tools.d.ts +7 -13
  186. package/dist/src/tools/navigation-tools.d.ts.map +1 -1
  187. package/dist/src/tools/navigation-tools.js +57 -59
  188. package/dist/src/tools/navigation-tools.js.map +1 -1
  189. package/dist/src/tools/network-tools.d.ts +10 -0
  190. package/dist/src/tools/network-tools.d.ts.map +1 -0
  191. package/dist/src/tools/network-tools.js +117 -0
  192. package/dist/src/tools/network-tools.js.map +1 -0
  193. package/dist/src/tools/observation-tools.d.ts +6 -5
  194. package/dist/src/tools/observation-tools.d.ts.map +1 -1
  195. package/dist/src/tools/observation-tools.js +30 -34
  196. package/dist/src/tools/observation-tools.js.map +1 -1
  197. package/dist/src/tools/readability-tools.d.ts +16 -0
  198. package/dist/src/tools/readability-tools.d.ts.map +1 -0
  199. package/dist/src/tools/readability-tools.js +45 -0
  200. package/dist/src/tools/readability-tools.js.map +1 -0
  201. package/dist/src/tools/response-builder.d.ts +20 -32
  202. package/dist/src/tools/response-builder.d.ts.map +1 -1
  203. package/dist/src/tools/response-builder.js +31 -47
  204. package/dist/src/tools/response-builder.js.map +1 -1
  205. package/dist/src/tools/stale-element-retry.d.ts.map +1 -1
  206. package/dist/src/tools/stale-element-retry.js +37 -2
  207. package/dist/src/tools/stale-element-retry.js.map +1 -1
  208. package/dist/src/tools/tool-context.d.ts +4 -36
  209. package/dist/src/tools/tool-context.d.ts.map +1 -1
  210. package/dist/src/tools/tool-context.js +6 -75
  211. package/dist/src/tools/tool-context.js.map +1 -1
  212. package/dist/src/tools/tool-context.types.d.ts +147 -0
  213. package/dist/src/tools/tool-context.types.d.ts.map +1 -0
  214. package/dist/src/tools/tool-context.types.js +11 -0
  215. package/dist/src/tools/tool-context.types.js.map +1 -0
  216. package/dist/src/tools/tool-registration.d.ts +25 -0
  217. package/dist/src/tools/tool-registration.d.ts.map +1 -0
  218. package/dist/src/tools/tool-registration.js +195 -0
  219. package/dist/src/tools/tool-registration.js.map +1 -0
  220. package/dist/src/tools/tool-schemas.d.ts +178 -1947
  221. package/dist/src/tools/tool-schemas.d.ts.map +1 -1
  222. package/dist/src/tools/tool-schemas.js +130 -302
  223. package/dist/src/tools/tool-schemas.js.map +1 -1
  224. package/dist/src/tools/viewport-tools.d.ts +4 -3
  225. package/dist/src/tools/viewport-tools.d.ts.map +1 -1
  226. package/dist/src/tools/viewport-tools.js +17 -21
  227. package/dist/src/tools/viewport-tools.js.map +1 -1
  228. package/dist/src/worker/chrome-worker-process.d.ts +4 -0
  229. package/dist/src/worker/chrome-worker-process.d.ts.map +1 -1
  230. package/dist/src/worker/chrome-worker-process.js +1 -1
  231. package/dist/src/worker/chrome-worker-process.js.map +1 -1
  232. package/dist/vitest.config.js +1 -1
  233. package/dist/vitest.config.js.map +1 -1
  234. package/dist/vitest.integration.config.d.ts +3 -0
  235. package/dist/vitest.integration.config.d.ts.map +1 -0
  236. package/dist/vitest.integration.config.js +11 -0
  237. package/dist/vitest.integration.config.js.map +1 -0
  238. package/package.json +20 -5
  239. package/dist/src/factpack/action-selector.d.ts +0 -36
  240. package/dist/src/factpack/action-selector.d.ts.map +0 -1
  241. package/dist/src/factpack/action-selector.js +0 -367
  242. package/dist/src/factpack/action-selector.js.map +0 -1
  243. package/dist/src/factpack/dialog-detector.d.ts +0 -19
  244. package/dist/src/factpack/dialog-detector.d.ts.map +0 -1
  245. package/dist/src/factpack/dialog-detector.js +0 -354
  246. package/dist/src/factpack/dialog-detector.js.map +0 -1
  247. package/dist/src/factpack/form-detector.d.ts +0 -28
  248. package/dist/src/factpack/form-detector.d.ts.map +0 -1
  249. package/dist/src/factpack/form-detector.js +0 -555
  250. package/dist/src/factpack/form-detector.js.map +0 -1
  251. package/dist/src/factpack/index.d.ts +0 -32
  252. package/dist/src/factpack/index.d.ts.map +0 -1
  253. package/dist/src/factpack/index.js +0 -73
  254. package/dist/src/factpack/index.js.map +0 -1
  255. package/dist/src/factpack/page-classifier.d.ts +0 -22
  256. package/dist/src/factpack/page-classifier.d.ts.map +0 -1
  257. package/dist/src/factpack/page-classifier.js +0 -526
  258. package/dist/src/factpack/page-classifier.js.map +0 -1
  259. package/dist/src/factpack/types.d.ts +0 -307
  260. package/dist/src/factpack/types.d.ts.map +0 -1
  261. package/dist/src/factpack/types.js +0 -12
  262. package/dist/src/factpack/types.js.map +0 -1
  263. package/dist/src/lib/constants.d.ts +0 -27
  264. package/dist/src/lib/constants.d.ts.map +0 -1
  265. package/dist/src/lib/constants.js +0 -63
  266. package/dist/src/lib/constants.js.map +0 -1
  267. package/dist/src/lib/index.d.ts +0 -12
  268. package/dist/src/lib/index.d.ts.map +0 -1
  269. package/dist/src/lib/index.js +0 -17
  270. package/dist/src/lib/index.js.map +0 -1
  271. package/dist/src/lib/regions.d.ts +0 -29
  272. package/dist/src/lib/regions.d.ts.map +0 -1
  273. package/dist/src/lib/regions.js +0 -93
  274. package/dist/src/lib/regions.js.map +0 -1
  275. package/dist/src/lib/scoring.d.ts +0 -47
  276. package/dist/src/lib/scoring.d.ts.map +0 -1
  277. package/dist/src/lib/scoring.js +0 -79
  278. package/dist/src/lib/scoring.js.map +0 -1
  279. package/dist/src/lib/selectors.d.ts +0 -42
  280. package/dist/src/lib/selectors.d.ts.map +0 -1
  281. package/dist/src/lib/selectors.js +0 -138
  282. package/dist/src/lib/selectors.js.map +0 -1
  283. package/dist/src/renderer/budget-manager.d.ts +0 -46
  284. package/dist/src/renderer/budget-manager.d.ts.map +0 -1
  285. package/dist/src/renderer/budget-manager.js +0 -133
  286. package/dist/src/renderer/budget-manager.js.map +0 -1
  287. package/dist/src/renderer/constants.d.ts +0 -38
  288. package/dist/src/renderer/constants.d.ts.map +0 -1
  289. package/dist/src/renderer/constants.js +0 -29
  290. package/dist/src/renderer/constants.js.map +0 -1
  291. package/dist/src/renderer/index.d.ts +0 -12
  292. package/dist/src/renderer/index.d.ts.map +0 -1
  293. package/dist/src/renderer/index.js +0 -16
  294. package/dist/src/renderer/index.js.map +0 -1
  295. package/dist/src/renderer/section-renderers.d.ts +0 -42
  296. package/dist/src/renderer/section-renderers.d.ts.map +0 -1
  297. package/dist/src/renderer/section-renderers.js +0 -252
  298. package/dist/src/renderer/section-renderers.js.map +0 -1
  299. package/dist/src/renderer/token-counter.d.ts +0 -45
  300. package/dist/src/renderer/token-counter.d.ts.map +0 -1
  301. package/dist/src/renderer/token-counter.js +0 -65
  302. package/dist/src/renderer/token-counter.js.map +0 -1
  303. package/dist/src/renderer/types.d.ts +0 -71
  304. package/dist/src/renderer/types.d.ts.map +0 -1
  305. package/dist/src/renderer/types.js +0 -7
  306. package/dist/src/renderer/types.js.map +0 -1
  307. package/dist/src/renderer/xml-renderer.d.ts +0 -42
  308. package/dist/src/renderer/xml-renderer.d.ts.map +0 -1
  309. package/dist/src/renderer/xml-renderer.js +0 -103
  310. package/dist/src/renderer/xml-renderer.js.map +0 -1
  311. package/dist/src/server/session-store.d.ts +0 -163
  312. package/dist/src/server/session-store.d.ts.map +0 -1
  313. package/dist/src/server/session-store.js +0 -248
  314. package/dist/src/server/session-store.js.map +0 -1
  315. package/dist/src/session/session-worker-binding.d.ts +0 -57
  316. package/dist/src/session/session-worker-binding.d.ts.map +0 -1
  317. package/dist/src/session/session-worker-binding.js +0 -109
  318. package/dist/src/session/session-worker-binding.js.map +0 -1
  319. package/dist/src/shared/services/dom-transformer.service.d.ts +0 -71
  320. package/dist/src/shared/services/dom-transformer.service.d.ts.map +0 -1
  321. package/dist/src/shared/services/dom-transformer.service.js +0 -190
  322. package/dist/src/shared/services/dom-transformer.service.js.map +0 -1
  323. package/dist/src/shared/services/selector-builder.service.d.ts +0 -53
  324. package/dist/src/shared/services/selector-builder.service.d.ts.map +0 -1
  325. package/dist/src/shared/services/selector-builder.service.js +0 -240
  326. package/dist/src/shared/services/selector-builder.service.js.map +0 -1
  327. package/dist/src/state/constants.d.ts +0 -125
  328. package/dist/src/state/constants.d.ts.map +0 -1
  329. package/dist/src/state/constants.js +0 -131
  330. package/dist/src/state/constants.js.map +0 -1
  331. package/dist/src/tools/state-manager-registry.d.ts +0 -26
  332. package/dist/src/tools/state-manager-registry.d.ts.map +0 -1
  333. package/dist/src/tools/state-manager-registry.js +0 -39
  334. package/dist/src/tools/state-manager-registry.js.map +0 -1
package/README.md CHANGED
@@ -100,8 +100,6 @@ Example workflows include:
100
100
  - Handling login and consent flows
101
101
  - Performing multi-step UI interactions with lower token usage
102
102
 
103
- See the `examples/` directory for concrete agent workflows.
104
-
105
103
  ---
106
104
 
107
105
  ## Claude Code
@@ -110,33 +108,30 @@ See the `examples/` directory for concrete agent workflows.
110
108
  # Basic (auto-launches browser)
111
109
  claude mcp add agent-web-interface -- npx agent-web-interface@latest
112
110
 
113
- # With auto-connect to your Chrome profile
114
- claude mcp add agent-web-interface -- npx agent-web-interface@latest --autoConnect
115
-
116
- # Headless mode
117
- claude mcp add agent-web-interface -- npx agent-web-interface@latest --headless
111
+ # With auto-connect to your Chrome profile (set via env var)
112
+ claude mcp add agent-web-interface -e AWI_CDP_URL=http://localhost:9222 -- npx agent-web-interface@latest
118
113
  ```
119
114
 
120
115
  ---
121
116
 
122
117
  ## CLI Arguments
123
118
 
124
- The server accepts the following arguments to configure browser initialization:
119
+ The server accepts transport-level arguments only. Browser configuration is per-session via the `navigate` tool.
125
120
 
126
- | Argument | Description | Default |
127
- | ------------------------ | --------------------------------------------------------------- | ---------------- |
128
- | `--headless=true\|false` | Run browser in headless mode | `false` |
129
- | `--browserUrl` | HTTP endpoint to connect to existing browser | - |
130
- | `--wsEndpoint` | WebSocket endpoint to connect to existing browser | - |
131
- | `--autoConnect` | Auto-connect to Chrome 144+ via DevToolsActivePort | `false` |
132
- | `--isolated` | Use isolated temp profile instead of persistent | `false` |
133
- | `--userDataDir` | Chrome user data directory | Platform default |
134
- | `--channel` | Chrome channel (chrome, chrome-canary, chrome-beta, chrome-dev) | `chrome` |
135
- | `--executablePath` | Path to Chrome executable | - |
121
+ | Argument | Description | Default |
122
+ | ------------- | --------------------------------- | ------- |
123
+ | `--transport` | Transport mode: `stdio` or `http` | `stdio` |
124
+ | `--port` | Port for HTTP transport | `3000` |
136
125
 
137
- ### Automatic Browser Initialization
126
+ ### Browser Session Configuration
138
127
 
139
- The browser is automatically launched or connected on the first tool call. No explicit initialization is needed.
128
+ Browser initialization is automatic on the first tool call. The `navigate` tool accepts optional parameters to configure the session:
129
+
130
+ | Parameter | Description | Default |
131
+ | -------------- | -------------------------------------------------- | ------- |
132
+ | `headless` | Run browser in headless mode | `false` |
133
+ | `isolated` | Use an isolated temp profile instead of persistent | `false` |
134
+ | `auto_connect` | Auto-connect to Chrome 144+ via DevToolsActivePort | `false` |
140
135
 
141
136
  Examples:
142
137
 
@@ -144,14 +139,11 @@ Examples:
144
139
  # Auto-launch visible browser (default)
145
140
  npx agent-web-interface
146
141
 
147
- # Launch headless browser
148
- npx agent-web-interface --headless
149
-
150
- # Auto-connect to Chrome with remote debugging enabled
151
- npx agent-web-interface --autoConnect
142
+ # HTTP transport mode
143
+ npx agent-web-interface --transport http --port 8080
152
144
 
153
- # Connect to specific endpoint
154
- npx agent-web-interface --browserUrl http://localhost:9222
145
+ # Connect to existing CDP endpoint via env var
146
+ AWI_CDP_URL=http://localhost:9222 npx agent-web-interface
155
147
  ```
156
148
 
157
149
  ---
@@ -162,14 +154,17 @@ To connect with your bookmarks, extensions, and logged-in sessions:
162
154
 
163
155
  1. Navigate to `chrome://inspect/#remote-debugging` in Chrome
164
156
  2. Enable remote debugging and allow the connection
165
- 3. Use `--autoConnect` CLI argument
157
+ 3. Use the `auto_connect` parameter on the `navigate` tool, or set `AWI_CDP_URL`
166
158
 
167
159
  ```json
168
160
  {
169
161
  "mcpServers": {
170
162
  "agent-web-interface": {
171
163
  "command": "npx",
172
- "args": ["agent-web-interface@latest", "--autoConnect"]
164
+ "args": ["agent-web-interface@latest"],
165
+ "env": {
166
+ "AWI_CDP_URL": "http://localhost:9222"
167
+ }
173
168
  }
174
169
  }
175
170
  }
@@ -179,11 +174,17 @@ To connect with your bookmarks, extensions, and logged-in sessions:
179
174
 
180
175
  ## Environment Variables
181
176
 
182
- | Variable | Description | Default |
183
- | ------------------ | -------------------------------------------------- | ----------- |
184
- | `AWI_TRIM_REGIONS` | Set to `false` to disable region trimming globally | `true` |
185
- | `CEF_BRIDGE_HOST` | CDP host for browser connection | `127.0.0.1` |
186
- | `CEF_BRIDGE_PORT` | CDP port for browser connection | `9223` |
177
+ | Variable | Description | Default |
178
+ | ------------------ | -------------------------------------------------------- | ----------- |
179
+ | `AWI_CDP_URL` | CDP endpoint (http or ws) to connect to existing browser | - |
180
+ | `AWI_TRIM_REGIONS` | Set to `false` to disable region trimming globally | `true` |
181
+ | `TRANSPORT` | Transport mode override (`http`) | - |
182
+ | `HTTP_HOST` | Host for HTTP transport | `127.0.0.1` |
183
+ | `HTTP_PORT` | Port for HTTP transport | `3000` |
184
+ | `LOG_LEVEL` | Logging level | `info` |
185
+ | `CEF_BRIDGE_HOST` | CDP host for CEF bridge connection | `127.0.0.1` |
186
+ | `CEF_BRIDGE_PORT` | CDP port for CEF bridge connection | `9223` |
187
+ | `CHROME_PATH` | Path to Chrome executable (multi-tenant) | - |
187
188
 
188
189
  ---
189
190
 
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Browser Session Config
3
+ *
4
+ * Defines the browser configuration that agents can specify per session.
5
+ * Each session can independently choose to launch a new browser or connect
6
+ * to an existing one, with its own headless/headed preference.
7
+ *
8
+ * Env var AWI_CDP_URL overrides to connect to an existing CDP endpoint.
9
+ *
10
+ * @module browser/browser-session-config
11
+ */
12
+ /**
13
+ * Per-session browser configuration.
14
+ *
15
+ * Agents pass browser preferences via the `navigate` tool's optional parameters.
16
+ * If not provided, sensible defaults are used (launch, headed, persistent profile).
17
+ */
18
+ export interface BrowserSessionConfig {
19
+ /** Run browser in headless mode. Default: false */
20
+ headless?: boolean;
21
+ /** Use an isolated temp profile instead of persistent. Default: false */
22
+ isolated?: boolean;
23
+ /** Auto-connect to Chrome 144+ via DevToolsActivePort */
24
+ autoConnect?: boolean;
25
+ }
26
+ /**
27
+ * Returns sensible default browser configuration.
28
+ *
29
+ * Launch a headed Chrome with a persistent profile — the most common
30
+ * configuration for interactive browser automation.
31
+ */
32
+ export declare function defaultBrowserConfig(): BrowserSessionConfig;
33
+ //# sourceMappingURL=browser-session-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-session-config.d.ts","sourceRoot":"","sources":["../../../src/browser/browser-session-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,yDAAyD;IACzD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,oBAAoB,CAM3D"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Browser Session Config
3
+ *
4
+ * Defines the browser configuration that agents can specify per session.
5
+ * Each session can independently choose to launch a new browser or connect
6
+ * to an existing one, with its own headless/headed preference.
7
+ *
8
+ * Env var AWI_CDP_URL overrides to connect to an existing CDP endpoint.
9
+ *
10
+ * @module browser/browser-session-config
11
+ */
12
+ /**
13
+ * Returns sensible default browser configuration.
14
+ *
15
+ * Launch a headed Chrome with a persistent profile — the most common
16
+ * configuration for interactive browser automation.
17
+ */
18
+ export function defaultBrowserConfig() {
19
+ return {
20
+ headless: false,
21
+ isolated: false,
22
+ autoConnect: true,
23
+ };
24
+ }
25
+ //# sourceMappingURL=browser-session-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-session-config.js","sourceRoot":"","sources":["../../../src/browser/browser-session-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAmBH;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,IAAI;KAClB,CAAC;AACJ,CAAC"}
@@ -2,38 +2,23 @@
2
2
  * Lazy Browser Initialization
3
3
  *
4
4
  * Ensures a browser is ready before tool execution.
5
- * If no browser is running, launches or connects based on CLI configuration.
5
+ * If no browser is running, launches or connects based on session configuration.
6
+ *
7
+ * When a persistent profile is in use and Chrome is already running (from a
8
+ * previous session or another agent), reconnects via DevToolsActivePort instead
9
+ * of failing on the profile lock.
10
+ *
11
+ * CDP endpoint can be set via AWI_CDP_URL env var (http or ws) to connect
12
+ * to an existing browser instead of launching.
6
13
  */
7
14
  import type { SessionManager } from './session-manager.js';
8
- /**
9
- * Options for lazy browser initialization.
10
- */
11
- export interface EnsureBrowserOptions {
12
- /** Run browser in headless mode (default: false) */
13
- headless?: boolean;
14
- /** Use isolated temp profile (default: false) */
15
- isolated?: boolean;
16
- /** HTTP endpoint URL for connecting to existing browser */
17
- browserUrl?: string;
18
- /** WebSocket endpoint URL for connecting to existing browser */
19
- wsEndpoint?: string;
20
- /** Auto-connect to Chrome 144+ via DevToolsActivePort */
21
- autoConnect?: boolean;
22
- /** Chrome user data directory */
23
- userDataDir?: string;
24
- /** Chrome channel */
25
- channel?: 'chrome' | 'chrome-canary' | 'chrome-beta' | 'chrome-dev';
26
- /** Path to Chrome executable */
27
- executablePath?: string;
28
- }
15
+ import type { BrowserSessionConfig } from './browser-session-config.js';
29
16
  /**
30
17
  * Ensure browser is ready for tool execution.
31
18
  *
32
19
  * If browser is already running, returns immediately.
33
- * Otherwise, launches or connects based on provided options.
34
- *
35
- * @param session - SessionManager instance
36
- * @param options - Configuration options from CLI
20
+ * Otherwise, launches or connects based on provided config.
21
+ * Set AWI_CDP_URL env var to connect to an existing CDP endpoint.
37
22
  */
38
- export declare function ensureBrowserReady(session: SessionManager, options: EnsureBrowserOptions): Promise<void>;
23
+ export declare function ensureBrowserReady(session: SessionManager, config: BrowserSessionConfig): Promise<void>;
39
24
  //# sourceMappingURL=ensure-browser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ensure-browser.d.ts","sourceRoot":"","sources":["../../../src/browser/ensure-browser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,oDAAoD;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,yDAAyD;IACzD,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,qBAAqB;IACrB,OAAO,CAAC,EAAE,QAAQ,GAAG,eAAe,GAAG,aAAa,GAAG,YAAY,CAAC;IAEpE,gCAAgC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AASD;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAwCf"}
1
+ {"version":3,"file":"ensure-browser.d.ts","sourceRoot":"","sources":["../../../src/browser/ensure-browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AASxE;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAwFf"}
@@ -2,64 +2,156 @@
2
2
  * Lazy Browser Initialization
3
3
  *
4
4
  * Ensures a browser is ready before tool execution.
5
- * If no browser is running, launches or connects based on CLI configuration.
5
+ * If no browser is running, launches or connects based on session configuration.
6
+ *
7
+ * When a persistent profile is in use and Chrome is already running (from a
8
+ * previous session or another agent), reconnects via DevToolsActivePort instead
9
+ * of failing on the profile lock.
10
+ *
11
+ * CDP endpoint can be set via AWI_CDP_URL env var (http or ws) to connect
12
+ * to an existing browser instead of launching.
6
13
  */
14
+ import fs from 'node:fs';
15
+ import path from 'node:path';
16
+ import { DEFAULT_USER_DATA_DIR } from './session-manager.js';
17
+ import { extractErrorMessage } from './connection-utils.js';
7
18
  import { getLogger } from '../shared/services/logging.service.js';
8
19
  const logger = getLogger();
9
- /**
10
- * Determine if we should connect to an existing browser vs launch new one.
11
- */
12
- function shouldConnect(options) {
13
- return !!(options.browserUrl ?? options.wsEndpoint ?? options.autoConnect);
14
- }
20
+ /** Short timeout for reconnect attempts — these are fast pre-checks, not full connections */
21
+ const RECONNECT_TIMEOUT_MS = 5000;
15
22
  /**
16
23
  * Ensure browser is ready for tool execution.
17
24
  *
18
25
  * If browser is already running, returns immediately.
19
- * Otherwise, launches or connects based on provided options.
20
- *
21
- * @param session - SessionManager instance
22
- * @param options - Configuration options from CLI
26
+ * Otherwise, launches or connects based on provided config.
27
+ * Set AWI_CDP_URL env var to connect to an existing CDP endpoint.
23
28
  */
24
- export async function ensureBrowserReady(session, options) {
25
- // Fast path: browser already running
29
+ export async function ensureBrowserReady(session, config) {
26
30
  if (session.isRunning()) {
27
31
  return;
28
32
  }
29
- const mode = shouldConnect(options) ? 'connect' : 'launch';
30
- logger.info('Lazy browser initialization triggered', { mode });
31
- try {
32
- if (shouldConnect(options)) {
33
- // Connect to existing browser
34
- await session.connect({
35
- browserURL: options.browserUrl,
36
- browserWSEndpoint: options.wsEndpoint,
37
- autoConnect: options.autoConnect,
38
- userDataDir: options.userDataDir,
33
+ const inFlightPromise = session.connectionPromise;
34
+ if (session.connectionState === 'connecting' && inFlightPromise) {
35
+ logger.info('Awaiting in-flight browser connection');
36
+ await inFlightPromise;
37
+ return;
38
+ }
39
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- empty string must be falsy
40
+ const cdpUrl = process.env.AWI_CDP_URL?.trim() || undefined;
41
+ // Explicit CDP URL — connect only, no fallback to launch
42
+ if (cdpUrl) {
43
+ logger.info('Lazy browser initialization triggered', { mode: 'connect', cdpUrl });
44
+ try {
45
+ await session.connect({ endpointUrl: cdpUrl });
46
+ logger.info('Browser initialized successfully', { mode: 'connect' });
47
+ }
48
+ catch (error) {
49
+ const msg = extractErrorMessage(error);
50
+ logger.error('Browser initialization failed', error instanceof Error ? error : undefined, {
51
+ mode: 'connect',
39
52
  });
53
+ throw new Error(`Failed to connect to CDP endpoint (${cdpUrl}): ${msg}. ` +
54
+ 'Try removing AWI_CDP_URL to auto-connect to a running Chrome, or launch a new browser with auto_connect=false.');
40
55
  }
41
- else {
42
- // Launch new browser
43
- await session.launch({
44
- headless: options.headless ?? false,
45
- isolated: options.isolated ?? false,
46
- userDataDir: options.userDataDir,
47
- channel: options.channel,
48
- executablePath: options.executablePath,
56
+ return;
57
+ }
58
+ // Auto-connect: try connecting to an existing Chrome first, fall back to launch
59
+ if (config.autoConnect) {
60
+ logger.info('Attempting auto-connect to existing Chrome');
61
+ try {
62
+ await session.connect({ autoConnect: true });
63
+ logger.info('Auto-connected to existing Chrome');
64
+ return;
65
+ }
66
+ catch (error) {
67
+ logger.info('Auto-connect failed, falling back to launch', {
68
+ error: extractErrorMessage(error),
49
69
  });
50
70
  }
51
- logger.info('Browser initialized successfully', { mode });
71
+ }
72
+ // Launch mode — try reconnecting to an existing browser first (persistent profiles only)
73
+ const profileDir = config.isolated ? undefined : DEFAULT_USER_DATA_DIR;
74
+ if (profileDir && (await hasPortFile(profileDir)) && (await tryReconnect(session, profileDir))) {
75
+ return;
76
+ }
77
+ // Launch a new browser
78
+ logger.info('Lazy browser initialization triggered', { mode: 'launch' });
79
+ try {
80
+ await session.launch({
81
+ headless: config.headless ?? false,
82
+ isolated: config.isolated ?? false,
83
+ });
84
+ logger.info('Browser initialized successfully', { mode: 'launch' });
52
85
  }
53
86
  catch (error) {
87
+ // Another process may have grabbed the profile between our reconnect attempt
88
+ // and launch (race condition). Try reconnecting one more time.
89
+ if (profileDir && isProfileLockError(error) && (await tryReconnect(session, profileDir))) {
90
+ return;
91
+ }
92
+ const msg = extractErrorMessage(error);
54
93
  logger.error('Browser initialization failed', error instanceof Error ? error : undefined, {
55
- mode,
56
- browserUrl: options.browserUrl,
57
- wsEndpoint: options.wsEndpoint,
58
- autoConnect: options.autoConnect,
59
- headless: options.headless,
60
- userDataDir: options.userDataDir,
94
+ mode: 'launch',
95
+ headless: config.headless,
96
+ });
97
+ const suggestions = [];
98
+ if (!config.headless) {
99
+ suggestions.push('try headless=true if no display is available');
100
+ }
101
+ if (!config.isolated) {
102
+ suggestions.push('try isolated=true to use a fresh profile');
103
+ }
104
+ if (config.headless) {
105
+ suggestions.push('try headless=false to launch a visible browser');
106
+ }
107
+ const hint = suggestions.length > 0 ? ` Suggestions: ${suggestions.join('; ')}.` : '';
108
+ throw new Error(`Failed to launch browser: ${msg}.${hint}`);
109
+ }
110
+ }
111
+ /**
112
+ * Check if DevToolsActivePort file exists in the profile directory.
113
+ * Used to skip the reconnect attempt entirely on cold starts where
114
+ * Chrome has never run, avoiding wasted I/O.
115
+ */
116
+ async function hasPortFile(profileDir) {
117
+ try {
118
+ await fs.promises.access(path.join(profileDir, 'DevToolsActivePort'), fs.constants.F_OK);
119
+ return true;
120
+ }
121
+ catch {
122
+ return false;
123
+ }
124
+ }
125
+ /**
126
+ * Attempt to reconnect to an existing Chrome via its DevToolsActivePort file.
127
+ * Returns true on success. On failure, returns false.
128
+ * Uses a short timeout since this is a fast pre-check, not a full connection attempt.
129
+ */
130
+ async function tryReconnect(session, profileDir) {
131
+ try {
132
+ await session.connect({
133
+ autoConnect: true,
134
+ userDataDir: profileDir,
135
+ ownedReconnect: true,
136
+ timeout: RECONNECT_TIMEOUT_MS,
137
+ });
138
+ logger.info('Reconnected to existing browser');
139
+ return true;
140
+ }
141
+ catch (error) {
142
+ logger.warning('Reconnect to existing browser failed', {
143
+ error: extractErrorMessage(error),
61
144
  });
62
- throw error;
145
+ return false;
63
146
  }
64
147
  }
148
+ /**
149
+ * Detect Chrome profile-lock errors from Puppeteer.
150
+ * Matches against Puppeteer's error text which includes "already running for <path>"
151
+ * when the SingletonLock file prevents a second Chrome instance.
152
+ */
153
+ function isProfileLockError(error) {
154
+ const msg = extractErrorMessage(error);
155
+ return /already running for|already in use|SingletonLock/i.test(msg);
156
+ }
65
157
  //# sourceMappingURL=ensure-browser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ensure-browser.js","sourceRoot":"","sources":["../../../src/browser/ensure-browser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAElE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;AA+B3B;;GAEG;AACH,SAAS,aAAa,CAAC,OAA6B;IAClD,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;AAC7E,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAuB,EACvB,OAA6B;IAE7B,qCAAqC;IACrC,IAAI,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;QACxB,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC3D,MAAM,CAAC,IAAI,CAAC,uCAAuC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/D,IAAI,CAAC;QACH,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,8BAA8B;YAC9B,MAAM,OAAO,CAAC,OAAO,CAAC;gBACpB,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,iBAAiB,EAAE,OAAO,CAAC,UAAU;gBACrC,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,qBAAqB;YACrB,MAAM,OAAO,CAAC,MAAM,CAAC;gBACnB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK;gBACnC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK;gBACnC,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,cAAc,EAAE,OAAO,CAAC,cAAc;aACvC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE;YACxF,IAAI;YACJ,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,CAAC;QACH,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"ensure-browser.js","sourceRoot":"","sources":["../../../src/browser/ensure-browser.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@
5
5
  */
6
6
  export { PageRegistry, type PageHandle } from './page-registry.js';
7
7
  export { SessionManager } from './session-manager.js';
8
- export type { LaunchOptions, ConnectOptions, ConnectionState, ConnectionStateChangeEvent, } from './session-manager.types.js';
8
+ export type { ChromeChannel, LaunchOptions, ConnectOptions, ConnectionState, ConnectionStateChangeEvent, } from './session-manager.types.js';
9
+ export { CHROME_CHANNELS } from './session-manager.types.js';
9
10
  export { extractErrorMessage } from './connection-utils.js';
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/browser/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EACV,aAAa,EACb,cAAc,EACd,eAAe,EACf,0BAA0B,GAC3B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/browser/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EACV,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,0BAA0B,GAC3B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -5,5 +5,6 @@
5
5
  */
6
6
  export { PageRegistry } from './page-registry.js';
7
7
  export { SessionManager } from './session-manager.js';
8
+ export { CHROME_CHANNELS } from './session-manager.types.js';
8
9
  export { extractErrorMessage } from './connection-utils.js';
9
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/browser/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAmB,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAOtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/browser/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAmB,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAQtD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Page Network Recorder
3
+ *
4
+ * Records network request/response details per page for the
5
+ * list_network_calls and search_network_calls tools.
6
+ *
7
+ * Uses Puppeteer page events (request, requestfinished, requestfailed)
8
+ * to capture entries. Memory-bounded via a ring buffer with
9
+ * configurable max entries.
10
+ *
11
+ * Follows the same lifecycle pattern as PageNetworkTracker:
12
+ * attach() → markNavigation() → detach()
13
+ */
14
+ import type { Page } from 'puppeteer-core';
15
+ export interface NetworkEntry {
16
+ id: number;
17
+ url: string;
18
+ method: string;
19
+ resource_type: string;
20
+ is_navigation: boolean;
21
+ request_headers: Record<string, string>;
22
+ post_data: string | null;
23
+ started_at: number;
24
+ status: number | null;
25
+ status_text: string | null;
26
+ response_headers: Record<string, string> | null;
27
+ mime_type: string | null;
28
+ duration_ms: number | null;
29
+ failed: boolean;
30
+ failure_text: string | null;
31
+ navigation_id: number;
32
+ }
33
+ export interface NetworkFilter {
34
+ url_pattern?: string;
35
+ url_regex?: boolean;
36
+ method?: string;
37
+ resource_type?: string;
38
+ status_min?: number;
39
+ status_max?: number;
40
+ failed_only?: boolean;
41
+ }
42
+ export interface NetworkQueryResult {
43
+ entries: NetworkEntry[];
44
+ total: number;
45
+ }
46
+ /**
47
+ * Records network request/response details for a single page.
48
+ *
49
+ * Uses a ring buffer (fixed-size array with head pointer) for O(1)
50
+ * insertion and eviction instead of Array.shift().
51
+ */
52
+ export declare class PageNetworkRecorder {
53
+ private buffer;
54
+ private head;
55
+ private count;
56
+ private nextId;
57
+ private navigationId;
58
+ private maxEntries;
59
+ private page;
60
+ private generation;
61
+ private currentGeneration;
62
+ /** Map from HTTPRequest to NetworkEntry for response correlation */
63
+ private pending;
64
+ private onRequest;
65
+ private onRequestFinished;
66
+ private onRequestFailed;
67
+ constructor(maxEntries?: number);
68
+ attach(page: Page): void;
69
+ detach(): void;
70
+ markNavigation(): void;
71
+ getEntries(filter?: NetworkFilter, offset?: number, limit?: number): NetworkQueryResult;
72
+ search(urlPattern: string, isRegex?: boolean, filter?: NetworkFilter, limit?: number): NetworkQueryResult;
73
+ clear(): void;
74
+ getStats(): {
75
+ total: number;
76
+ pending: number;
77
+ failed: number;
78
+ by_resource_type: Record<string, number>;
79
+ };
80
+ isAttached(): boolean;
81
+ /** Iterate entries in insertion order (oldest first). */
82
+ private iterEntries;
83
+ /** Compile a URL regex once, with a safety check for pathological patterns. */
84
+ private compileUrlRegex;
85
+ private applyFilter;
86
+ /** Add an entry, evicting the oldest if at capacity. O(1). */
87
+ private addEntry;
88
+ private pickHeaders;
89
+ private createAndAttachHandlers;
90
+ private removeHandlers;
91
+ }
92
+ export declare function getOrCreateRecorder(page: Page, maxEntries?: number): PageNetworkRecorder;
93
+ export declare function removeRecorder(page: Page): void;
94
+ export declare function hasRecorder(page: Page): boolean;
95
+ //# sourceMappingURL=page-network-recorder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-network-recorder.d.ts","sourceRoot":"","sources":["../../../src/browser/page-network-recorder.ts"],"names":[],"mappings":"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"}