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
@@ -1,53 +1,21 @@
1
1
  /**
2
2
  * Tool Context
3
3
  *
4
- * Shared plumbing for all tool modules (browser-tools, canvas-tools, form-tools).
5
- * Centralizes session management, snapshot storage, page resolution, and element lookup.
4
+ * Implementation helpers used by SessionController for page resolution
5
+ * and CDP session health. These accept a SessionManager parameter rather
6
+ * than using module-level singletons.
6
7
  */
7
8
  import type { SessionManager } from '../browser/session-manager.js';
8
9
  import type { PageHandle } from '../browser/page-registry.js';
9
- import type { BaseSnapshot, ReadableNode } from '../snapshot/snapshot.types.js';
10
- import type { RuntimeHealth } from '../state/health.types.js';
11
- import { SnapshotStore } from '../snapshot/index.js';
12
- /**
13
- * Initialize shared tool context with a session manager.
14
- * Must be called once before using any tool handlers.
15
- */
16
- export declare function initializeToolContext(manager: SessionManager): void;
17
- /**
18
- * Get the session manager, throwing if not initialized.
19
- */
20
- export declare function getSessionManager(): SessionManager;
21
- /**
22
- * Get the shared snapshot store instance.
23
- */
24
- export declare function getSnapshotStore(): SnapshotStore;
10
+ import type { CdpSessionResult } from './tool-context.types.js';
25
11
  /**
26
12
  * Resolve page_id to a PageHandle, throwing if not found.
27
13
  * Also touches the page to mark it as MRU.
28
14
  */
29
15
  export declare function resolveExistingPage(session: SessionManager, page_id: string | undefined): PageHandle;
30
- export interface CdpSessionResult {
31
- handle: PageHandle;
32
- recovered: boolean;
33
- runtime_health: RuntimeHealth;
34
- }
35
16
  /**
36
17
  * Ensure CDP session is healthy, attempting repair if needed.
37
18
  * Call this before any CDP operation to auto-repair dead sessions.
38
19
  */
39
20
  export declare function ensureCdpSession(session: SessionManager, handle: PageHandle): Promise<CdpSessionResult>;
40
- /**
41
- * Require snapshot for a page, throwing a consistent error if missing.
42
- */
43
- export declare function requireSnapshot(pageId: string): BaseSnapshot;
44
- /**
45
- * Resolve element by eid for action tools.
46
- * Looks up element in registry and finds corresponding node in snapshot.
47
- * Includes proactive staleness detection before CDP interaction.
48
- *
49
- * @throws {ElementNotFoundError} If eid not found in registry
50
- * @throws {StaleElementError} If eid reference is stale or element not in current snapshot
51
- */
52
- export declare function resolveElementByEid(pageId: string, eid: string, snapshot: BaseSnapshot): ReadableNode;
53
21
  //# sourceMappingURL=tool-context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-context.d.ts","sourceRoot":"","sources":["../../../src/tools/tool-context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAUrD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAEnE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAKlD;AAQD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAEhD;AAMD;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,UAAU,CASZ;AAMD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,aAAa,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,gBAAgB,CAAC,CAoB3B;AAMD;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAM5D;AAMD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,YAAY,GACrB,YAAY,CAmBd"}
1
+ {"version":3,"file":"tool-context.d.ts","sourceRoot":"","sources":["../../../src/tools/tool-context.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAMhE;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,UAAU,CASZ;AAMD;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,gBAAgB,CAAC,CAoB3B"}
@@ -1,43 +1,11 @@
1
1
  /**
2
2
  * Tool Context
3
3
  *
4
- * Shared plumbing for all tool modules (browser-tools, canvas-tools, form-tools).
5
- * Centralizes session management, snapshot storage, page resolution, and element lookup.
4
+ * Implementation helpers used by SessionController for page resolution
5
+ * and CDP session health. These accept a SessionManager parameter rather
6
+ * than using module-level singletons.
6
7
  */
7
8
  import { createHealthyRuntime, createRecoveredCdpRuntime } from '../state/health.types.js';
8
- import { SnapshotStore } from '../snapshot/index.js';
9
- import { getStateManager } from './state-manager-registry.js';
10
- import { ElementNotFoundError, StaleElementError, SnapshotRequiredError } from './errors.js';
11
- // ---------------------------------------------------------------------------
12
- // Session Manager Singleton
13
- // ---------------------------------------------------------------------------
14
- let sessionManager = null;
15
- /**
16
- * Initialize shared tool context with a session manager.
17
- * Must be called once before using any tool handlers.
18
- */
19
- export function initializeToolContext(manager) {
20
- sessionManager = manager;
21
- }
22
- /**
23
- * Get the session manager, throwing if not initialized.
24
- */
25
- export function getSessionManager() {
26
- if (!sessionManager) {
27
- throw new Error('Tools not initialized. Call initializeToolContext() first.');
28
- }
29
- return sessionManager;
30
- }
31
- // ---------------------------------------------------------------------------
32
- // Snapshot Store Singleton
33
- // ---------------------------------------------------------------------------
34
- const snapshotStore = new SnapshotStore();
35
- /**
36
- * Get the shared snapshot store instance.
37
- */
38
- export function getSnapshotStore() {
39
- return snapshotStore;
40
- }
41
9
  // ---------------------------------------------------------------------------
42
10
  // Page Resolution
43
11
  // ---------------------------------------------------------------------------
@@ -53,6 +21,9 @@ export function resolveExistingPage(session, page_id) {
53
21
  session.touchPage(handle.page_id);
54
22
  return handle;
55
23
  }
24
+ // ---------------------------------------------------------------------------
25
+ // CDP Session Health
26
+ // ---------------------------------------------------------------------------
56
27
  /**
57
28
  * Ensure CDP session is healthy, attempting repair if needed.
58
29
  * Call this before any CDP operation to auto-repair dead sessions.
@@ -76,44 +47,4 @@ export async function ensureCdpSession(session, handle) {
76
47
  runtime_health: createRecoveredCdpRuntime('HEALTHY'),
77
48
  };
78
49
  }
79
- // ---------------------------------------------------------------------------
80
- // Snapshot Resolution
81
- // ---------------------------------------------------------------------------
82
- /**
83
- * Require snapshot for a page, throwing a consistent error if missing.
84
- */
85
- export function requireSnapshot(pageId) {
86
- const snap = snapshotStore.getByPageId(pageId);
87
- if (!snap) {
88
- throw new SnapshotRequiredError(pageId);
89
- }
90
- return snap;
91
- }
92
- // ---------------------------------------------------------------------------
93
- // Element Resolution
94
- // ---------------------------------------------------------------------------
95
- /**
96
- * Resolve element by eid for action tools.
97
- * Looks up element in registry and finds corresponding node in snapshot.
98
- * Includes proactive staleness detection before CDP interaction.
99
- *
100
- * @throws {ElementNotFoundError} If eid not found in registry
101
- * @throws {StaleElementError} If eid reference is stale or element not in current snapshot
102
- */
103
- export function resolveElementByEid(pageId, eid, snapshot) {
104
- const stateManager = getStateManager(pageId);
105
- const registry = stateManager.getElementRegistry();
106
- const elementRef = registry.getByEid(eid);
107
- if (!elementRef) {
108
- throw new ElementNotFoundError(eid);
109
- }
110
- if (registry.isStale(eid)) {
111
- throw new StaleElementError(eid);
112
- }
113
- const node = snapshot.nodes.find((n) => n.backend_node_id === elementRef.ref.backend_node_id);
114
- if (!node) {
115
- throw new StaleElementError(eid);
116
- }
117
- return node;
118
- }
119
50
  //# sourceMappingURL=tool-context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-context.js","sourceRoot":"","sources":["../../../src/tools/tool-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-context.js","sourceRoot":"","sources":["../../../src/tools/tool-context.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAG3F,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAuB,EACvB,OAA2B;IAE3B,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC,CAAC,6CAA6C,CACvF,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAuB,EACvB,MAAkB;IAElB,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;YACtD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,EAAE,CAAC;QAC9E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CACV,mCAAmC,MAAM,CAAC,OAAO,KAAK,OAAO,qBAAqB,CACnF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,mCAAmC,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC;IACrF,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjE,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,IAAI;QACf,cAAc,EAAE,yBAAyB,CAAC,SAAS,CAAC;KACrD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Tool Context Types
3
+ *
4
+ * Defines the ToolContext interface that all tool handlers receive as a parameter.
5
+ * This decouples tool handlers from global singletons, enabling multi-tenancy
6
+ * where each session has its own isolated context.
7
+ *
8
+ * @module tools/tool-context.types
9
+ */
10
+ import type { SessionManager } from '../browser/session-manager.js';
11
+ import type { PageHandle } from '../browser/page-registry.js';
12
+ import type { BaseSnapshot, ReadableNode } from '../snapshot/snapshot.types.js';
13
+ import type { SnapshotStore } from '../snapshot/snapshot-store.js';
14
+ import type { StateManager } from '../state/state-manager.js';
15
+ import type { DependencyTracker } from '../form/dependency-tracker.js';
16
+ import type { ObservationAccumulator } from '../observation/observation-accumulator.js';
17
+ import type { RuntimeHealth } from '../state/health.types.js';
18
+ import type { BrowserSessionConfig } from '../browser/browser-session-config.js';
19
+ /**
20
+ * Result of ensuring a CDP session is healthy.
21
+ */
22
+ export interface CdpSessionResult {
23
+ handle: PageHandle;
24
+ recovered: boolean;
25
+ runtime_health: RuntimeHealth;
26
+ }
27
+ /**
28
+ * Result of capturing a snapshot with recovery.
29
+ */
30
+ export interface SnapshotCaptureResult {
31
+ snapshot: BaseSnapshot;
32
+ handle: PageHandle;
33
+ runtime_health: RuntimeHealth;
34
+ }
35
+ /**
36
+ * Context interface for tool handler execution.
37
+ *
38
+ * Provides all per-session state that tool handlers need.
39
+ * Replaces module-level singletons with an injectable context object.
40
+ *
41
+ * In single-tenant (stdio) mode, a DefaultToolContext wraps the existing singletons.
42
+ * In multi-tenant (HTTP) mode, a SessionController implements this interface directly.
43
+ */
44
+ export interface ToolContext {
45
+ /** Unique session identifier */
46
+ readonly sessionId: string;
47
+ /**
48
+ * Ensure the session's browser is ready.
49
+ * Lazily launches/connects based on the session's BrowserSessionConfig.
50
+ * Idempotent — returns immediately if already running.
51
+ */
52
+ ensureBrowser(): Promise<void>;
53
+ /**
54
+ * Set the browser configuration for this session.
55
+ * Must be called before the browser is launched/connected.
56
+ * @throws Error if browser is already running
57
+ */
58
+ setBrowserConfig(config: BrowserSessionConfig): void;
59
+ /**
60
+ * Get the current browser configuration for this session.
61
+ *
62
+ * Returns the desired session-level configuration, not live browser metadata.
63
+ */
64
+ getBrowserConfig(): BrowserSessionConfig;
65
+ /**
66
+ * Check if browser configuration can be changed.
67
+ * Returns true if no browser is running (allows config before launch or after crash).
68
+ */
69
+ canReconfigure(): boolean;
70
+ /**
71
+ * Shut down the current browser and clear session state so the browser
72
+ * can be reconfigured (e.g., switch from a launched browser to auto_connect).
73
+ * After this call, canReconfigure() returns true.
74
+ */
75
+ resetBrowser(): Promise<void>;
76
+ /**
77
+ * Resolve page_id to a PageHandle, returning undefined if not found.
78
+ */
79
+ resolvePage(pageId?: string): PageHandle | undefined;
80
+ /**
81
+ * Resolve page_id to a PageHandle, creating a new page if needed.
82
+ */
83
+ resolvePageOrCreate(pageId?: string): Promise<PageHandle>;
84
+ /**
85
+ * Resolve page_id to a PageHandle, throwing if not found.
86
+ * Also touches the page to mark it as MRU.
87
+ */
88
+ resolveExistingPage(pageId?: string): PageHandle;
89
+ /**
90
+ * Touch a page to mark it as most recently used.
91
+ */
92
+ touchPage(pageId: string): void;
93
+ /**
94
+ * Close a page and clean up its resources.
95
+ */
96
+ closePage(pageId: string): Promise<boolean>;
97
+ /**
98
+ * Sync with browser context to pick up unregistered pages.
99
+ * Returns all registered pages after sync.
100
+ */
101
+ syncPages(): Promise<PageHandle[]>;
102
+ /**
103
+ * Navigate a page to a URL.
104
+ */
105
+ navigateTo(pageId: string, url: string): Promise<void>;
106
+ /** Get the session manager for browser lifecycle operations. */
107
+ getSessionManager(): SessionManager;
108
+ /** Get the snapshot store for this session. */
109
+ getSnapshotStore(): SnapshotStore;
110
+ /** Get or create a state manager for a specific page. */
111
+ getStateManager(pageId: string): StateManager;
112
+ /** Remove the state manager for a page (on page close). */
113
+ removeStateManager(pageId: string): void;
114
+ /** Clear all state managers (on session close). */
115
+ clearAllStateManagers(): void;
116
+ /** Get the dependency tracker for this session. */
117
+ getDependencyTracker(): DependencyTracker;
118
+ /** Get the observation accumulator for this session. */
119
+ getObservationAccumulator(): ObservationAccumulator;
120
+ /**
121
+ * Ensure CDP session is healthy, attempting repair if needed.
122
+ * Call this before any CDP operation to auto-repair dead sessions.
123
+ */
124
+ ensureCdpSession(handle: PageHandle): Promise<CdpSessionResult>;
125
+ /**
126
+ * Capture a snapshot with stabilization and CDP recovery when empty.
127
+ */
128
+ captureSnapshotWithRecovery(handle: PageHandle, pageId: string): Promise<SnapshotCaptureResult>;
129
+ /**
130
+ * Require a snapshot for a page, throwing if none exists.
131
+ */
132
+ requireSnapshot(pageId: string): BaseSnapshot;
133
+ /**
134
+ * Resolve an element by eid from the snapshot.
135
+ * Includes proactive staleness detection.
136
+ *
137
+ * @throws {ElementNotFoundError} If eid not found in registry
138
+ * @throws {StaleElementError} If eid reference is stale
139
+ */
140
+ resolveElementByEid(pageId: string, eid: string, snapshot: BaseSnapshot): ReadableNode;
141
+ /**
142
+ * Close the session and clean up all resources (browser, snapshots, state, etc.).
143
+ * Implementations should be idempotent — repeated calls are safe no-ops.
144
+ */
145
+ close(): Promise<void>;
146
+ }
147
+ //# sourceMappingURL=tool-context.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-context.types.d.ts","sourceRoot":"","sources":["../../../src/tools/tool-context.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Tool Context Types
3
+ *
4
+ * Defines the ToolContext interface that all tool handlers receive as a parameter.
5
+ * This decouples tool handlers from global singletons, enabling multi-tenancy
6
+ * where each session has its own isolated context.
7
+ *
8
+ * @module tools/tool-context.types
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=tool-context.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-context.types.js","sourceRoot":"","sources":["../../../src/tools/tool-context.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Tool Registration
3
+ *
4
+ * Extracts all 25 MCP tool registrations into a reusable function.
5
+ * Used by both stdio (index.ts) and HTTP (http-gateway.ts) entry points.
6
+ */
7
+ import type { ToolContext } from './tool-context.types.js';
8
+ import type { ToolRegistrar } from '../server/tool-registrar.types.js';
9
+ export type { ToolRegistrar } from '../server/tool-registrar.types.js';
10
+ /**
11
+ * Context resolver function type.
12
+ * Returns a ToolContext for the current request.
13
+ */
14
+ export type ContextResolver = () => ToolContext | Promise<ToolContext>;
15
+ /**
16
+ * Register all browser automation tools on an MCP server.
17
+ *
18
+ * Browser initialization is session-scoped: each ToolContext owns its own
19
+ * SessionManager and lazily launches/connects via ctx.ensureBrowser().
20
+ *
21
+ * @param server - The MCP server instance
22
+ * @param resolveCtx - Function that returns the ToolContext for the current request
23
+ */
24
+ export declare function registerAllTools(server: ToolRegistrar, resolveCtx: ContextResolver): void;
25
+ //# sourceMappingURL=tool-registration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registration.d.ts","sourceRoot":"","sources":["../../../src/tools/tool-registration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAEvE,YAAY,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AA8CvE;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAKvE;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,GAAG,IAAI,CAoTzF"}
@@ -0,0 +1,195 @@
1
+ /**
2
+ * Tool Registration
3
+ *
4
+ * Extracts all 25 MCP tool registrations into a reusable function.
5
+ * Used by both stdio (index.ts) and HTTP (http-gateway.ts) entry points.
6
+ */
7
+ // Import all tool handlers
8
+ import { listPages, closePage } from './navigation-tools.js';
9
+ import { navigate, goBack, goForward, reload } from './navigation-tools.js';
10
+ import { captureSnapshot, findElements, getNodeDetails, scrollElementIntoView, scrollPage, } from './observation-tools.js';
11
+ import { click, type, press, select, hover } from './interaction-tools.js';
12
+ import { drag, wheel, takeScreenshot } from './viewport-tools.js';
13
+ import { inspectCanvas } from './canvas-tools.js';
14
+ import { getFormUnderstanding, getFieldContext } from './form-tools.js';
15
+ import { readPage } from './readability-tools.js';
16
+ import { listNetworkCalls, searchNetworkCalls } from './network-tools.js';
17
+ // Import all input schemas
18
+ import { ListPagesInputSchema, ClosePageInputSchema, NavigateInputSchema, GoBackInputSchema, GoForwardInputSchema, ReloadInputSchema, CaptureSnapshotInputSchema, FindElementsInputSchema, GetNodeDetailsInputSchema, ScrollElementIntoViewInputSchemaBase, ScrollPageInputSchema, ClickInputSchemaBase, TypeInputSchemaBase, PressInputSchema, SelectInputSchemaBase, HoverInputSchemaBase, DragInputSchemaBase, WheelInputSchemaBase, TakeScreenshotInputSchemaBase, InspectCanvasInputSchemaBase, ReadPageInputSchema, } from './tool-schemas.js';
19
+ import { GetFormUnderstandingInputSchema, GetFieldContextInputSchema } from './form-tools.js';
20
+ import { ListNetworkCallsInputSchema, SearchNetworkCallsInputSchema } from './tool-schemas.js';
21
+ /** Tools that should not trigger lazy browser initialization */
22
+ const SKIP_BROWSER_INIT = new Set(['close_page', 'list_pages', 'navigate']);
23
+ /**
24
+ * Register all browser automation tools on an MCP server.
25
+ *
26
+ * Browser initialization is session-scoped: each ToolContext owns its own
27
+ * SessionManager and lazily launches/connects via ctx.ensureBrowser().
28
+ *
29
+ * @param server - The MCP server instance
30
+ * @param resolveCtx - Function that returns the ToolContext for the current request
31
+ */
32
+ export function registerAllTools(server, resolveCtx) {
33
+ // Helper: resolve context first, then ensure browser, then run handler.
34
+ // Context resolution is cheap (returns existing SessionController),
35
+ // so it's safe to resolve before the browser is running.
36
+ function wrap(handler, toolName) {
37
+ return async (input) => {
38
+ const ctx = await resolveCtx();
39
+ if (!SKIP_BROWSER_INIT.has(toolName ?? '')) {
40
+ await ctx.ensureBrowser();
41
+ }
42
+ return handler(input, ctx);
43
+ };
44
+ }
45
+ // ============================================================================
46
+ // SESSION TOOLS
47
+ // ============================================================================
48
+ server.registerTool('list_pages', {
49
+ title: 'List Pages',
50
+ description: 'List all open browser pages with their page_id, URL, and title.',
51
+ inputSchema: ListPagesInputSchema.shape,
52
+ }, wrap(listPages, 'list_pages'));
53
+ server.registerTool('close_page', {
54
+ title: 'Close Page',
55
+ description: 'Close a browser tab. Use list_pages first to get the page_id.',
56
+ inputSchema: ClosePageInputSchema.shape,
57
+ }, wrap(closePage, 'close_page'));
58
+ // ============================================================================
59
+ // NAVIGATION TOOLS
60
+ // ============================================================================
61
+ server.registerTool('navigate', {
62
+ title: 'Navigate',
63
+ description: 'Go to a URL. Returns page snapshot with interactive elements.',
64
+ inputSchema: NavigateInputSchema.shape,
65
+ }, wrap(navigate));
66
+ server.registerTool('go_back', {
67
+ title: 'Go Back',
68
+ description: 'Go back one page in browser history.',
69
+ inputSchema: GoBackInputSchema.shape,
70
+ }, wrap(goBack));
71
+ server.registerTool('go_forward', {
72
+ title: 'Go Forward',
73
+ description: 'Go forward one page in browser history.',
74
+ inputSchema: GoForwardInputSchema.shape,
75
+ }, wrap(goForward));
76
+ server.registerTool('reload', {
77
+ title: 'Reload',
78
+ description: 'Refresh the current page.',
79
+ inputSchema: ReloadInputSchema.shape,
80
+ }, wrap(reload));
81
+ server.registerTool('snapshot', {
82
+ title: 'Snapshot',
83
+ description: 'Re-capture the page state without performing any action. Use when the page may have changed on its own (timers, live updates, animations).',
84
+ inputSchema: CaptureSnapshotInputSchema.shape,
85
+ }, wrap(captureSnapshot));
86
+ // ============================================================================
87
+ // OBSERVATION TOOLS
88
+ // ============================================================================
89
+ server.registerTool('find', {
90
+ title: 'Find',
91
+ description: 'Search for interactive elements OR read page text content. Filter by `kind` (button, link, textbox, canvas), `label` (case-insensitive substring match), or `region` (header, main, footer).',
92
+ inputSchema: FindElementsInputSchema.shape,
93
+ }, wrap(findElements));
94
+ server.registerTool('get_element', {
95
+ title: 'Get Element',
96
+ description: 'Get complete details for one element: exact position, size, state, attributes.',
97
+ inputSchema: GetNodeDetailsInputSchema.shape,
98
+ }, wrap(getNodeDetails));
99
+ server.registerTool('screenshot', {
100
+ title: 'Screenshot',
101
+ description: 'Capture a screenshot of the current page or a specific element.',
102
+ inputSchema: TakeScreenshotInputSchemaBase.shape,
103
+ }, wrap(takeScreenshot));
104
+ // ============================================================================
105
+ // INTERACTION TOOLS
106
+ // ============================================================================
107
+ server.registerTool('scroll_to', {
108
+ title: 'Scroll To',
109
+ description: 'Scroll until a specific element is visible in the viewport.',
110
+ inputSchema: ScrollElementIntoViewInputSchemaBase.shape,
111
+ }, wrap(scrollElementIntoView));
112
+ server.registerTool('scroll', {
113
+ title: 'Scroll',
114
+ description: 'Scroll the viewport up or down by pixels.',
115
+ inputSchema: ScrollPageInputSchema.shape,
116
+ }, wrap(scrollPage));
117
+ server.registerTool('click', {
118
+ title: 'Click Element',
119
+ description: 'Click an element or at viewport coordinates.',
120
+ inputSchema: ClickInputSchemaBase.shape,
121
+ }, wrap(click));
122
+ server.registerTool('type', {
123
+ title: 'Type Text',
124
+ description: 'Type text into an input field or text area.',
125
+ inputSchema: TypeInputSchemaBase.shape,
126
+ }, wrap(type));
127
+ server.registerTool('press', {
128
+ title: 'Press Key',
129
+ description: 'Press a keyboard key with optional modifiers.',
130
+ inputSchema: PressInputSchema.shape,
131
+ }, wrap(press));
132
+ server.registerTool('select', {
133
+ title: 'Select Option',
134
+ description: 'Choose an option from a dropdown menu by value or visible text.',
135
+ inputSchema: SelectInputSchemaBase.shape,
136
+ }, wrap(select));
137
+ server.registerTool('hover', {
138
+ title: 'Hover Element',
139
+ description: 'Move mouse over an element without clicking. Triggers hover menus and tooltips.',
140
+ inputSchema: HoverInputSchemaBase.shape,
141
+ }, wrap(hover));
142
+ server.registerTool('drag', {
143
+ title: 'Drag',
144
+ description: 'Drag from one point to another.',
145
+ inputSchema: DragInputSchemaBase.shape,
146
+ }, wrap(drag));
147
+ server.registerTool('wheel', {
148
+ title: 'Wheel',
149
+ description: 'Dispatch a mouse wheel event at specific coordinates. Use for scroll-to-zoom (with Control modifier) or horizontal scrolling.',
150
+ inputSchema: WheelInputSchemaBase.shape,
151
+ }, wrap(wheel));
152
+ // ============================================================================
153
+ // CANVAS INSPECTION TOOLS
154
+ // ============================================================================
155
+ server.registerTool('inspect_canvas', {
156
+ title: 'Inspect Canvas',
157
+ description: 'Analyze a canvas element: auto-detect the rendering library, query its scene graph, and return an annotated screenshot with coordinate grid overlay.',
158
+ inputSchema: InspectCanvasInputSchemaBase.shape,
159
+ }, wrap(inspectCanvas));
160
+ // ============================================================================
161
+ // FORM UNDERSTANDING TOOLS
162
+ // ============================================================================
163
+ server.registerTool('get_form', {
164
+ title: 'Get Form',
165
+ description: 'Analyze all forms on the page: fields, required inputs, validation rules, and field dependencies.',
166
+ inputSchema: GetFormUnderstandingInputSchema.shape,
167
+ }, wrap(getFormUnderstanding));
168
+ server.registerTool('get_field', {
169
+ title: 'Get Field',
170
+ description: 'Get detailed info about one form field: purpose, valid input formats, dependencies, and suggested values.',
171
+ inputSchema: GetFieldContextInputSchema.shape,
172
+ }, wrap(getFieldContext));
173
+ // ============================================================================
174
+ // READABILITY TOOLS
175
+ // ============================================================================
176
+ server.registerTool('read_page', {
177
+ title: 'Read Page',
178
+ description: 'Extract the main readable content from the page, removing navigation, ads, and clutter. Uses Mozilla Readability (Firefox Reader View engine). Best for articles, blog posts, documentation, and content-heavy pages.',
179
+ inputSchema: ReadPageInputSchema.shape,
180
+ }, wrap(readPage));
181
+ // ============================================================================
182
+ // NETWORK TOOLS
183
+ // ============================================================================
184
+ server.registerTool('list_network_calls', {
185
+ title: 'List Network Calls',
186
+ description: 'List HTTP requests and responses made by the page. Filter by resource type, method, status code, or URL pattern. Supports pagination.',
187
+ inputSchema: ListNetworkCallsInputSchema.shape,
188
+ }, wrap(listNetworkCalls));
189
+ server.registerTool('search_network_calls', {
190
+ title: 'Search Network Calls',
191
+ description: 'Search network calls by URL pattern (substring or regex). Returns matching requests with optional headers and body details.',
192
+ inputSchema: SearchNetworkCallsInputSchema.shape,
193
+ }, wrap(searchNetworkCalls));
194
+ }
195
+ //# sourceMappingURL=tool-registration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registration.js","sourceRoot":"","sources":["../../../src/tools/tool-registration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,2BAA2B;AAC3B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EACL,eAAe,EACf,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,UAAU,GACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE1E,2BAA2B;AAC3B,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,0BAA0B,EAC1B,uBAAuB,EACvB,yBAAyB,EACzB,oCAAoC,EACpC,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,6BAA6B,EAC7B,4BAA4B,EAC5B,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,+BAA+B,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAC9F,OAAO,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AAQ/F,gEAAgE;AAChE,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;AAE5E;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAqB,EAAE,UAA2B;IACjF,wEAAwE;IACxE,oEAAoE;IACpE,yDAAyD;IACzD,SAAS,IAAI,CACX,OAAuD,EACvD,QAAiB;QAEjB,OAAO,KAAK,EAAE,KAAQ,EAAE,EAAE;YACxB,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;YAC/B,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC3C,MAAM,GAAG,CAAC,aAAa,EAAE,CAAC;YAC5B,CAAC;YACD,OAAO,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC7B,CAAC,CAAC;IACJ,CAAC;IAED,+EAA+E;IAC/E,gBAAgB;IAChB,+EAA+E;IAE/E,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,iEAAiE;QAC9E,WAAW,EAAE,oBAAoB,CAAC,KAAK;KACxC,EACD,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAC9B,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,+DAA+D;QAC5E,WAAW,EAAE,oBAAoB,CAAC,KAAK;KACxC,EACD,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAC9B,CAAC;IAEF,+EAA+E;IAC/E,mBAAmB;IACnB,+EAA+E;IAE/E,MAAM,CAAC,YAAY,CACjB,UAAU,EACV;QACE,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,+DAA+D;QAC5E,WAAW,EAAE,mBAAmB,CAAC,KAAK;KACvC,EACD,IAAI,CAAC,QAAQ,CAAC,CACf,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,SAAS,EACT;QACE,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,sCAAsC;QACnD,WAAW,EAAE,iBAAiB,CAAC,KAAK;KACrC,EACD,IAAI,CAAC,MAAM,CAAC,CACb,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,yCAAyC;QACtD,WAAW,EAAE,oBAAoB,CAAC,KAAK;KACxC,EACD,IAAI,CAAC,SAAS,CAAC,CAChB,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,QAAQ,EACR;QACE,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,2BAA2B;QACxC,WAAW,EAAE,iBAAiB,CAAC,KAAK;KACrC,EACD,IAAI,CAAC,MAAM,CAAC,CACb,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,UAAU,EACV;QACE,KAAK,EAAE,UAAU;QACjB,WAAW,EACT,4IAA4I;QAC9I,WAAW,EAAE,0BAA0B,CAAC,KAAK;KAC9C,EACD,IAAI,CAAC,eAAe,CAAC,CACtB,CAAC;IAEF,+EAA+E;IAC/E,oBAAoB;IACpB,+EAA+E;IAE/E,MAAM,CAAC,YAAY,CACjB,MAAM,EACN;QACE,KAAK,EAAE,MAAM;QACb,WAAW,EACT,8LAA8L;QAChM,WAAW,EAAE,uBAAuB,CAAC,KAAK;KAC3C,EACD,IAAI,CAAC,YAAY,CAAC,CACnB,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,gFAAgF;QAC7F,WAAW,EAAE,yBAAyB,CAAC,KAAK;KAC7C,EACD,IAAI,CAAC,cAAc,CAAC,CACrB,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,iEAAiE;QAC9E,WAAW,EAAE,6BAA6B,CAAC,KAAK;KACjD,EACD,IAAI,CAAC,cAAc,CAAC,CACrB,CAAC;IAEF,+EAA+E;IAC/E,oBAAoB;IACpB,+EAA+E;IAE/E,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,6DAA6D;QAC1E,WAAW,EAAE,oCAAoC,CAAC,KAAK;KACxD,EACD,IAAI,CAAC,qBAAqB,CAAC,CAC5B,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,QAAQ,EACR;QACE,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,2CAA2C;QACxD,WAAW,EAAE,qBAAqB,CAAC,KAAK;KACzC,EACD,IAAI,CAAC,UAAU,CAAC,CACjB,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,OAAO,EACP;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,8CAA8C;QAC3D,WAAW,EAAE,oBAAoB,CAAC,KAAK;KACxC,EACD,IAAI,CAAC,KAAK,CAAC,CACZ,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,MAAM,EACN;QACE,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,6CAA6C;QAC1D,WAAW,EAAE,mBAAmB,CAAC,KAAK;KACvC,EACD,IAAI,CAAC,IAAI,CAAC,CACX,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,OAAO,EACP;QACE,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,+CAA+C;QAC5D,WAAW,EAAE,gBAAgB,CAAC,KAAK;KACpC,EACD,IAAI,CAAC,KAAK,CAAC,CACZ,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,QAAQ,EACR;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,iEAAiE;QAC9E,WAAW,EAAE,qBAAqB,CAAC,KAAK;KACzC,EACD,IAAI,CAAC,MAAM,CAAC,CACb,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,OAAO,EACP;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,iFAAiF;QACnF,WAAW,EAAE,oBAAoB,CAAC,KAAK;KACxC,EACD,IAAI,CAAC,KAAK,CAAC,CACZ,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,MAAM,EACN;QACE,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,iCAAiC;QAC9C,WAAW,EAAE,mBAAmB,CAAC,KAAK;KACvC,EACD,IAAI,CAAC,IAAI,CAAC,CACX,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,OAAO,EACP;QACE,KAAK,EAAE,OAAO;QACd,WAAW,EACT,+HAA+H;QACjI,WAAW,EAAE,oBAAoB,CAAC,KAAK;KACxC,EACD,IAAI,CAAC,KAAK,CAAC,CACZ,CAAC;IAEF,+EAA+E;IAC/E,0BAA0B;IAC1B,+EAA+E;IAE/E,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,sJAAsJ;QACxJ,WAAW,EAAE,4BAA4B,CAAC,KAAK;KAChD,EACD,IAAI,CAAC,aAAa,CAAC,CACpB,CAAC;IAEF,+EAA+E;IAC/E,2BAA2B;IAC3B,+EAA+E;IAE/E,MAAM,CAAC,YAAY,CACjB,UAAU,EACV;QACE,KAAK,EAAE,UAAU;QACjB,WAAW,EACT,mGAAmG;QACrG,WAAW,EAAE,+BAA+B,CAAC,KAAK;KACnD,EACD,IAAI,CAAC,oBAAoB,CAAC,CAC3B,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,KAAK,EAAE,WAAW;QAClB,WAAW,EACT,2GAA2G;QAC7G,WAAW,EAAE,0BAA0B,CAAC,KAAK;KAC9C,EACD,IAAI,CAAC,eAAe,CAAC,CACtB,CAAC;IAEF,+EAA+E;IAC/E,oBAAoB;IACpB,+EAA+E;IAE/E,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,KAAK,EAAE,WAAW;QAClB,WAAW,EACT,uNAAuN;QACzN,WAAW,EAAE,mBAAmB,CAAC,KAAK;KACvC,EACD,IAAI,CAAC,QAAQ,CAAC,CACf,CAAC;IAEF,+EAA+E;IAC/E,gBAAgB;IAChB,+EAA+E;IAE/E,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,uIAAuI;QACzI,WAAW,EAAE,2BAA2B,CAAC,KAAK;KAC/C,EACD,IAAI,CAAC,gBAAgB,CAAC,CACvB,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EACT,6HAA6H;QAC/H,WAAW,EAAE,6BAA6B,CAAC,KAAK;KACjD,EACD,IAAI,CAAC,kBAAkB,CAAC,CACzB,CAAC;AACJ,CAAC"}