@metamask/client-mcp-core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (486) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/LICENSE +6 -0
  3. package/LICENSE.APACHE2 +201 -0
  4. package/LICENSE.MIT +21 -0
  5. package/README.md +1459 -0
  6. package/dist/capabilities/context.cjs +34 -0
  7. package/dist/capabilities/context.cjs.map +1 -0
  8. package/dist/capabilities/context.d.cts +101 -0
  9. package/dist/capabilities/context.d.cts.map +1 -0
  10. package/dist/capabilities/context.d.mts +101 -0
  11. package/dist/capabilities/context.d.mts.map +1 -0
  12. package/dist/capabilities/context.mjs +29 -0
  13. package/dist/capabilities/context.mjs.map +1 -0
  14. package/dist/capabilities/index.cjs +18 -0
  15. package/dist/capabilities/index.cjs.map +1 -0
  16. package/dist/capabilities/index.d.cts +3 -0
  17. package/dist/capabilities/index.d.cts.map +1 -0
  18. package/dist/capabilities/index.d.mts +3 -0
  19. package/dist/capabilities/index.d.mts.map +1 -0
  20. package/dist/capabilities/index.mjs +2 -0
  21. package/dist/capabilities/index.mjs.map +1 -0
  22. package/dist/capabilities/types.cjs +3 -0
  23. package/dist/capabilities/types.cjs.map +1 -0
  24. package/dist/capabilities/types.d.cts +152 -0
  25. package/dist/capabilities/types.d.cts.map +1 -0
  26. package/dist/capabilities/types.d.mts +152 -0
  27. package/dist/capabilities/types.d.mts.map +1 -0
  28. package/dist/capabilities/types.mjs +2 -0
  29. package/dist/capabilities/types.mjs.map +1 -0
  30. package/dist/index.cjs +59 -0
  31. package/dist/index.cjs.map +1 -0
  32. package/dist/index.d.cts +33 -0
  33. package/dist/index.d.cts.map +1 -0
  34. package/dist/index.d.mts +33 -0
  35. package/dist/index.d.mts.map +1 -0
  36. package/dist/index.mjs +43 -0
  37. package/dist/index.mjs.map +1 -0
  38. package/dist/launcher/console-error-buffer.cjs +72 -0
  39. package/dist/launcher/console-error-buffer.cjs.map +1 -0
  40. package/dist/launcher/console-error-buffer.d.cts +43 -0
  41. package/dist/launcher/console-error-buffer.d.cts.map +1 -0
  42. package/dist/launcher/console-error-buffer.d.mts +43 -0
  43. package/dist/launcher/console-error-buffer.d.mts.map +1 -0
  44. package/dist/launcher/console-error-buffer.mjs +68 -0
  45. package/dist/launcher/console-error-buffer.mjs.map +1 -0
  46. package/dist/launcher/extension-id-resolver.cjs +177 -0
  47. package/dist/launcher/extension-id-resolver.cjs.map +1 -0
  48. package/dist/launcher/extension-id-resolver.d.cts +32 -0
  49. package/dist/launcher/extension-id-resolver.d.cts.map +1 -0
  50. package/dist/launcher/extension-id-resolver.d.mts +32 -0
  51. package/dist/launcher/extension-id-resolver.d.mts.map +1 -0
  52. package/dist/launcher/extension-id-resolver.mjs +173 -0
  53. package/dist/launcher/extension-id-resolver.mjs.map +1 -0
  54. package/dist/launcher/extension-readiness.cjs +50 -0
  55. package/dist/launcher/extension-readiness.cjs.map +1 -0
  56. package/dist/launcher/extension-readiness.d.cts +37 -0
  57. package/dist/launcher/extension-readiness.d.cts.map +1 -0
  58. package/dist/launcher/extension-readiness.d.mts +37 -0
  59. package/dist/launcher/extension-readiness.d.mts.map +1 -0
  60. package/dist/launcher/extension-readiness.mjs +43 -0
  61. package/dist/launcher/extension-readiness.mjs.map +1 -0
  62. package/dist/launcher/index.cjs +21 -0
  63. package/dist/launcher/index.cjs.map +1 -0
  64. package/dist/launcher/index.d.cts +5 -0
  65. package/dist/launcher/index.d.cts.map +1 -0
  66. package/dist/launcher/index.d.mts +5 -0
  67. package/dist/launcher/index.d.mts.map +1 -0
  68. package/dist/launcher/index.mjs +5 -0
  69. package/dist/launcher/index.mjs.map +1 -0
  70. package/dist/launcher/retry.cjs +35 -0
  71. package/dist/launcher/retry.cjs.map +1 -0
  72. package/dist/launcher/retry.d.cts +20 -0
  73. package/dist/launcher/retry.d.cts.map +1 -0
  74. package/dist/launcher/retry.d.mts +20 -0
  75. package/dist/launcher/retry.d.mts.map +1 -0
  76. package/dist/launcher/retry.mjs +31 -0
  77. package/dist/launcher/retry.mjs.map +1 -0
  78. package/dist/mcp-server/constants.cjs +22 -0
  79. package/dist/mcp-server/constants.cjs.map +1 -0
  80. package/dist/mcp-server/constants.d.cts +13 -0
  81. package/dist/mcp-server/constants.d.cts.map +1 -0
  82. package/dist/mcp-server/constants.d.mts +13 -0
  83. package/dist/mcp-server/constants.d.mts.map +1 -0
  84. package/dist/mcp-server/constants.mjs +19 -0
  85. package/dist/mcp-server/constants.mjs.map +1 -0
  86. package/dist/mcp-server/discovery.cjs +299 -0
  87. package/dist/mcp-server/discovery.cjs.map +1 -0
  88. package/dist/mcp-server/discovery.d.cts +56 -0
  89. package/dist/mcp-server/discovery.d.cts.map +1 -0
  90. package/dist/mcp-server/discovery.d.mts +56 -0
  91. package/dist/mcp-server/discovery.d.mts.map +1 -0
  92. package/dist/mcp-server/discovery.mjs +292 -0
  93. package/dist/mcp-server/discovery.mjs.map +1 -0
  94. package/dist/mcp-server/knowledge-store.cjs +1196 -0
  95. package/dist/mcp-server/knowledge-store.cjs.map +1 -0
  96. package/dist/mcp-server/knowledge-store.d.cts +249 -0
  97. package/dist/mcp-server/knowledge-store.d.cts.map +1 -0
  98. package/dist/mcp-server/knowledge-store.d.mts +249 -0
  99. package/dist/mcp-server/knowledge-store.d.mts.map +1 -0
  100. package/dist/mcp-server/knowledge-store.mjs +1154 -0
  101. package/dist/mcp-server/knowledge-store.mjs.map +1 -0
  102. package/dist/mcp-server/schemas.cjs +433 -0
  103. package/dist/mcp-server/schemas.cjs.map +1 -0
  104. package/dist/mcp-server/schemas.d.cts +557 -0
  105. package/dist/mcp-server/schemas.d.cts.map +1 -0
  106. package/dist/mcp-server/schemas.d.mts +557 -0
  107. package/dist/mcp-server/schemas.d.mts.map +1 -0
  108. package/dist/mcp-server/schemas.mjs +430 -0
  109. package/dist/mcp-server/schemas.mjs.map +1 -0
  110. package/dist/mcp-server/server.cjs +161 -0
  111. package/dist/mcp-server/server.cjs.map +1 -0
  112. package/dist/mcp-server/server.d.cts +24 -0
  113. package/dist/mcp-server/server.d.cts.map +1 -0
  114. package/dist/mcp-server/server.d.mts +24 -0
  115. package/dist/mcp-server/server.d.mts.map +1 -0
  116. package/dist/mcp-server/server.mjs +158 -0
  117. package/dist/mcp-server/server.mjs.map +1 -0
  118. package/dist/mcp-server/session-manager.cjs +53 -0
  119. package/dist/mcp-server/session-manager.cjs.map +1 -0
  120. package/dist/mcp-server/session-manager.d.cts +240 -0
  121. package/dist/mcp-server/session-manager.d.cts.map +1 -0
  122. package/dist/mcp-server/session-manager.d.mts +240 -0
  123. package/dist/mcp-server/session-manager.d.mts.map +1 -0
  124. package/dist/mcp-server/session-manager.mjs +48 -0
  125. package/dist/mcp-server/session-manager.mjs.map +1 -0
  126. package/dist/mcp-server/test-utils/flush-promises.cjs +10 -0
  127. package/dist/mcp-server/test-utils/flush-promises.cjs.map +1 -0
  128. package/dist/mcp-server/test-utils/flush-promises.d.cts +2 -0
  129. package/dist/mcp-server/test-utils/flush-promises.d.cts.map +1 -0
  130. package/dist/mcp-server/test-utils/flush-promises.d.mts +2 -0
  131. package/dist/mcp-server/test-utils/flush-promises.d.mts.map +1 -0
  132. package/dist/mcp-server/test-utils/flush-promises.mjs +7 -0
  133. package/dist/mcp-server/test-utils/flush-promises.mjs.map +1 -0
  134. package/dist/mcp-server/test-utils/index.cjs +13 -0
  135. package/dist/mcp-server/test-utils/index.cjs.map +1 -0
  136. package/dist/mcp-server/test-utils/index.d.cts +4 -0
  137. package/dist/mcp-server/test-utils/index.d.cts.map +1 -0
  138. package/dist/mcp-server/test-utils/index.d.mts +4 -0
  139. package/dist/mcp-server/test-utils/index.d.mts.map +1 -0
  140. package/dist/mcp-server/test-utils/index.mjs +4 -0
  141. package/dist/mcp-server/test-utils/index.mjs.map +1 -0
  142. package/dist/mcp-server/test-utils/mock-factories.cjs +129 -0
  143. package/dist/mcp-server/test-utils/mock-factories.cjs.map +1 -0
  144. package/dist/mcp-server/test-utils/mock-factories.d.cts +89 -0
  145. package/dist/mcp-server/test-utils/mock-factories.d.cts.map +1 -0
  146. package/dist/mcp-server/test-utils/mock-factories.d.mts +89 -0
  147. package/dist/mcp-server/test-utils/mock-factories.d.mts.map +1 -0
  148. package/dist/mcp-server/test-utils/mock-factories.mjs +125 -0
  149. package/dist/mcp-server/test-utils/mock-factories.mjs.map +1 -0
  150. package/dist/mcp-server/test-utils/mock-playwright.cjs +205 -0
  151. package/dist/mcp-server/test-utils/mock-playwright.cjs.map +1 -0
  152. package/dist/mcp-server/test-utils/mock-playwright.d.cts +69 -0
  153. package/dist/mcp-server/test-utils/mock-playwright.d.cts.map +1 -0
  154. package/dist/mcp-server/test-utils/mock-playwright.d.mts +69 -0
  155. package/dist/mcp-server/test-utils/mock-playwright.d.mts.map +1 -0
  156. package/dist/mcp-server/test-utils/mock-playwright.mjs +200 -0
  157. package/dist/mcp-server/test-utils/mock-playwright.mjs.map +1 -0
  158. package/dist/mcp-server/tokenization.cjs +117 -0
  159. package/dist/mcp-server/tokenization.cjs.map +1 -0
  160. package/dist/mcp-server/tokenization.d.cts +22 -0
  161. package/dist/mcp-server/tokenization.d.cts.map +1 -0
  162. package/dist/mcp-server/tokenization.d.mts +22 -0
  163. package/dist/mcp-server/tokenization.d.mts.map +1 -0
  164. package/dist/mcp-server/tokenization.mjs +112 -0
  165. package/dist/mcp-server/tokenization.mjs.map +1 -0
  166. package/dist/mcp-server/tools/batch.cjs +199 -0
  167. package/dist/mcp-server/tools/batch.cjs.map +1 -0
  168. package/dist/mcp-server/tools/batch.d.cts +81 -0
  169. package/dist/mcp-server/tools/batch.d.cts.map +1 -0
  170. package/dist/mcp-server/tools/batch.d.mts +81 -0
  171. package/dist/mcp-server/tools/batch.d.mts.map +1 -0
  172. package/dist/mcp-server/tools/batch.mjs +191 -0
  173. package/dist/mcp-server/tools/batch.mjs.map +1 -0
  174. package/dist/mcp-server/tools/build.cjs +47 -0
  175. package/dist/mcp-server/tools/build.cjs.map +1 -0
  176. package/dist/mcp-server/tools/build.d.cts +22 -0
  177. package/dist/mcp-server/tools/build.d.cts.map +1 -0
  178. package/dist/mcp-server/tools/build.d.mts +22 -0
  179. package/dist/mcp-server/tools/build.d.mts.map +1 -0
  180. package/dist/mcp-server/tools/build.mjs +44 -0
  181. package/dist/mcp-server/tools/build.mjs.map +1 -0
  182. package/dist/mcp-server/tools/cleanup.cjs +20 -0
  183. package/dist/mcp-server/tools/cleanup.cjs.map +1 -0
  184. package/dist/mcp-server/tools/cleanup.d.cts +10 -0
  185. package/dist/mcp-server/tools/cleanup.d.cts.map +1 -0
  186. package/dist/mcp-server/tools/cleanup.d.mts +10 -0
  187. package/dist/mcp-server/tools/cleanup.d.mts.map +1 -0
  188. package/dist/mcp-server/tools/cleanup.mjs +17 -0
  189. package/dist/mcp-server/tools/cleanup.mjs.map +1 -0
  190. package/dist/mcp-server/tools/clipboard.cjs +100 -0
  191. package/dist/mcp-server/tools/clipboard.cjs.map +1 -0
  192. package/dist/mcp-server/tools/clipboard.d.cts +16 -0
  193. package/dist/mcp-server/tools/clipboard.d.cts.map +1 -0
  194. package/dist/mcp-server/tools/clipboard.d.mts +16 -0
  195. package/dist/mcp-server/tools/clipboard.d.mts.map +1 -0
  196. package/dist/mcp-server/tools/clipboard.mjs +97 -0
  197. package/dist/mcp-server/tools/clipboard.mjs.map +1 -0
  198. package/dist/mcp-server/tools/context.cjs +66 -0
  199. package/dist/mcp-server/tools/context.cjs.map +1 -0
  200. package/dist/mcp-server/tools/context.d.cts +35 -0
  201. package/dist/mcp-server/tools/context.d.cts.map +1 -0
  202. package/dist/mcp-server/tools/context.d.mts +35 -0
  203. package/dist/mcp-server/tools/context.d.mts.map +1 -0
  204. package/dist/mcp-server/tools/context.mjs +62 -0
  205. package/dist/mcp-server/tools/context.mjs.map +1 -0
  206. package/dist/mcp-server/tools/definitions.cjs +463 -0
  207. package/dist/mcp-server/tools/definitions.cjs.map +1 -0
  208. package/dist/mcp-server/tools/definitions.d.cts +97 -0
  209. package/dist/mcp-server/tools/definitions.d.cts.map +1 -0
  210. package/dist/mcp-server/tools/definitions.d.mts +97 -0
  211. package/dist/mcp-server/tools/definitions.d.mts.map +1 -0
  212. package/dist/mcp-server/tools/definitions.mjs +451 -0
  213. package/dist/mcp-server/tools/definitions.mjs.map +1 -0
  214. package/dist/mcp-server/tools/discovery-tools.cjs +162 -0
  215. package/dist/mcp-server/tools/discovery-tools.cjs.map +1 -0
  216. package/dist/mcp-server/tools/discovery-tools.d.cts +26 -0
  217. package/dist/mcp-server/tools/discovery-tools.d.cts.map +1 -0
  218. package/dist/mcp-server/tools/discovery-tools.d.mts +26 -0
  219. package/dist/mcp-server/tools/discovery-tools.d.mts.map +1 -0
  220. package/dist/mcp-server/tools/discovery-tools.mjs +157 -0
  221. package/dist/mcp-server/tools/discovery-tools.mjs.map +1 -0
  222. package/dist/mcp-server/tools/error-classification.cjs +296 -0
  223. package/dist/mcp-server/tools/error-classification.cjs.map +1 -0
  224. package/dist/mcp-server/tools/error-classification.d.cts +135 -0
  225. package/dist/mcp-server/tools/error-classification.d.cts.map +1 -0
  226. package/dist/mcp-server/tools/error-classification.d.mts +135 -0
  227. package/dist/mcp-server/tools/error-classification.d.mts.map +1 -0
  228. package/dist/mcp-server/tools/error-classification.mjs +281 -0
  229. package/dist/mcp-server/tools/error-classification.mjs.map +1 -0
  230. package/dist/mcp-server/tools/helpers.cjs +149 -0
  231. package/dist/mcp-server/tools/helpers.cjs.map +1 -0
  232. package/dist/mcp-server/tools/helpers.d.cts +149 -0
  233. package/dist/mcp-server/tools/helpers.d.cts.map +1 -0
  234. package/dist/mcp-server/tools/helpers.d.mts +149 -0
  235. package/dist/mcp-server/tools/helpers.d.mts.map +1 -0
  236. package/dist/mcp-server/tools/helpers.mjs +141 -0
  237. package/dist/mcp-server/tools/helpers.mjs.map +1 -0
  238. package/dist/mcp-server/tools/index.cjs +27 -0
  239. package/dist/mcp-server/tools/index.cjs.map +1 -0
  240. package/dist/mcp-server/tools/index.d.cts +11 -0
  241. package/dist/mcp-server/tools/index.d.cts.map +1 -0
  242. package/dist/mcp-server/tools/index.d.mts +11 -0
  243. package/dist/mcp-server/tools/index.d.mts.map +1 -0
  244. package/dist/mcp-server/tools/index.mjs +11 -0
  245. package/dist/mcp-server/tools/index.mjs.map +1 -0
  246. package/dist/mcp-server/tools/interaction.cjs +190 -0
  247. package/dist/mcp-server/tools/interaction.cjs.map +1 -0
  248. package/dist/mcp-server/tools/interaction.d.cts +26 -0
  249. package/dist/mcp-server/tools/interaction.d.cts.map +1 -0
  250. package/dist/mcp-server/tools/interaction.d.mts +26 -0
  251. package/dist/mcp-server/tools/interaction.d.mts.map +1 -0
  252. package/dist/mcp-server/tools/interaction.mjs +185 -0
  253. package/dist/mcp-server/tools/interaction.mjs.map +1 -0
  254. package/dist/mcp-server/tools/knowledge.cjs +120 -0
  255. package/dist/mcp-server/tools/knowledge.cjs.map +1 -0
  256. package/dist/mcp-server/tools/knowledge.d.cts +34 -0
  257. package/dist/mcp-server/tools/knowledge.d.cts.map +1 -0
  258. package/dist/mcp-server/tools/knowledge.d.mts +34 -0
  259. package/dist/mcp-server/tools/knowledge.d.mts.map +1 -0
  260. package/dist/mcp-server/tools/knowledge.mjs +114 -0
  261. package/dist/mcp-server/tools/knowledge.mjs.map +1 -0
  262. package/dist/mcp-server/tools/launch.cjs +51 -0
  263. package/dist/mcp-server/tools/launch.cjs.map +1 -0
  264. package/dist/mcp-server/tools/launch.d.cts +10 -0
  265. package/dist/mcp-server/tools/launch.d.cts.map +1 -0
  266. package/dist/mcp-server/tools/launch.d.mts +10 -0
  267. package/dist/mcp-server/tools/launch.d.mts.map +1 -0
  268. package/dist/mcp-server/tools/launch.mjs +48 -0
  269. package/dist/mcp-server/tools/launch.mjs.map +1 -0
  270. package/dist/mcp-server/tools/navigation.cjs +242 -0
  271. package/dist/mcp-server/tools/navigation.cjs.map +1 -0
  272. package/dist/mcp-server/tools/navigation.d.cts +34 -0
  273. package/dist/mcp-server/tools/navigation.d.cts.map +1 -0
  274. package/dist/mcp-server/tools/navigation.d.mts +34 -0
  275. package/dist/mcp-server/tools/navigation.d.mts.map +1 -0
  276. package/dist/mcp-server/tools/navigation.mjs +236 -0
  277. package/dist/mcp-server/tools/navigation.mjs.map +1 -0
  278. package/dist/mcp-server/tools/registry.cjs +10 -0
  279. package/dist/mcp-server/tools/registry.cjs.map +1 -0
  280. package/dist/mcp-server/tools/registry.d.cts +4 -0
  281. package/dist/mcp-server/tools/registry.d.cts.map +1 -0
  282. package/dist/mcp-server/tools/registry.d.mts +4 -0
  283. package/dist/mcp-server/tools/registry.d.mts.map +1 -0
  284. package/dist/mcp-server/tools/registry.mjs +4 -0
  285. package/dist/mcp-server/tools/registry.mjs.map +1 -0
  286. package/dist/mcp-server/tools/run-tool.cjs +140 -0
  287. package/dist/mcp-server/tools/run-tool.cjs.map +1 -0
  288. package/dist/mcp-server/tools/run-tool.d.cts +39 -0
  289. package/dist/mcp-server/tools/run-tool.d.cts.map +1 -0
  290. package/dist/mcp-server/tools/run-tool.d.mts +39 -0
  291. package/dist/mcp-server/tools/run-tool.d.mts.map +1 -0
  292. package/dist/mcp-server/tools/run-tool.mjs +137 -0
  293. package/dist/mcp-server/tools/run-tool.mjs.map +1 -0
  294. package/dist/mcp-server/tools/screenshot.cjs +55 -0
  295. package/dist/mcp-server/tools/screenshot.cjs.map +1 -0
  296. package/dist/mcp-server/tools/screenshot.d.cts +10 -0
  297. package/dist/mcp-server/tools/screenshot.d.cts.map +1 -0
  298. package/dist/mcp-server/tools/screenshot.d.mts +10 -0
  299. package/dist/mcp-server/tools/screenshot.d.mts.map +1 -0
  300. package/dist/mcp-server/tools/screenshot.mjs +52 -0
  301. package/dist/mcp-server/tools/screenshot.mjs.map +1 -0
  302. package/dist/mcp-server/tools/seeding.cjs +214 -0
  303. package/dist/mcp-server/tools/seeding.cjs.map +1 -0
  304. package/dist/mcp-server/tools/seeding.d.cts +38 -0
  305. package/dist/mcp-server/tools/seeding.d.cts.map +1 -0
  306. package/dist/mcp-server/tools/seeding.d.mts +38 -0
  307. package/dist/mcp-server/tools/seeding.d.mts.map +1 -0
  308. package/dist/mcp-server/tools/seeding.mjs +208 -0
  309. package/dist/mcp-server/tools/seeding.mjs.map +1 -0
  310. package/dist/mcp-server/tools/state.cjs +69 -0
  311. package/dist/mcp-server/tools/state.cjs.map +1 -0
  312. package/dist/mcp-server/tools/state.d.cts +19 -0
  313. package/dist/mcp-server/tools/state.d.cts.map +1 -0
  314. package/dist/mcp-server/tools/state.d.mts +19 -0
  315. package/dist/mcp-server/tools/state.d.mts.map +1 -0
  316. package/dist/mcp-server/tools/state.mjs +66 -0
  317. package/dist/mcp-server/tools/state.mjs.map +1 -0
  318. package/dist/mcp-server/types/discovery.cjs +24 -0
  319. package/dist/mcp-server/types/discovery.cjs.map +1 -0
  320. package/dist/mcp-server/types/discovery.d.cts +30 -0
  321. package/dist/mcp-server/types/discovery.d.cts.map +1 -0
  322. package/dist/mcp-server/types/discovery.d.mts +30 -0
  323. package/dist/mcp-server/types/discovery.d.mts.map +1 -0
  324. package/dist/mcp-server/types/discovery.mjs +21 -0
  325. package/dist/mcp-server/types/discovery.mjs.map +1 -0
  326. package/dist/mcp-server/types/errors.cjs +33 -0
  327. package/dist/mcp-server/types/errors.cjs.map +1 -0
  328. package/dist/mcp-server/types/errors.d.cts +31 -0
  329. package/dist/mcp-server/types/errors.d.cts.map +1 -0
  330. package/dist/mcp-server/types/errors.d.mts +31 -0
  331. package/dist/mcp-server/types/errors.d.mts.map +1 -0
  332. package/dist/mcp-server/types/errors.mjs +30 -0
  333. package/dist/mcp-server/types/errors.mjs.map +1 -0
  334. package/dist/mcp-server/types/index.cjs +21 -0
  335. package/dist/mcp-server/types/index.cjs.map +1 -0
  336. package/dist/mcp-server/types/index.d.cts +10 -0
  337. package/dist/mcp-server/types/index.d.cts.map +1 -0
  338. package/dist/mcp-server/types/index.d.mts +10 -0
  339. package/dist/mcp-server/types/index.d.mts.map +1 -0
  340. package/dist/mcp-server/types/index.mjs +5 -0
  341. package/dist/mcp-server/types/index.mjs.map +1 -0
  342. package/dist/mcp-server/types/knowledge.cjs +3 -0
  343. package/dist/mcp-server/types/knowledge.cjs.map +1 -0
  344. package/dist/mcp-server/types/knowledge.d.cts +116 -0
  345. package/dist/mcp-server/types/knowledge.d.cts.map +1 -0
  346. package/dist/mcp-server/types/knowledge.d.mts +116 -0
  347. package/dist/mcp-server/types/knowledge.d.mts.map +1 -0
  348. package/dist/mcp-server/types/knowledge.mjs +2 -0
  349. package/dist/mcp-server/types/knowledge.mjs.map +1 -0
  350. package/dist/mcp-server/types/responses.cjs +3 -0
  351. package/dist/mcp-server/types/responses.cjs.map +1 -0
  352. package/dist/mcp-server/types/responses.d.cts +22 -0
  353. package/dist/mcp-server/types/responses.d.cts.map +1 -0
  354. package/dist/mcp-server/types/responses.d.mts +22 -0
  355. package/dist/mcp-server/types/responses.d.mts.map +1 -0
  356. package/dist/mcp-server/types/responses.mjs +2 -0
  357. package/dist/mcp-server/types/responses.mjs.map +1 -0
  358. package/dist/mcp-server/types/seeding.cjs +34 -0
  359. package/dist/mcp-server/types/seeding.cjs.map +1 -0
  360. package/dist/mcp-server/types/seeding.d.cts +40 -0
  361. package/dist/mcp-server/types/seeding.d.cts.map +1 -0
  362. package/dist/mcp-server/types/seeding.d.mts +40 -0
  363. package/dist/mcp-server/types/seeding.d.mts.map +1 -0
  364. package/dist/mcp-server/types/seeding.mjs +31 -0
  365. package/dist/mcp-server/types/seeding.mjs.map +1 -0
  366. package/dist/mcp-server/types/session.cjs +3 -0
  367. package/dist/mcp-server/types/session.cjs.map +1 -0
  368. package/dist/mcp-server/types/session.d.cts +11 -0
  369. package/dist/mcp-server/types/session.d.cts.map +1 -0
  370. package/dist/mcp-server/types/session.d.mts +11 -0
  371. package/dist/mcp-server/types/session.d.mts.map +1 -0
  372. package/dist/mcp-server/types/session.mjs +2 -0
  373. package/dist/mcp-server/types/session.mjs.map +1 -0
  374. package/dist/mcp-server/types/step-record.cjs +20 -0
  375. package/dist/mcp-server/types/step-record.cjs.map +1 -0
  376. package/dist/mcp-server/types/step-record.d.cts +86 -0
  377. package/dist/mcp-server/types/step-record.d.cts.map +1 -0
  378. package/dist/mcp-server/types/step-record.d.mts +86 -0
  379. package/dist/mcp-server/types/step-record.d.mts.map +1 -0
  380. package/dist/mcp-server/types/step-record.mjs +17 -0
  381. package/dist/mcp-server/types/step-record.mjs.map +1 -0
  382. package/dist/mcp-server/types/tool-inputs.cjs +3 -0
  383. package/dist/mcp-server/types/tool-inputs.cjs.map +1 -0
  384. package/dist/mcp-server/types/tool-inputs.d.cts +118 -0
  385. package/dist/mcp-server/types/tool-inputs.d.cts.map +1 -0
  386. package/dist/mcp-server/types/tool-inputs.d.mts +118 -0
  387. package/dist/mcp-server/types/tool-inputs.d.mts.map +1 -0
  388. package/dist/mcp-server/types/tool-inputs.mjs +2 -0
  389. package/dist/mcp-server/types/tool-inputs.mjs.map +1 -0
  390. package/dist/mcp-server/types/tool-outputs.cjs +3 -0
  391. package/dist/mcp-server/types/tool-outputs.cjs.map +1 -0
  392. package/dist/mcp-server/types/tool-outputs.d.cts +121 -0
  393. package/dist/mcp-server/types/tool-outputs.d.cts.map +1 -0
  394. package/dist/mcp-server/types/tool-outputs.d.mts +121 -0
  395. package/dist/mcp-server/types/tool-outputs.d.mts.map +1 -0
  396. package/dist/mcp-server/types/tool-outputs.mjs +2 -0
  397. package/dist/mcp-server/types/tool-outputs.mjs.map +1 -0
  398. package/dist/mcp-server/utils/errors.cjs +14 -0
  399. package/dist/mcp-server/utils/errors.cjs.map +1 -0
  400. package/dist/mcp-server/utils/errors.d.cts +9 -0
  401. package/dist/mcp-server/utils/errors.d.cts.map +1 -0
  402. package/dist/mcp-server/utils/errors.d.mts +9 -0
  403. package/dist/mcp-server/utils/errors.d.mts.map +1 -0
  404. package/dist/mcp-server/utils/errors.mjs +11 -0
  405. package/dist/mcp-server/utils/errors.mjs.map +1 -0
  406. package/dist/mcp-server/utils/index.cjs +22 -0
  407. package/dist/mcp-server/utils/index.cjs.map +1 -0
  408. package/dist/mcp-server/utils/index.d.cts +8 -0
  409. package/dist/mcp-server/utils/index.d.cts.map +1 -0
  410. package/dist/mcp-server/utils/index.d.mts +8 -0
  411. package/dist/mcp-server/utils/index.d.mts.map +1 -0
  412. package/dist/mcp-server/utils/index.mjs +8 -0
  413. package/dist/mcp-server/utils/index.mjs.map +1 -0
  414. package/dist/mcp-server/utils/logger.cjs +25 -0
  415. package/dist/mcp-server/utils/logger.cjs.map +1 -0
  416. package/dist/mcp-server/utils/logger.d.cts +9 -0
  417. package/dist/mcp-server/utils/logger.d.cts.map +1 -0
  418. package/dist/mcp-server/utils/logger.d.mts +9 -0
  419. package/dist/mcp-server/utils/logger.d.mts.map +1 -0
  420. package/dist/mcp-server/utils/logger.mjs +22 -0
  421. package/dist/mcp-server/utils/logger.mjs.map +1 -0
  422. package/dist/mcp-server/utils/redaction.cjs +24 -0
  423. package/dist/mcp-server/utils/redaction.cjs.map +1 -0
  424. package/dist/mcp-server/utils/redaction.d.cts +9 -0
  425. package/dist/mcp-server/utils/redaction.d.cts.map +1 -0
  426. package/dist/mcp-server/utils/redaction.d.mts +9 -0
  427. package/dist/mcp-server/utils/redaction.d.mts.map +1 -0
  428. package/dist/mcp-server/utils/redaction.mjs +20 -0
  429. package/dist/mcp-server/utils/redaction.mjs.map +1 -0
  430. package/dist/mcp-server/utils/response.cjs +49 -0
  431. package/dist/mcp-server/utils/response.cjs.map +1 -0
  432. package/dist/mcp-server/utils/response.d.cts +22 -0
  433. package/dist/mcp-server/utils/response.d.cts.map +1 -0
  434. package/dist/mcp-server/utils/response.d.mts +22 -0
  435. package/dist/mcp-server/utils/response.d.mts.map +1 -0
  436. package/dist/mcp-server/utils/response.mjs +45 -0
  437. package/dist/mcp-server/utils/response.mjs.map +1 -0
  438. package/dist/mcp-server/utils/targets.cjs +32 -0
  439. package/dist/mcp-server/utils/targets.cjs.map +1 -0
  440. package/dist/mcp-server/utils/targets.d.cts +25 -0
  441. package/dist/mcp-server/utils/targets.d.cts.map +1 -0
  442. package/dist/mcp-server/utils/targets.d.mts +25 -0
  443. package/dist/mcp-server/utils/targets.d.mts.map +1 -0
  444. package/dist/mcp-server/utils/targets.mjs +29 -0
  445. package/dist/mcp-server/utils/targets.mjs.map +1 -0
  446. package/dist/mcp-server/utils/time.cjs +39 -0
  447. package/dist/mcp-server/utils/time.cjs.map +1 -0
  448. package/dist/mcp-server/utils/time.d.cts +15 -0
  449. package/dist/mcp-server/utils/time.d.cts.map +1 -0
  450. package/dist/mcp-server/utils/time.d.mts +15 -0
  451. package/dist/mcp-server/utils/time.d.mts.map +1 -0
  452. package/dist/mcp-server/utils/time.mjs +35 -0
  453. package/dist/mcp-server/utils/time.mjs.map +1 -0
  454. package/dist/mcp-server/utils/type-guards.cjs +42 -0
  455. package/dist/mcp-server/utils/type-guards.cjs.map +1 -0
  456. package/dist/mcp-server/utils/type-guards.d.cts +30 -0
  457. package/dist/mcp-server/utils/type-guards.d.cts.map +1 -0
  458. package/dist/mcp-server/utils/type-guards.d.mts +30 -0
  459. package/dist/mcp-server/utils/type-guards.d.mts.map +1 -0
  460. package/dist/mcp-server/utils/type-guards.mjs +38 -0
  461. package/dist/mcp-server/utils/type-guards.mjs.map +1 -0
  462. package/dist/utils/fetch.cjs +36 -0
  463. package/dist/utils/fetch.cjs.map +1 -0
  464. package/dist/utils/fetch.d.cts +20 -0
  465. package/dist/utils/fetch.d.cts.map +1 -0
  466. package/dist/utils/fetch.d.mts +20 -0
  467. package/dist/utils/fetch.d.mts.map +1 -0
  468. package/dist/utils/fetch.mjs +33 -0
  469. package/dist/utils/fetch.mjs.map +1 -0
  470. package/dist/utils/index.cjs +11 -0
  471. package/dist/utils/index.cjs.map +1 -0
  472. package/dist/utils/index.d.cts +6 -0
  473. package/dist/utils/index.d.cts.map +1 -0
  474. package/dist/utils/index.d.mts +6 -0
  475. package/dist/utils/index.d.mts.map +1 -0
  476. package/dist/utils/index.mjs +6 -0
  477. package/dist/utils/index.mjs.map +1 -0
  478. package/dist/utils/service-readiness.cjs +75 -0
  479. package/dist/utils/service-readiness.cjs.map +1 -0
  480. package/dist/utils/service-readiness.d.cts +61 -0
  481. package/dist/utils/service-readiness.d.cts.map +1 -0
  482. package/dist/utils/service-readiness.d.mts +61 -0
  483. package/dist/utils/service-readiness.d.mts.map +1 -0
  484. package/dist/utils/service-readiness.mjs +72 -0
  485. package/dist/utils/service-readiness.mjs.map +1 -0
  486. package/package.json +119 -0
@@ -0,0 +1,149 @@
1
+ import type { Page } from "@playwright/test";
2
+ import type { ExtensionState } from "../../capabilities/types.mjs";
3
+ import type { McpResponse, ErrorCode, StepRecordObservation } from "../types/index.mjs";
4
+ /**
5
+ * Level of detail to collect for observation data.
6
+ * - "full": Collect state, testIds, and a11y tree
7
+ * - "minimal": Collect state only (no testIds or a11y)
8
+ * - "none": Return empty observation
9
+ */
10
+ export type ObservationLevel = 'full' | 'minimal' | 'none';
11
+ /**
12
+ * Parameters for recording a tool step in the knowledge store.
13
+ */
14
+ export type RecordStepParams = {
15
+ /**
16
+ * Name of the tool that was executed
17
+ */
18
+ toolName: string;
19
+ /**
20
+ * Input parameters passed to the tool
21
+ */
22
+ input: Record<string, unknown>;
23
+ /**
24
+ * Timestamp when the tool execution started
25
+ */
26
+ startTime: number;
27
+ /**
28
+ * Observation data collected after tool execution
29
+ */
30
+ observation: StepRecordObservation;
31
+ /**
32
+ * Target element information (selector, testId, etc.)
33
+ */
34
+ target?: Record<string, string>;
35
+ /**
36
+ * Path to screenshot file if captured
37
+ */
38
+ screenshotPath?: string;
39
+ /**
40
+ * Screenshot dimensions if captured
41
+ */
42
+ screenshotDimensions?: {
43
+ /**
44
+ * Screenshot width in pixels
45
+ */
46
+ width: number;
47
+ /**
48
+ * Screenshot height in pixels
49
+ */
50
+ height: number;
51
+ };
52
+ };
53
+ /**
54
+ * Context information for an active session.
55
+ */
56
+ export type ActiveSessionContext = {
57
+ /**
58
+ * Unique session identifier
59
+ */
60
+ sessionId: string;
61
+ /**
62
+ * Current active page instance
63
+ */
64
+ page: Page;
65
+ /**
66
+ * Map of accessibility references to selectors
67
+ */
68
+ refMap: Map<string, string>;
69
+ };
70
+ /**
71
+ * Check if an active session exists and return error if not.
72
+ *
73
+ * @param startTime - Timestamp when the operation started
74
+ * @returns Error response if no active session, undefined otherwise
75
+ */
76
+ export declare function requireActiveSession<Result>(startTime: number): McpResponse<Result> | undefined;
77
+ /**
78
+ * Collect observation data from the current page state.
79
+ *
80
+ * @param page - The page to collect observation from
81
+ * @param level - Level of detail to collect (full, minimal, or none)
82
+ * @param presetState - Optional pre-fetched extension state to use instead of querying
83
+ * @returns Observation data with state, testIds, and accessibility tree
84
+ */
85
+ export declare function collectObservation(page: Page | undefined, level: ObservationLevel, presetState?: ExtensionState): Promise<StepRecordObservation>;
86
+ /**
87
+ * Wrapper that ensures an active session exists before executing a handler.
88
+ *
89
+ * @param handler - Function to execute with active session context
90
+ * @returns Wrapped function that validates session before calling handler
91
+ */
92
+ export declare function withActiveSession<TInput, TResult>(handler: (input: TInput, ctx: ActiveSessionContext, startTime: number) => Promise<McpResponse<TResult>>): (input: TInput) => Promise<McpResponse<TResult>>;
93
+ /**
94
+ * Record a tool execution step in the knowledge store.
95
+ *
96
+ * @param params - Parameters containing tool name, input, observation, and metadata
97
+ */
98
+ export declare function recordToolStep(params: RecordStepParams): Promise<void>;
99
+ /**
100
+ * Collect observation data and record the tool step in the knowledge store.
101
+ *
102
+ * @param page - The page to collect observation from
103
+ * @param toolName - Name of the tool that was executed
104
+ * @param input - Input parameters passed to the tool
105
+ * @param startTime - Timestamp when the tool execution started
106
+ * @param options - Optional metadata for the step record
107
+ * @param options.target - Target element information
108
+ * @param options.screenshotPath - Path to screenshot file if captured
109
+ * @param options.screenshotDimensions - Screenshot dimensions
110
+ * @param options.screenshotDimensions.width - Screenshot width in pixels
111
+ * @param options.screenshotDimensions.height - Screenshot height in pixels
112
+ * @returns Observation data collected after tool execution
113
+ */
114
+ export declare function collectObservationAndRecord(page: Page, toolName: string, input: Record<string, unknown>, startTime: number, options?: {
115
+ /**
116
+ * Target element information (selector, testId, etc.)
117
+ */
118
+ target?: Record<string, string>;
119
+ /**
120
+ * Path to screenshot file if captured
121
+ */
122
+ screenshotPath?: string;
123
+ /**
124
+ * Screenshot dimensions if captured
125
+ */
126
+ screenshotDimensions?: {
127
+ /**
128
+ * Screenshot width in pixels
129
+ */
130
+ width: number;
131
+ /**
132
+ * Screenshot height in pixels
133
+ */
134
+ height: number;
135
+ };
136
+ }): Promise<StepRecordObservation>;
137
+ /**
138
+ * Handle tool execution errors and return appropriate error response.
139
+ *
140
+ * @param error - The error that occurred during tool execution
141
+ * @param defaultCode - Default error code to use if no specific match found
142
+ * @param defaultMessage - Default error message to use
143
+ * @param input - Input parameters that were passed to the tool
144
+ * @param sessionId - Current session ID for error context
145
+ * @param startTime - Timestamp when the tool execution started
146
+ * @returns Error response with appropriate code and message
147
+ */
148
+ export declare function handleToolError<Result>(error: unknown, defaultCode: ErrorCode, defaultMessage: string, input: unknown, sessionId: string | undefined, startTime: number): McpResponse<Result>;
149
+ //# sourceMappingURL=helpers.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.mts","sourceRoot":"","sources":["../../../src/mcp-server/tools/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,141 @@
1
+ import { OBSERVATION_TESTID_LIMIT } from "../constants.mjs";
2
+ import { collectTestIds, collectTrimmedA11ySnapshot } from "../discovery.mjs";
3
+ import { knowledgeStore, createDefaultObservation } from "../knowledge-store.mjs";
4
+ import { getSessionManager } from "../session-manager.mjs";
5
+ import { ErrorCodes } from "../types/index.mjs";
6
+ import { createErrorResponse, extractErrorMessage, debugWarn } from "../utils/index.mjs";
7
+ /**
8
+ * Check if an active session exists and return error if not.
9
+ *
10
+ * @param startTime - Timestamp when the operation started
11
+ * @returns Error response if no active session, undefined otherwise
12
+ */
13
+ export function requireActiveSession(startTime) {
14
+ const sessionManager = getSessionManager();
15
+ if (!sessionManager.hasActiveSession()) {
16
+ return createErrorResponse(ErrorCodes.MM_NO_ACTIVE_SESSION, 'No active session. Call launch first.', undefined, undefined, startTime);
17
+ }
18
+ return undefined;
19
+ }
20
+ /**
21
+ * Collect observation data from the current page state.
22
+ *
23
+ * @param page - The page to collect observation from
24
+ * @param level - Level of detail to collect (full, minimal, or none)
25
+ * @param presetState - Optional pre-fetched extension state to use instead of querying
26
+ * @returns Observation data with state, testIds, and accessibility tree
27
+ */
28
+ export async function collectObservation(page, level, presetState) {
29
+ const sessionManager = getSessionManager();
30
+ if (level === 'none') {
31
+ return createDefaultObservation({}, [], []);
32
+ }
33
+ const state = presetState ?? (await sessionManager.getExtensionState());
34
+ if (level === 'minimal') {
35
+ return createDefaultObservation(state, [], []);
36
+ }
37
+ if (!page) {
38
+ debugWarn('collectObservation', 'Page not provided for full observation');
39
+ return createDefaultObservation(state, [], []);
40
+ }
41
+ try {
42
+ const testIds = await collectTestIds(page, OBSERVATION_TESTID_LIMIT);
43
+ const { nodes, refMap } = await collectTrimmedA11ySnapshot(page);
44
+ sessionManager.setRefMap(refMap);
45
+ return createDefaultObservation(state, testIds, nodes);
46
+ }
47
+ catch (error) {
48
+ debugWarn('collectObservation', error);
49
+ return createDefaultObservation(state, [], []);
50
+ }
51
+ }
52
+ /**
53
+ * Wrapper that ensures an active session exists before executing a handler.
54
+ *
55
+ * @param handler - Function to execute with active session context
56
+ * @returns Wrapped function that validates session before calling handler
57
+ */
58
+ export function withActiveSession(handler) {
59
+ return async (input) => {
60
+ const startTime = Date.now();
61
+ const sessionManager = getSessionManager();
62
+ const sessionError = requireActiveSession(startTime);
63
+ if (sessionError) {
64
+ return sessionError;
65
+ }
66
+ const sessionId = sessionManager.getSessionId();
67
+ if (!sessionId) {
68
+ return createErrorResponse(ErrorCodes.MM_NO_ACTIVE_SESSION, 'Session ID not found', undefined, undefined, startTime);
69
+ }
70
+ const page = sessionManager.getPage();
71
+ const refMap = sessionManager.getRefMap();
72
+ return handler(input, { sessionId, page, refMap }, startTime);
73
+ };
74
+ }
75
+ /**
76
+ * Record a tool execution step in the knowledge store.
77
+ *
78
+ * @param params - Parameters containing tool name, input, observation, and metadata
79
+ */
80
+ export async function recordToolStep(params) {
81
+ const sessionManager = getSessionManager();
82
+ const sessionId = sessionManager.getSessionId() ?? '';
83
+ await knowledgeStore.recordStep({
84
+ sessionId,
85
+ toolName: params.toolName,
86
+ input: params.input,
87
+ target: params.target,
88
+ outcome: { ok: true },
89
+ observation: params.observation,
90
+ durationMs: Date.now() - params.startTime,
91
+ screenshotPath: params.screenshotPath,
92
+ screenshotDimensions: params.screenshotDimensions,
93
+ });
94
+ }
95
+ /**
96
+ * Collect observation data and record the tool step in the knowledge store.
97
+ *
98
+ * @param page - The page to collect observation from
99
+ * @param toolName - Name of the tool that was executed
100
+ * @param input - Input parameters passed to the tool
101
+ * @param startTime - Timestamp when the tool execution started
102
+ * @param options - Optional metadata for the step record
103
+ * @param options.target - Target element information
104
+ * @param options.screenshotPath - Path to screenshot file if captured
105
+ * @param options.screenshotDimensions - Screenshot dimensions
106
+ * @param options.screenshotDimensions.width - Screenshot width in pixels
107
+ * @param options.screenshotDimensions.height - Screenshot height in pixels
108
+ * @returns Observation data collected after tool execution
109
+ */
110
+ export async function collectObservationAndRecord(page, toolName, input, startTime, options = {}) {
111
+ const observation = await collectObservation(page, 'full');
112
+ await recordToolStep({
113
+ toolName,
114
+ input,
115
+ startTime,
116
+ observation,
117
+ target: options.target,
118
+ screenshotPath: options.screenshotPath,
119
+ screenshotDimensions: options.screenshotDimensions,
120
+ });
121
+ return observation;
122
+ }
123
+ /**
124
+ * Handle tool execution errors and return appropriate error response.
125
+ *
126
+ * @param error - The error that occurred during tool execution
127
+ * @param defaultCode - Default error code to use if no specific match found
128
+ * @param defaultMessage - Default error message to use
129
+ * @param input - Input parameters that were passed to the tool
130
+ * @param sessionId - Current session ID for error context
131
+ * @param startTime - Timestamp when the tool execution started
132
+ * @returns Error response with appropriate code and message
133
+ */
134
+ export function handleToolError(error, defaultCode, defaultMessage, input, sessionId, startTime) {
135
+ const message = extractErrorMessage(error);
136
+ if (message.includes('Unknown a11yRef') || message.includes('not found')) {
137
+ return createErrorResponse(ErrorCodes.MM_TARGET_NOT_FOUND, message, { input }, sessionId, startTime);
138
+ }
139
+ return createErrorResponse(defaultCode, `${defaultMessage}: ${message}`, { input }, sessionId, startTime);
140
+ }
141
+ //# sourceMappingURL=helpers.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.mjs","sourceRoot":"","sources":["../../../src/mcp-server/tools/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Page } from '@playwright/test';\n\nimport type { ExtensionState } from '../../capabilities/types.js';\nimport { OBSERVATION_TESTID_LIMIT } from '../constants.js';\nimport { collectTestIds, collectTrimmedA11ySnapshot } from '../discovery.js';\nimport {\n knowledgeStore,\n createDefaultObservation,\n} from '../knowledge-store.js';\nimport { getSessionManager } from '../session-manager.js';\nimport type {\n McpResponse,\n ErrorCode,\n TestIdItem,\n StepRecordObservation,\n} from '../types';\nimport { ErrorCodes } from '../types';\nimport { createErrorResponse, extractErrorMessage, debugWarn } from '../utils';\n\n/**\n * Level of detail to collect for observation data.\n * - \"full\": Collect state, testIds, and a11y tree\n * - \"minimal\": Collect state only (no testIds or a11y)\n * - \"none\": Return empty observation\n */\nexport type ObservationLevel = 'full' | 'minimal' | 'none';\n\n/**\n * Parameters for recording a tool step in the knowledge store.\n */\nexport type RecordStepParams = {\n /**\n * Name of the tool that was executed\n */\n toolName: string;\n /**\n * Input parameters passed to the tool\n */\n input: Record<string, unknown>;\n /**\n * Timestamp when the tool execution started\n */\n startTime: number;\n /**\n * Observation data collected after tool execution\n */\n observation: StepRecordObservation;\n /**\n * Target element information (selector, testId, etc.)\n */\n target?: Record<string, string>;\n /**\n * Path to screenshot file if captured\n */\n screenshotPath?: string;\n /**\n * Screenshot dimensions if captured\n */\n screenshotDimensions?: {\n /**\n * Screenshot width in pixels\n */\n width: number;\n /**\n * Screenshot height in pixels\n */\n height: number;\n };\n};\n\n/**\n * Context information for an active session.\n */\nexport type ActiveSessionContext = {\n /**\n * Unique session identifier\n */\n sessionId: string;\n /**\n * Current active page instance\n */\n page: Page;\n /**\n * Map of accessibility references to selectors\n */\n refMap: Map<string, string>;\n};\n\n/**\n * Check if an active session exists and return error if not.\n *\n * @param startTime - Timestamp when the operation started\n * @returns Error response if no active session, undefined otherwise\n */\nexport function requireActiveSession<Result>(\n startTime: number,\n): McpResponse<Result> | undefined {\n const sessionManager = getSessionManager();\n if (!sessionManager.hasActiveSession()) {\n return createErrorResponse(\n ErrorCodes.MM_NO_ACTIVE_SESSION,\n 'No active session. Call launch first.',\n undefined,\n undefined,\n startTime,\n ) as McpResponse<Result>;\n }\n return undefined;\n}\n\n/**\n * Collect observation data from the current page state.\n *\n * @param page - The page to collect observation from\n * @param level - Level of detail to collect (full, minimal, or none)\n * @param presetState - Optional pre-fetched extension state to use instead of querying\n * @returns Observation data with state, testIds, and accessibility tree\n */\nexport async function collectObservation(\n page: Page | undefined,\n level: ObservationLevel,\n presetState?: ExtensionState,\n): Promise<StepRecordObservation> {\n const sessionManager = getSessionManager();\n\n if (level === 'none') {\n return createDefaultObservation({} as ExtensionState, [], []);\n }\n\n const state = presetState ?? (await sessionManager.getExtensionState());\n\n if (level === 'minimal') {\n return createDefaultObservation(state, [], []);\n }\n\n if (!page) {\n debugWarn('collectObservation', 'Page not provided for full observation');\n return createDefaultObservation(state, [], []);\n }\n\n try {\n const testIds: TestIdItem[] = await collectTestIds(\n page,\n OBSERVATION_TESTID_LIMIT,\n );\n const { nodes, refMap } = await collectTrimmedA11ySnapshot(page);\n sessionManager.setRefMap(refMap);\n return createDefaultObservation(state, testIds, nodes);\n } catch (error) {\n debugWarn('collectObservation', error);\n return createDefaultObservation(state, [], []);\n }\n}\n\n/**\n * Wrapper that ensures an active session exists before executing a handler.\n *\n * @param handler - Function to execute with active session context\n * @returns Wrapped function that validates session before calling handler\n */\nexport function withActiveSession<TInput, TResult>(\n handler: (\n input: TInput,\n ctx: ActiveSessionContext,\n startTime: number,\n ) => Promise<McpResponse<TResult>>,\n): (input: TInput) => Promise<McpResponse<TResult>> {\n return async (input: TInput): Promise<McpResponse<TResult>> => {\n const startTime = Date.now();\n const sessionManager = getSessionManager();\n\n const sessionError = requireActiveSession<TResult>(startTime);\n if (sessionError) {\n return sessionError;\n }\n\n const sessionId = sessionManager.getSessionId();\n if (!sessionId) {\n return createErrorResponse(\n ErrorCodes.MM_NO_ACTIVE_SESSION,\n 'Session ID not found',\n undefined,\n undefined,\n startTime,\n ) as McpResponse<TResult>;\n }\n const page = sessionManager.getPage();\n const refMap = sessionManager.getRefMap();\n\n return handler(input, { sessionId, page, refMap }, startTime);\n };\n}\n\n/**\n * Record a tool execution step in the knowledge store.\n *\n * @param params - Parameters containing tool name, input, observation, and metadata\n */\nexport async function recordToolStep(params: RecordStepParams): Promise<void> {\n const sessionManager = getSessionManager();\n const sessionId = sessionManager.getSessionId() ?? '';\n\n await knowledgeStore.recordStep({\n sessionId,\n toolName: params.toolName,\n input: params.input,\n target: params.target,\n outcome: { ok: true },\n observation: params.observation,\n durationMs: Date.now() - params.startTime,\n screenshotPath: params.screenshotPath,\n screenshotDimensions: params.screenshotDimensions,\n });\n}\n\n/**\n * Collect observation data and record the tool step in the knowledge store.\n *\n * @param page - The page to collect observation from\n * @param toolName - Name of the tool that was executed\n * @param input - Input parameters passed to the tool\n * @param startTime - Timestamp when the tool execution started\n * @param options - Optional metadata for the step record\n * @param options.target - Target element information\n * @param options.screenshotPath - Path to screenshot file if captured\n * @param options.screenshotDimensions - Screenshot dimensions\n * @param options.screenshotDimensions.width - Screenshot width in pixels\n * @param options.screenshotDimensions.height - Screenshot height in pixels\n * @returns Observation data collected after tool execution\n */\nexport async function collectObservationAndRecord(\n page: Page,\n toolName: string,\n input: Record<string, unknown>,\n startTime: number,\n options: {\n /**\n * Target element information (selector, testId, etc.)\n */\n target?: Record<string, string>;\n /**\n * Path to screenshot file if captured\n */\n screenshotPath?: string;\n /**\n * Screenshot dimensions if captured\n */\n screenshotDimensions?: {\n /**\n * Screenshot width in pixels\n */\n width: number;\n /**\n * Screenshot height in pixels\n */\n height: number;\n };\n } = {},\n): Promise<StepRecordObservation> {\n const observation = await collectObservation(page, 'full');\n\n await recordToolStep({\n toolName,\n input,\n startTime,\n observation,\n target: options.target,\n screenshotPath: options.screenshotPath,\n screenshotDimensions: options.screenshotDimensions,\n });\n\n return observation;\n}\n\n/**\n * Handle tool execution errors and return appropriate error response.\n *\n * @param error - The error that occurred during tool execution\n * @param defaultCode - Default error code to use if no specific match found\n * @param defaultMessage - Default error message to use\n * @param input - Input parameters that were passed to the tool\n * @param sessionId - Current session ID for error context\n * @param startTime - Timestamp when the tool execution started\n * @returns Error response with appropriate code and message\n */\nexport function handleToolError<Result>(\n error: unknown,\n defaultCode: ErrorCode,\n defaultMessage: string,\n input: unknown,\n sessionId: string | undefined,\n startTime: number,\n): McpResponse<Result> {\n const message = extractErrorMessage(error);\n\n if (message.includes('Unknown a11yRef') || message.includes('not found')) {\n return createErrorResponse(\n ErrorCodes.MM_TARGET_NOT_FOUND,\n message,\n { input },\n sessionId,\n startTime,\n ) as McpResponse<Result>;\n }\n\n return createErrorResponse(\n defaultCode,\n `${defaultMessage}: ${message}`,\n { input },\n sessionId,\n startTime,\n ) as McpResponse<Result>;\n}\n"]}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./error-classification.cjs"), exports);
18
+ __exportStar(require("./run-tool.cjs"), exports);
19
+ __exportStar(require("./helpers.cjs"), exports);
20
+ __exportStar(require("./interaction.cjs"), exports);
21
+ __exportStar(require("./navigation.cjs"), exports);
22
+ __exportStar(require("./discovery-tools.cjs"), exports);
23
+ __exportStar(require("./screenshot.cjs"), exports);
24
+ __exportStar(require("./knowledge.cjs"), exports);
25
+ __exportStar(require("./batch.cjs"), exports);
26
+ __exportStar(require("./clipboard.cjs"), exports);
27
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../../src/mcp-server/tools/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6DAA0C;AAC1C,iDAA8B;AAC9B,gDAA6B;AAC7B,oDAAiC;AACjC,mDAAgC;AAChC,wDAAqC;AACrC,mDAAgC;AAChC,kDAA+B;AAC/B,8CAA2B;AAC3B,kDAA+B","sourcesContent":["export * from './error-classification.js';\nexport * from './run-tool.js';\nexport * from './helpers.js';\nexport * from './interaction.js';\nexport * from './navigation.js';\nexport * from './discovery-tools.js';\nexport * from './screenshot.js';\nexport * from './knowledge.js';\nexport * from './batch.js';\nexport * from './clipboard.js';\n"]}
@@ -0,0 +1,11 @@
1
+ export * from "./error-classification.cjs";
2
+ export * from "./run-tool.cjs";
3
+ export * from "./helpers.cjs";
4
+ export * from "./interaction.cjs";
5
+ export * from "./navigation.cjs";
6
+ export * from "./discovery-tools.cjs";
7
+ export * from "./screenshot.cjs";
8
+ export * from "./knowledge.cjs";
9
+ export * from "./batch.cjs";
10
+ export * from "./clipboard.cjs";
11
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../../src/mcp-server/tools/index.ts"],"names":[],"mappings":"AAAA,2CAA0C;AAC1C,+BAA8B;AAC9B,8BAA6B;AAC7B,kCAAiC;AACjC,iCAAgC;AAChC,sCAAqC;AACrC,iCAAgC;AAChC,gCAA+B;AAC/B,4BAA2B;AAC3B,gCAA+B"}
@@ -0,0 +1,11 @@
1
+ export * from "./error-classification.mjs";
2
+ export * from "./run-tool.mjs";
3
+ export * from "./helpers.mjs";
4
+ export * from "./interaction.mjs";
5
+ export * from "./navigation.mjs";
6
+ export * from "./discovery-tools.mjs";
7
+ export * from "./screenshot.mjs";
8
+ export * from "./knowledge.mjs";
9
+ export * from "./batch.mjs";
10
+ export * from "./clipboard.mjs";
11
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../src/mcp-server/tools/index.ts"],"names":[],"mappings":"AAAA,2CAA0C;AAC1C,+BAA8B;AAC9B,8BAA6B;AAC7B,kCAAiC;AACjC,iCAAgC;AAChC,sCAAqC;AACrC,iCAAgC;AAChC,gCAA+B;AAC/B,4BAA2B;AAC3B,gCAA+B"}
@@ -0,0 +1,11 @@
1
+ export * from "./error-classification.mjs";
2
+ export * from "./run-tool.mjs";
3
+ export * from "./helpers.mjs";
4
+ export * from "./interaction.mjs";
5
+ export * from "./navigation.mjs";
6
+ export * from "./discovery-tools.mjs";
7
+ export * from "./screenshot.mjs";
8
+ export * from "./knowledge.mjs";
9
+ export * from "./batch.mjs";
10
+ export * from "./clipboard.mjs";
11
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../../src/mcp-server/tools/index.ts"],"names":[],"mappings":"AAAA,2CAA0C;AAC1C,+BAA8B;AAC9B,8BAA6B;AAC7B,kCAAiC;AACjC,iCAAgC;AAChC,sCAAqC;AACrC,iCAAgC;AAChC,gCAA+B;AAC/B,4BAA2B;AAC3B,gCAA+B","sourcesContent":["export * from './error-classification.js';\nexport * from './run-tool.js';\nexport * from './helpers.js';\nexport * from './interaction.js';\nexport * from './navigation.js';\nexport * from './discovery-tools.js';\nexport * from './screenshot.js';\nexport * from './knowledge.js';\nexport * from './batch.js';\nexport * from './clipboard.js';\n"]}
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleClick = handleClick;
4
+ exports.handleType = handleType;
5
+ exports.handleWaitFor = handleWaitFor;
6
+ const constants_js_1 = require("../constants.cjs");
7
+ const discovery_js_1 = require("../discovery.cjs");
8
+ const session_manager_js_1 = require("../session-manager.cjs");
9
+ const error_classification_js_1 = require("./error-classification.cjs");
10
+ const run_tool_js_1 = require("./run-tool.cjs");
11
+ const types_1 = require("../types/index.cjs");
12
+ const utils_1 = require("../utils/index.cjs");
13
+ /**
14
+ * Handles clicking on an element specified by testId, selector, or accessibility reference.
15
+ *
16
+ * @param input The click input containing target selection and timeout options
17
+ * @param options Optional handler configuration
18
+ * @returns Promise resolving to click result with target information
19
+ */
20
+ async function handleClick(input, options) {
21
+ const startTime = Date.now();
22
+ const sessionManager = (0, session_manager_js_1.getSessionManager)();
23
+ const sessionId = sessionManager.getSessionId();
24
+ const timeoutMs = input.timeoutMs ?? constants_js_1.DEFAULT_INTERACTION_TIMEOUT_MS;
25
+ const validation = (0, utils_1.validateTargetSelection)(input);
26
+ if ((0, utils_1.isInvalidTargetSelection)(validation)) {
27
+ return (0, utils_1.createErrorResponse)(types_1.ErrorCodes.MM_INVALID_INPUT, validation.error, { input }, sessionId, startTime);
28
+ }
29
+ if (!(0, utils_1.isValidTargetSelection)(validation)) {
30
+ return (0, utils_1.createErrorResponse)(types_1.ErrorCodes.MM_INVALID_INPUT, 'Invalid target selection', { input }, sessionId, startTime);
31
+ }
32
+ const { type: targetType, value: targetValue } = validation;
33
+ return (0, run_tool_js_1.runTool)({
34
+ toolName: 'mm_click',
35
+ input,
36
+ options,
37
+ /**
38
+ * Executes the click action on the target element.
39
+ *
40
+ * @param context The tool execution context containing page and reference map
41
+ * @returns Promise resolving to click result with success status and target info
42
+ */
43
+ execute: async (context) => {
44
+ const locator = await (0, discovery_js_1.waitForTarget)(context.page, targetType, targetValue, context.refMap, timeoutMs);
45
+ try {
46
+ await locator.click();
47
+ return {
48
+ clicked: true,
49
+ target: `${targetType}:${targetValue}`,
50
+ };
51
+ }
52
+ catch (clickError) {
53
+ if ((0, error_classification_js_1.isPageClosedError)(clickError)) {
54
+ return {
55
+ clicked: true,
56
+ target: `${targetType}:${targetValue}`,
57
+ pageClosedAfterClick: true,
58
+ };
59
+ }
60
+ throw clickError;
61
+ }
62
+ },
63
+ /**
64
+ * Returns the target element information for recording.
65
+ *
66
+ * @returns Object containing the target type and value
67
+ */
68
+ getTarget: () => ({ [targetType]: targetValue }),
69
+ classifyError: error_classification_js_1.classifyClickError,
70
+ /**
71
+ * Sanitizes input for knowledge store recording.
72
+ *
73
+ * @returns Sanitized input object with timeout information
74
+ */
75
+ sanitizeInputForRecording: () => ({ timeoutMs }),
76
+ });
77
+ }
78
+ /**
79
+ * Handles typing text into an element specified by testId, selector, or accessibility reference.
80
+ *
81
+ * @param input The type input containing target selection, text, and timeout options
82
+ * @param options Optional handler configuration
83
+ * @returns Promise resolving to type result with target and text length information
84
+ */
85
+ async function handleType(input, options) {
86
+ const startTime = Date.now();
87
+ const sessionManager = (0, session_manager_js_1.getSessionManager)();
88
+ const sessionId = sessionManager.getSessionId();
89
+ const timeoutMs = input.timeoutMs ?? constants_js_1.DEFAULT_INTERACTION_TIMEOUT_MS;
90
+ const validation = (0, utils_1.validateTargetSelection)(input);
91
+ if ((0, utils_1.isInvalidTargetSelection)(validation)) {
92
+ return (0, utils_1.createErrorResponse)(types_1.ErrorCodes.MM_INVALID_INPUT, validation.error, { input }, sessionId, startTime);
93
+ }
94
+ if (!(0, utils_1.isValidTargetSelection)(validation)) {
95
+ return (0, utils_1.createErrorResponse)(types_1.ErrorCodes.MM_INVALID_INPUT, 'Invalid target selection', { input }, sessionId, startTime);
96
+ }
97
+ const { type: targetType, value: targetValue } = validation;
98
+ return (0, run_tool_js_1.runTool)({
99
+ toolName: 'mm_type',
100
+ input,
101
+ options,
102
+ /**
103
+ * Executes the type action on the target element.
104
+ *
105
+ * @param context The tool execution context containing page and reference map
106
+ * @returns Promise resolving to type result with success status and text length
107
+ */
108
+ execute: async (context) => {
109
+ const locator = await (0, discovery_js_1.waitForTarget)(context.page, targetType, targetValue, context.refMap, timeoutMs);
110
+ await locator.fill(input.text);
111
+ return {
112
+ typed: true,
113
+ target: `${targetType}:${targetValue}`,
114
+ textLength: input.text.length,
115
+ };
116
+ },
117
+ /**
118
+ * Returns the target element information for recording.
119
+ *
120
+ * @returns Object containing the target type and value
121
+ */
122
+ getTarget: () => ({ [targetType]: targetValue }),
123
+ classifyError: error_classification_js_1.classifyTypeError,
124
+ /**
125
+ * Sanitizes input for knowledge store recording.
126
+ *
127
+ * @returns Sanitized input object with timeout and text information
128
+ */
129
+ sanitizeInputForRecording: () => ({
130
+ timeoutMs,
131
+ text: input.text,
132
+ testId: input.testId,
133
+ selector: input.selector,
134
+ a11yRef: input.a11yRef,
135
+ }),
136
+ });
137
+ }
138
+ /**
139
+ * Handles waiting for an element to become visible.
140
+ *
141
+ * @param input The wait input containing target selection and timeout options
142
+ * @param options Optional handler configuration
143
+ * @returns Promise resolving to wait result with target information
144
+ */
145
+ async function handleWaitFor(input, options) {
146
+ const startTime = Date.now();
147
+ const sessionManager = (0, session_manager_js_1.getSessionManager)();
148
+ const sessionId = sessionManager.getSessionId();
149
+ const timeoutMs = input.timeoutMs ?? constants_js_1.DEFAULT_INTERACTION_TIMEOUT_MS;
150
+ const validation = (0, utils_1.validateTargetSelection)(input);
151
+ if ((0, utils_1.isInvalidTargetSelection)(validation)) {
152
+ return (0, utils_1.createErrorResponse)(types_1.ErrorCodes.MM_INVALID_INPUT, validation.error, { input }, sessionId, startTime);
153
+ }
154
+ if (!(0, utils_1.isValidTargetSelection)(validation)) {
155
+ return (0, utils_1.createErrorResponse)(types_1.ErrorCodes.MM_INVALID_INPUT, 'Invalid target selection', { input }, sessionId, startTime);
156
+ }
157
+ const { type: targetType, value: targetValue } = validation;
158
+ return (0, run_tool_js_1.runTool)({
159
+ toolName: 'mm_wait_for',
160
+ input,
161
+ options,
162
+ /**
163
+ * Executes the wait action for the target element.
164
+ *
165
+ * @param context The tool execution context containing page and reference map
166
+ * @returns Promise resolving to wait result with success status and target info
167
+ */
168
+ execute: async (context) => {
169
+ await (0, discovery_js_1.waitForTarget)(context.page, targetType, targetValue, context.refMap, timeoutMs);
170
+ return {
171
+ found: true,
172
+ target: `${targetType}:${targetValue}`,
173
+ };
174
+ },
175
+ /**
176
+ * Returns the target element information for recording.
177
+ *
178
+ * @returns Object containing the target type and value
179
+ */
180
+ getTarget: () => ({ [targetType]: targetValue }),
181
+ classifyError: error_classification_js_1.classifyWaitError,
182
+ /**
183
+ * Sanitizes input for knowledge store recording.
184
+ *
185
+ * @returns Sanitized input object with timeout information
186
+ */
187
+ sanitizeInputForRecording: () => ({ timeoutMs }),
188
+ });
189
+ }
190
+ //# sourceMappingURL=interaction.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction.cjs","sourceRoot":"","sources":["../../../src/mcp-server/tools/interaction.ts"],"names":[],"mappings":"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","sourcesContent":["import { DEFAULT_INTERACTION_TIMEOUT_MS } from '../constants.js';\nimport { waitForTarget } from '../discovery.js';\nimport { getSessionManager } from '../session-manager.js';\nimport {\n classifyClickError,\n classifyTypeError,\n classifyWaitError,\n isPageClosedError,\n} from './error-classification.js';\nimport { runTool } from './run-tool.js';\nimport type {\n ClickInput,\n ClickResult,\n TypeInput,\n TypeResult,\n WaitForInput,\n WaitForResult,\n McpResponse,\n HandlerOptions,\n} from '../types';\nimport { ErrorCodes } from '../types';\nimport {\n createErrorResponse,\n validateTargetSelection,\n isValidTargetSelection,\n isInvalidTargetSelection,\n} from '../utils';\n\n/**\n * Handles clicking on an element specified by testId, selector, or accessibility reference.\n *\n * @param input The click input containing target selection and timeout options\n * @param options Optional handler configuration\n * @returns Promise resolving to click result with target information\n */\nexport async function handleClick(\n input: ClickInput,\n options?: HandlerOptions,\n): Promise<McpResponse<ClickResult>> {\n const startTime = Date.now();\n const sessionManager = getSessionManager();\n const sessionId = sessionManager.getSessionId();\n const timeoutMs = input.timeoutMs ?? DEFAULT_INTERACTION_TIMEOUT_MS;\n\n const validation = validateTargetSelection(input);\n if (isInvalidTargetSelection(validation)) {\n return createErrorResponse(\n ErrorCodes.MM_INVALID_INPUT,\n validation.error,\n { input },\n sessionId,\n startTime,\n );\n }\n\n if (!isValidTargetSelection(validation)) {\n return createErrorResponse(\n ErrorCodes.MM_INVALID_INPUT,\n 'Invalid target selection',\n { input },\n sessionId,\n startTime,\n );\n }\n\n const { type: targetType, value: targetValue } = validation;\n\n return runTool<ClickInput, ClickResult>({\n toolName: 'mm_click',\n input,\n options,\n\n /**\n * Executes the click action on the target element.\n *\n * @param context The tool execution context containing page and reference map\n * @returns Promise resolving to click result with success status and target info\n */\n execute: async (context) => {\n const locator = await waitForTarget(\n context.page,\n targetType,\n targetValue,\n context.refMap,\n timeoutMs,\n );\n\n try {\n await locator.click();\n return {\n clicked: true,\n target: `${targetType}:${targetValue}`,\n };\n } catch (clickError) {\n if (isPageClosedError(clickError)) {\n return {\n clicked: true,\n target: `${targetType}:${targetValue}`,\n pageClosedAfterClick: true,\n };\n }\n throw clickError;\n }\n },\n\n /**\n * Returns the target element information for recording.\n *\n * @returns Object containing the target type and value\n */\n getTarget: () => ({ [targetType]: targetValue }),\n\n classifyError: classifyClickError,\n\n /**\n * Sanitizes input for knowledge store recording.\n *\n * @returns Sanitized input object with timeout information\n */\n sanitizeInputForRecording: () => ({ timeoutMs }),\n });\n}\n\n/**\n * Handles typing text into an element specified by testId, selector, or accessibility reference.\n *\n * @param input The type input containing target selection, text, and timeout options\n * @param options Optional handler configuration\n * @returns Promise resolving to type result with target and text length information\n */\nexport async function handleType(\n input: TypeInput,\n options?: HandlerOptions,\n): Promise<McpResponse<TypeResult>> {\n const startTime = Date.now();\n const sessionManager = getSessionManager();\n const sessionId = sessionManager.getSessionId();\n const timeoutMs = input.timeoutMs ?? DEFAULT_INTERACTION_TIMEOUT_MS;\n\n const validation = validateTargetSelection(input);\n if (isInvalidTargetSelection(validation)) {\n return createErrorResponse(\n ErrorCodes.MM_INVALID_INPUT,\n validation.error,\n { input },\n sessionId,\n startTime,\n );\n }\n\n if (!isValidTargetSelection(validation)) {\n return createErrorResponse(\n ErrorCodes.MM_INVALID_INPUT,\n 'Invalid target selection',\n { input },\n sessionId,\n startTime,\n );\n }\n\n const { type: targetType, value: targetValue } = validation;\n\n return runTool<TypeInput, TypeResult>({\n toolName: 'mm_type',\n input,\n options,\n\n /**\n * Executes the type action on the target element.\n *\n * @param context The tool execution context containing page and reference map\n * @returns Promise resolving to type result with success status and text length\n */\n execute: async (context) => {\n const locator = await waitForTarget(\n context.page,\n targetType,\n targetValue,\n context.refMap,\n timeoutMs,\n );\n await locator.fill(input.text);\n\n return {\n typed: true,\n target: `${targetType}:${targetValue}`,\n textLength: input.text.length,\n };\n },\n\n /**\n * Returns the target element information for recording.\n *\n * @returns Object containing the target type and value\n */\n getTarget: () => ({ [targetType]: targetValue }),\n\n classifyError: classifyTypeError,\n\n /**\n * Sanitizes input for knowledge store recording.\n *\n * @returns Sanitized input object with timeout and text information\n */\n sanitizeInputForRecording: () => ({\n timeoutMs,\n text: input.text,\n testId: input.testId,\n selector: input.selector,\n a11yRef: input.a11yRef,\n }),\n });\n}\n\n/**\n * Handles waiting for an element to become visible.\n *\n * @param input The wait input containing target selection and timeout options\n * @param options Optional handler configuration\n * @returns Promise resolving to wait result with target information\n */\nexport async function handleWaitFor(\n input: WaitForInput,\n options?: HandlerOptions,\n): Promise<McpResponse<WaitForResult>> {\n const startTime = Date.now();\n const sessionManager = getSessionManager();\n const sessionId = sessionManager.getSessionId();\n const timeoutMs = input.timeoutMs ?? DEFAULT_INTERACTION_TIMEOUT_MS;\n\n const validation = validateTargetSelection(input);\n if (isInvalidTargetSelection(validation)) {\n return createErrorResponse(\n ErrorCodes.MM_INVALID_INPUT,\n validation.error,\n { input },\n sessionId,\n startTime,\n );\n }\n\n if (!isValidTargetSelection(validation)) {\n return createErrorResponse(\n ErrorCodes.MM_INVALID_INPUT,\n 'Invalid target selection',\n { input },\n sessionId,\n startTime,\n );\n }\n\n const { type: targetType, value: targetValue } = validation;\n\n return runTool<WaitForInput, WaitForResult>({\n toolName: 'mm_wait_for',\n input,\n options,\n\n /**\n * Executes the wait action for the target element.\n *\n * @param context The tool execution context containing page and reference map\n * @returns Promise resolving to wait result with success status and target info\n */\n execute: async (context) => {\n await waitForTarget(\n context.page,\n targetType,\n targetValue,\n context.refMap,\n timeoutMs,\n );\n\n return {\n found: true,\n target: `${targetType}:${targetValue}`,\n };\n },\n\n /**\n * Returns the target element information for recording.\n *\n * @returns Object containing the target type and value\n */\n getTarget: () => ({ [targetType]: targetValue }),\n\n classifyError: classifyWaitError,\n\n /**\n * Sanitizes input for knowledge store recording.\n *\n * @returns Sanitized input object with timeout information\n */\n sanitizeInputForRecording: () => ({ timeoutMs }),\n });\n}\n"]}
@@ -0,0 +1,26 @@
1
+ import type { ClickInput, ClickResult, TypeInput, TypeResult, WaitForInput, WaitForResult, McpResponse, HandlerOptions } from "../types/index.cjs";
2
+ /**
3
+ * Handles clicking on an element specified by testId, selector, or accessibility reference.
4
+ *
5
+ * @param input The click input containing target selection and timeout options
6
+ * @param options Optional handler configuration
7
+ * @returns Promise resolving to click result with target information
8
+ */
9
+ export declare function handleClick(input: ClickInput, options?: HandlerOptions): Promise<McpResponse<ClickResult>>;
10
+ /**
11
+ * Handles typing text into an element specified by testId, selector, or accessibility reference.
12
+ *
13
+ * @param input The type input containing target selection, text, and timeout options
14
+ * @param options Optional handler configuration
15
+ * @returns Promise resolving to type result with target and text length information
16
+ */
17
+ export declare function handleType(input: TypeInput, options?: HandlerOptions): Promise<McpResponse<TypeResult>>;
18
+ /**
19
+ * Handles waiting for an element to become visible.
20
+ *
21
+ * @param input The wait input containing target selection and timeout options
22
+ * @param options Optional handler configuration
23
+ * @returns Promise resolving to wait result with target information
24
+ */
25
+ export declare function handleWaitFor(input: WaitForInput, options?: HandlerOptions): Promise<McpResponse<WaitForResult>>;
26
+ //# sourceMappingURL=interaction.d.cts.map