@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 @@
1
+ {"version":3,"file":"definitions.mjs","sourceRoot":"","sources":["../../../src/mcp-server/tools/definitions.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ZodType } from 'zod';\n\nimport {\n buildInputSchema,\n launchInputSchema,\n cleanupInputSchema,\n getStateInputSchema,\n navigateInputSchema,\n waitForNotificationInputSchema,\n switchToTabInputSchema,\n closeTabInputSchema,\n listTestIdsInputSchema,\n accessibilitySnapshotInputSchema,\n describeScreenInputSchema,\n screenshotInputSchema,\n clickInputSchema,\n typeInputSchema,\n waitForInputSchema,\n knowledgeLastInputSchema,\n knowledgeSearchInputSchema,\n knowledgeSummarizeInputSchema,\n knowledgeSessionsInputSchema,\n seedContractInputSchema,\n seedContractsInputSchema,\n getContractAddressInputSchema,\n listDeployedContractsInputSchema,\n runStepsInputSchema,\n setContextInputSchema,\n getContextInputSchema,\n clipboardInputSchema,\n} from '../schemas.js';\nimport { getSessionManager } from '../session-manager.js';\nimport { handleRunSteps } from './batch.js';\nimport type { ToolHandler } from './batch.js';\nimport type { BuildToolOptions } from './build.js';\nimport { handleBuild } from './build.js';\nimport { handleCleanup } from './cleanup.js';\nimport { handleClipboard } from './clipboard.js';\nimport { handleSetContext, handleGetContext } from './context.js';\nimport {\n handleListTestIds,\n handleAccessibilitySnapshot,\n handleDescribeScreen,\n} from './discovery-tools.js';\nimport { handleClick, handleType, handleWaitFor } from './interaction.js';\nimport {\n handleKnowledgeLast,\n handleKnowledgeSearch,\n handleKnowledgeSummarize,\n handleKnowledgeSessions,\n} from './knowledge.js';\nimport { handleLaunch } from './launch.js';\nimport {\n handleNavigate,\n handleWaitForNotification,\n handleSwitchToTab,\n handleCloseTab,\n} from './navigation.js';\nimport { handleScreenshot } from './screenshot.js';\nimport {\n handleSeedContract,\n handleSeedContracts,\n handleGetContractAddress,\n handleListDeployedContracts,\n} from './seeding.js';\nimport type { SeedingToolOptions } from './seeding.js';\nimport { handleGetState } from './state.js';\nimport type { StateToolOptions } from './state.js';\nimport type {\n SeedContractInput,\n SeedContractsInput,\n GetContractAddressInput,\n ListDeployedContractsInput,\n} from '../types';\n\nexport const TOOL_PREFIX = 'mm';\n\nexport type ToolDefinition = {\n name: string;\n description: string;\n inputSchema: Record<string, unknown>;\n};\n\ntype ZodSchema = ZodType<unknown> & { toJSONSchema(): Record<string, unknown> };\n\ntype ToolEntry = {\n schema: ZodSchema;\n description: string;\n handler: ToolHandler;\n};\n\n/**\n * Create a handler for the build tool that injects build capability.\n *\n * @returns A tool handler function for building the extension\n */\nfunction createBuildHandler(): ToolHandler {\n return async (input, options) => {\n const sessionManager = getSessionManager();\n const buildOptions: BuildToolOptions = {\n ...options,\n buildCapability: sessionManager.getBuildCapability?.(),\n };\n return handleBuild(input, buildOptions);\n };\n}\n\n/**\n * Create a handler for the state tool that injects state snapshot capability.\n *\n * @returns A tool handler function for getting extension state\n */\nfunction createStateHandler(): ToolHandler {\n return async (_, options) => {\n const sessionManager = getSessionManager();\n const stateOptions: StateToolOptions = {\n ...options,\n stateSnapshotCapability: sessionManager.getStateSnapshotCapability?.(),\n };\n return handleGetState(stateOptions);\n };\n}\n\n/**\n * Create a handler for the seed contract tool that injects seeding capability.\n *\n * @returns A tool handler function for deploying a single contract\n */\nfunction createSeedContractHandler(): ToolHandler {\n return async (input, options) => {\n const sessionManager = getSessionManager();\n const seedingOptions: SeedingToolOptions = {\n ...options,\n seedingCapability: sessionManager.getContractSeedingCapability?.(),\n };\n return handleSeedContract(input as SeedContractInput, seedingOptions);\n };\n}\n\n/**\n * Create a handler for the seed contracts tool that injects seeding capability.\n *\n * @returns A tool handler function for deploying multiple contracts\n */\nfunction createSeedContractsHandler(): ToolHandler {\n return async (input, options) => {\n const sessionManager = getSessionManager();\n const seedingOptions: SeedingToolOptions = {\n ...options,\n seedingCapability: sessionManager.getContractSeedingCapability?.(),\n };\n return handleSeedContracts(input as SeedContractsInput, seedingOptions);\n };\n}\n\n/**\n * Create a handler for the get contract address tool that injects seeding capability.\n *\n * @returns A tool handler function for retrieving a deployed contract address\n */\nfunction createGetContractAddressHandler(): ToolHandler {\n return async (input, options) => {\n const sessionManager = getSessionManager();\n const seedingOptions: SeedingToolOptions = {\n ...options,\n seedingCapability: sessionManager.getContractSeedingCapability?.(),\n };\n return handleGetContractAddress(\n input as GetContractAddressInput,\n seedingOptions,\n );\n };\n}\n\n/**\n * Create a handler for the list contracts tool that injects seeding capability.\n *\n * @returns A tool handler function for listing deployed contracts\n */\nfunction createListDeployedContractsHandler(): ToolHandler {\n return async (input, options) => {\n const sessionManager = getSessionManager();\n const seedingOptions: SeedingToolOptions = {\n ...options,\n seedingCapability: sessionManager.getContractSeedingCapability?.(),\n };\n return handleListDeployedContracts(\n input as ListDeployedContractsInput,\n seedingOptions,\n );\n };\n}\n\nconst tools: Record<string, ToolEntry> = {\n build: {\n schema: buildInputSchema,\n description: `Build the extension using yarn build:test. Call before ${TOOL_PREFIX}_launch if extension is not built.`,\n handler: createBuildHandler(),\n },\n launch: {\n schema: launchInputSchema,\n description:\n 'Launch extension in a headed Chrome browser with Playwright. Returns session info and initial state.',\n handler: handleLaunch as ToolHandler,\n },\n cleanup: {\n schema: cleanupInputSchema,\n description:\n 'Stop the browser, Anvil, and all services. Always call when done.',\n handler: handleCleanup as ToolHandler,\n },\n get_state: {\n schema: getStateInputSchema,\n description:\n 'Get current extension state including screen, URL, balance, network, and account address.',\n handler: createStateHandler(),\n },\n navigate: {\n schema: navigateInputSchema,\n description: 'Navigate to a specific screen in the extension.',\n handler: handleNavigate as ToolHandler,\n },\n wait_for_notification: {\n schema: waitForNotificationInputSchema,\n description:\n 'Wait for notification popup to appear (e.g., after dapp interaction). Sets the notification page as the active page for subsequent interactions.',\n handler: handleWaitForNotification as ToolHandler,\n },\n switch_to_tab: {\n schema: switchToTabInputSchema,\n description: `Switch the active page to a different tracked tab. Use this to direct ${TOOL_PREFIX}_click, ${TOOL_PREFIX}_type, and other interaction tools to a specific page.`,\n handler: handleSwitchToTab as ToolHandler,\n },\n close_tab: {\n schema: closeTabInputSchema,\n description:\n 'Close a specific tab by role or URL. Cannot close the extension home page. If closing the active tab, automatically switches to extension home.',\n handler: handleCloseTab as ToolHandler,\n },\n list_testids: {\n schema: listTestIdsInputSchema,\n description:\n 'List all visible data-testid attributes on the current page. Use to discover available interaction targets.',\n handler: handleListTestIds as ToolHandler,\n },\n accessibility_snapshot: {\n schema: accessibilitySnapshotInputSchema,\n description: `Get trimmed accessibility tree with deterministic refs (e1, e2, ...). Use refs with ${TOOL_PREFIX}_click/${TOOL_PREFIX}_type.`,\n handler: handleAccessibilitySnapshot as ToolHandler,\n },\n describe_screen: {\n schema: describeScreenInputSchema,\n description:\n 'Get comprehensive screen state: extension state + testIds + accessibility snapshot. Optional screenshot.',\n handler: handleDescribeScreen as ToolHandler,\n },\n screenshot: {\n schema: screenshotInputSchema,\n description: 'Take a screenshot and save to test-artifacts/screenshots/',\n handler: handleScreenshot as ToolHandler,\n },\n click: {\n schema: clickInputSchema,\n description:\n 'Click an element. Specify exactly one of: a11yRef, testId, or selector.',\n handler: handleClick as ToolHandler,\n },\n type: {\n schema: typeInputSchema,\n description:\n 'Type text into an element. Specify exactly one of: a11yRef, testId, or selector.',\n handler: handleType as ToolHandler,\n },\n wait_for: {\n schema: waitForInputSchema,\n description:\n 'Wait for an element to become visible. Specify exactly one of: a11yRef, testId, or selector.',\n handler: handleWaitFor as ToolHandler,\n },\n knowledge_last: {\n schema: knowledgeLastInputSchema,\n description:\n 'Get the last N step records from the knowledge store for the current session.',\n handler: handleKnowledgeLast as ToolHandler,\n },\n knowledge_search: {\n schema: knowledgeSearchInputSchema,\n description:\n 'Search step records by tool name, screen, testId, or accessibility names. Default searches all sessions.',\n handler: handleKnowledgeSearch as ToolHandler,\n },\n knowledge_summarize: {\n schema: knowledgeSummarizeInputSchema,\n description: 'Generate a recipe-like summary of steps taken in a session.',\n handler: handleKnowledgeSummarize as ToolHandler,\n },\n knowledge_sessions: {\n schema: knowledgeSessionsInputSchema,\n description:\n 'List recent sessions with metadata for cross-session knowledge retrieval.',\n handler: handleKnowledgeSessions as ToolHandler,\n },\n seed_contract: {\n schema: seedContractInputSchema,\n description:\n 'Deploy a smart contract to the local Anvil node. Available: hst (ERC20 TST token), nfts (ERC721), erc1155, piggybank, failing (reverts), multisig, entrypoint (ERC-4337), simpleAccountFactory, verifyingPaymaster.',\n handler: createSeedContractHandler(),\n },\n seed_contracts: {\n schema: seedContractsInputSchema,\n description: 'Deploy multiple smart contracts in sequence.',\n handler: createSeedContractsHandler(),\n },\n get_contract_address: {\n schema: getContractAddressInputSchema,\n description: 'Get the deployed address of a smart contract.',\n handler: createGetContractAddressHandler(),\n },\n list_contracts: {\n schema: listDeployedContractsInputSchema,\n description: 'List all smart contracts deployed in this session.',\n handler: createListDeployedContractsHandler(),\n },\n run_steps: {\n schema: runStepsInputSchema,\n description:\n 'Execute multiple tools in sequence. Reduces round trips for multi-step flows.',\n handler: handleRunSteps as ToolHandler,\n },\n set_context: {\n schema: setContextInputSchema,\n description:\n 'Switch workflow context (e2e or prod). Cannot switch during active session.',\n handler: handleSetContext as ToolHandler,\n },\n get_context: {\n schema: getContextInputSchema,\n description:\n 'Get current context, available capabilities, and whether context can be switched.',\n handler: handleGetContext as ToolHandler,\n },\n clipboard: {\n schema: clipboardInputSchema,\n description:\n \"Write text to or read text from the browser clipboard. Use action='write' with text parameter to write, or action='read' to read current clipboard content. Useful for pasting SRP or other data into components that have paste handlers.\",\n handler: handleClipboard as ToolHandler,\n },\n};\n\n/**\n * Zod v4's toJSONSchema() marks properties with defaults as required.\n * This is incorrect for MCP tool input schemas where LLM clients shouldn't\n * be required to provide values that have defaults. This function recursively\n * removes those properties from the required array.\n *\n * @param schema The JSON schema to process\n * @returns The modified schema with defaults removed from required array\n */\nfunction removeDefaultsFromRequired(\n schema: Record<string, unknown>,\n): Record<string, unknown> {\n const result = { ...schema };\n\n if (Array.isArray(result.allOf)) {\n result.allOf = result.allOf.map((item: Record<string, unknown>) =>\n removeDefaultsFromRequired(item),\n );\n }\n\n if (Array.isArray(result.anyOf)) {\n result.anyOf = result.anyOf.map((item: Record<string, unknown>) =>\n removeDefaultsFromRequired(item),\n );\n }\n\n if (Array.isArray(result.oneOf)) {\n result.oneOf = result.oneOf.map((item: Record<string, unknown>) =>\n removeDefaultsFromRequired(item),\n );\n }\n\n if (\n result.properties &&\n typeof result.properties === 'object' &&\n result.properties !== null\n ) {\n const newProperties: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(\n result.properties as Record<string, unknown>,\n )) {\n if (value && typeof value === 'object') {\n newProperties[key] = removeDefaultsFromRequired(\n value as Record<string, unknown>,\n );\n } else {\n newProperties[key] = value;\n }\n }\n result.properties = newProperties;\n }\n\n if (\n Array.isArray(result.required) &&\n result.properties &&\n typeof result.properties === 'object'\n ) {\n const properties = result.properties as Record<\n string,\n Record<string, unknown>\n >;\n result.required = result.required.filter((propName: string) => {\n const prop = properties[propName];\n return prop && !('default' in prop);\n });\n\n if ((result.required as string[]).length === 0) {\n delete result.required;\n }\n }\n\n return result;\n}\n\n/**\n * MCP protocol doesn't support allOf/oneOf/anyOf at the top level of input schemas.\n * This flattens allOf into a single merged object schema.\n *\n * @param schema The JSON schema to flatten\n * @returns The flattened schema with allOf merged into properties\n */\nfunction flattenTopLevelAllOf(\n schema: Record<string, unknown>,\n): Record<string, unknown> {\n if (!Array.isArray(schema.allOf)) {\n return schema;\n }\n\n const mergedProperties: Record<string, unknown> = {};\n const mergedRequired: string[] = [];\n\n for (const subSchema of schema.allOf as Record<string, unknown>[]) {\n if (subSchema.properties && typeof subSchema.properties === 'object') {\n Object.assign(mergedProperties, subSchema.properties);\n }\n if (Array.isArray(subSchema.required)) {\n mergedRequired.push(...subSchema.required);\n }\n }\n\n const result: Record<string, unknown> = {\n type: 'object',\n properties: mergedProperties,\n additionalProperties: false,\n };\n\n if (mergedRequired.length > 0) {\n result.required = [...new Set(mergedRequired)];\n }\n\n return result;\n}\n\n/**\n * Convert a Zod schema to a JSON schema suitable for MCP tool definitions.\n *\n * @param schema The Zod schema to convert\n * @returns The converted JSON schema with defaults removed and allOf flattened\n */\nfunction zodSchemaToJsonSchema(schema: ZodSchema): Record<string, unknown> {\n const jsonSchema = schema.toJSONSchema();\n const { $schema: _, ...rest } = jsonSchema;\n\n const flattened = flattenTopLevelAllOf(rest);\n\n if (flattened.type === 'object' && !('additionalProperties' in flattened)) {\n flattened.additionalProperties = false;\n }\n\n return removeDefaultsFromRequired(flattened);\n}\n\n/**\n * Get all tool definitions with their schemas and descriptions.\n *\n * @returns Array of tool definitions for all available MCP tools\n */\nexport function getToolDefinitions(): ToolDefinition[] {\n return Object.entries(tools).map(([baseName, tool]) => ({\n name: `${TOOL_PREFIX}_${baseName}`,\n description: tool.description,\n inputSchema: zodSchemaToJsonSchema(tool.schema),\n }));\n}\n\n/**\n * Get the handler function for a specific tool by name.\n *\n * @param name The tool name (with or without mm_ prefix)\n * @returns The tool handler function or undefined if tool not found\n */\nexport function getToolHandler(name: string): ToolHandler | undefined {\n const prefixedMatch = Object.entries(tools).find(\n ([baseName]) => `${TOOL_PREFIX}_${baseName}` === name,\n );\n if (prefixedMatch) {\n return prefixedMatch[1].handler;\n }\n\n const tool = tools[name];\n return tool?.handler;\n}\n\n/**\n * Check if a tool handler exists for the given tool name.\n *\n * @param name The tool name to check\n * @returns True if a handler exists for the tool, false otherwise\n */\nexport function hasToolHandler(name: string): boolean {\n return getToolHandler(name) !== undefined;\n}\n\n/**\n * Extract the base name from a tool name by removing the mm_ prefix.\n *\n * @param toolName The tool name (with or without mm_ prefix)\n * @returns The base name without the prefix\n */\nexport function extractBaseName(toolName: string): string {\n const prefixWithUnderscore = `${TOOL_PREFIX}_`;\n if (toolName.startsWith(prefixWithUnderscore)) {\n return toolName.slice(prefixWithUnderscore.length);\n }\n return toolName;\n}\n\n/**\n * Validate tool input against the tool's schema and return parsed data.\n *\n * @param toolName The tool name to validate input for\n * @param input The input data to validate\n * @returns The validated and parsed input data\n */\nexport function validateToolInput<Type = unknown>(\n toolName: string,\n input: unknown,\n): Type {\n const baseName = extractBaseName(toolName);\n const tool = tools[baseName];\n\n if (!tool) {\n throw new Error(`Unknown tool: ${toolName}`);\n }\n\n return tool.schema.parse(input ?? {}) as Type;\n}\n\n/**\n * Safely validate tool input without throwing errors.\n *\n * @param toolName The tool name to validate input for\n * @param input The input data to validate\n * @returns Object with success flag and either parsed data or error message\n */\nexport function safeValidateToolInput(\n toolName: string,\n input: unknown,\n):\n | {\n /**\n * Indicates validation succeeded\n */\n success: true;\n /**\n * The validated and parsed input data\n */\n data: unknown;\n }\n | {\n /**\n * Indicates validation failed\n */\n success: false;\n /**\n * Error message describing validation failure\n */\n error: string;\n } {\n const baseName = extractBaseName(toolName);\n const tool = tools[baseName];\n\n if (!tool) {\n return { success: false, error: `Unknown tool: ${toolName}` };\n }\n\n const result = tool.schema.safeParse(input ?? {});\n if (!result.success) {\n const errorMessage = result.error.issues\n .map((issue) => `${issue.path.join('.')}: ${issue.message}`)\n .join('; ');\n return { success: false, error: errorMessage };\n }\n\n return { success: true, data: result.data };\n}\n\n/**\n * Get all available tool base names (without mm_ prefix).\n *\n * @returns Array of tool base names\n */\nexport function getToolNames(): string[] {\n return Object.keys(tools);\n}\n\n/**\n * Get all available tool names with mm_ prefix.\n *\n * @returns Array of prefixed tool names\n */\nexport function getPrefixedToolNames(): string[] {\n return Object.keys(tools).map((name) => `${TOOL_PREFIX}_${name}`);\n}\n\n/**\n * Build a record mapping prefixed tool names to their handler functions.\n *\n * @returns Record of tool name to handler function mappings\n */\nexport function buildToolHandlersRecord(): Record<string, ToolHandler> {\n const handlers: Record<string, ToolHandler> = {};\n for (const [baseName, tool] of Object.entries(tools)) {\n handlers[`${TOOL_PREFIX}_${baseName}`] = tool.handler;\n }\n return handlers;\n}\n\nexport type { ToolEntry };\n"]}
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleListTestIds = handleListTestIds;
4
+ exports.handleAccessibilitySnapshot = handleAccessibilitySnapshot;
5
+ exports.handleDescribeScreen = handleDescribeScreen;
6
+ const constants_js_1 = require("../constants.cjs");
7
+ const discovery_js_1 = require("../discovery.cjs");
8
+ const knowledge_store_js_1 = require("../knowledge-store.cjs");
9
+ const session_manager_js_1 = require("../session-manager.cjs");
10
+ const error_classification_js_1 = require("./error-classification.cjs");
11
+ const run_tool_js_1 = require("./run-tool.cjs");
12
+ /**
13
+ * Handle listing all visible data-testid attributes on the current page.
14
+ *
15
+ * @param input The input containing optional limit for number of items
16
+ * @param options Optional handler options for the operation
17
+ * @returns Promise resolving to list of visible test IDs with metadata
18
+ */
19
+ async function handleListTestIds(input, options) {
20
+ const limit = input.limit ?? constants_js_1.DEFAULT_TESTID_LIMIT;
21
+ return (0, run_tool_js_1.runTool)({
22
+ toolName: 'mm_list_testids',
23
+ input,
24
+ options,
25
+ observationPolicy: 'custom',
26
+ /**
27
+ * Execute the list test IDs operation.
28
+ *
29
+ * @param context The workflow context containing the page
30
+ * @returns The result with test ID items and observation data
31
+ */
32
+ execute: async (context) => {
33
+ const items = await (0, discovery_js_1.collectTestIds)(context.page, limit);
34
+ const state = await (0, session_manager_js_1.getSessionManager)().getExtensionState();
35
+ const { nodes, refMap } = await (0, discovery_js_1.collectTrimmedA11ySnapshot)(context.page);
36
+ (0, session_manager_js_1.getSessionManager)().setRefMap(refMap);
37
+ return {
38
+ result: { items },
39
+ observation: (0, knowledge_store_js_1.createDefaultObservation)(state, items, nodes),
40
+ };
41
+ },
42
+ classifyError: error_classification_js_1.classifyDiscoveryError,
43
+ /**
44
+ * Sanitizes input for recording by extracting only the limit parameter.
45
+ *
46
+ * @returns Sanitized input with limit value
47
+ */
48
+ sanitizeInputForRecording: () => ({ limit }),
49
+ });
50
+ }
51
+ /**
52
+ * Handle getting a trimmed accessibility tree with deterministic refs.
53
+ *
54
+ * @param input The input containing optional root selector for scoping
55
+ * @param options Optional handler options for the operation
56
+ * @returns Promise resolving to accessibility nodes with deterministic refs
57
+ */
58
+ async function handleAccessibilitySnapshot(input, options) {
59
+ return (0, run_tool_js_1.runTool)({
60
+ toolName: 'mm_accessibility_snapshot',
61
+ input,
62
+ options,
63
+ observationPolicy: 'custom',
64
+ /**
65
+ * Execute the accessibility snapshot operation.
66
+ *
67
+ * @param context The workflow context containing the page
68
+ * @returns The result with accessibility nodes and observation data
69
+ */
70
+ execute: async (context) => {
71
+ const { nodes, refMap } = await (0, discovery_js_1.collectTrimmedA11ySnapshot)(context.page, input.rootSelector);
72
+ (0, session_manager_js_1.getSessionManager)().setRefMap(refMap);
73
+ const state = await (0, session_manager_js_1.getSessionManager)().getExtensionState();
74
+ const testIds = await (0, discovery_js_1.collectTestIds)(context.page, constants_js_1.OBSERVATION_TESTID_LIMIT);
75
+ return {
76
+ result: { nodes },
77
+ observation: (0, knowledge_store_js_1.createDefaultObservation)(state, testIds, nodes),
78
+ };
79
+ },
80
+ classifyError: error_classification_js_1.classifyDiscoveryError,
81
+ /**
82
+ * Sanitizes input for recording by extracting only the root selector.
83
+ *
84
+ * @returns Sanitized input with rootSelector value
85
+ */
86
+ sanitizeInputForRecording: () => ({ rootSelector: input.rootSelector }),
87
+ });
88
+ }
89
+ /**
90
+ * Handle getting comprehensive screen state with state, testIds, a11y, and optional screenshot.
91
+ *
92
+ * @param input The input containing screenshot options and selector
93
+ * @param options Optional handler options for the operation
94
+ * @returns Promise resolving to comprehensive screen description with prior knowledge
95
+ */
96
+ async function handleDescribeScreen(input, options) {
97
+ return (0, run_tool_js_1.runTool)({
98
+ toolName: 'mm_describe_screen',
99
+ input,
100
+ options,
101
+ observationPolicy: 'custom',
102
+ /**
103
+ * Execute the describe screen operation.
104
+ *
105
+ * @param context The workflow context containing the page
106
+ * @returns The result with state, testIds, a11y, screenshot, and prior knowledge
107
+ */
108
+ execute: async (context) => {
109
+ const sessionManager = (0, session_manager_js_1.getSessionManager)();
110
+ const { page } = context;
111
+ const state = await sessionManager.getExtensionState();
112
+ const testIds = await (0, discovery_js_1.collectTestIds)(page, constants_js_1.DEFAULT_TESTID_LIMIT);
113
+ const { nodes, refMap } = await (0, discovery_js_1.collectTrimmedA11ySnapshot)(page);
114
+ sessionManager.setRefMap(refMap);
115
+ let screenshot = null;
116
+ if (input.includeScreenshot) {
117
+ const screenshotName = input.screenshotName ?? 'describe-screen';
118
+ const result = await sessionManager.screenshot({
119
+ name: screenshotName,
120
+ fullPage: true,
121
+ });
122
+ screenshot = {
123
+ path: result.path,
124
+ width: result.width,
125
+ height: result.height,
126
+ base64: input.includeScreenshotBase64 ? result.base64 : null,
127
+ };
128
+ }
129
+ const sessionMetadata = sessionManager.getSessionMetadata();
130
+ const priorKnowledgeContext = {
131
+ currentScreen: state.currentScreen,
132
+ currentUrl: state.currentUrl,
133
+ visibleTestIds: testIds,
134
+ a11yNodes: nodes,
135
+ currentSessionFlowTags: sessionMetadata?.flowTags,
136
+ };
137
+ const priorKnowledge = await knowledge_store_js_1.knowledgeStore.generatePriorKnowledge(priorKnowledgeContext, context.sessionId);
138
+ const observation = (0, knowledge_store_js_1.createDefaultObservation)(state, testIds, nodes, priorKnowledge);
139
+ return {
140
+ result: {
141
+ state,
142
+ testIds: { items: testIds },
143
+ a11y: { nodes },
144
+ screenshot,
145
+ priorKnowledge,
146
+ },
147
+ observation,
148
+ };
149
+ },
150
+ classifyError: error_classification_js_1.classifyDiscoveryError,
151
+ /**
152
+ * Sanitizes input for recording by extracting screenshot-related parameters.
153
+ *
154
+ * @returns Sanitized input with screenshot options
155
+ */
156
+ sanitizeInputForRecording: () => ({
157
+ includeScreenshot: input.includeScreenshot,
158
+ screenshotName: input.screenshotName,
159
+ }),
160
+ });
161
+ }
162
+ //# sourceMappingURL=discovery-tools.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery-tools.cjs","sourceRoot":"","sources":["../../../src/mcp-server/tools/discovery-tools.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DEFAULT_TESTID_LIMIT,\n OBSERVATION_TESTID_LIMIT,\n} 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 { classifyDiscoveryError } from './error-classification.js';\nimport { runTool } from './run-tool.js';\nimport type {\n ListTestIdsInput,\n ListTestIdsResult,\n AccessibilitySnapshotInput,\n AccessibilitySnapshotResult,\n DescribeScreenInput,\n DescribeScreenResult,\n McpResponse,\n PriorKnowledgeContext,\n HandlerOptions,\n} from '../types';\n\n/**\n * Handle listing all visible data-testid attributes on the current page.\n *\n * @param input The input containing optional limit for number of items\n * @param options Optional handler options for the operation\n * @returns Promise resolving to list of visible test IDs with metadata\n */\nexport async function handleListTestIds(\n input: ListTestIdsInput,\n options?: HandlerOptions,\n): Promise<McpResponse<ListTestIdsResult>> {\n const limit = input.limit ?? DEFAULT_TESTID_LIMIT;\n\n return runTool<ListTestIdsInput, ListTestIdsResult>({\n toolName: 'mm_list_testids',\n input,\n options,\n observationPolicy: 'custom',\n\n /**\n * Execute the list test IDs operation.\n *\n * @param context The workflow context containing the page\n * @returns The result with test ID items and observation data\n */\n execute: async (context) => {\n const items = await collectTestIds(context.page, limit);\n const state = await getSessionManager().getExtensionState();\n const { nodes, refMap } = await collectTrimmedA11ySnapshot(context.page);\n\n getSessionManager().setRefMap(refMap);\n\n return {\n result: { items },\n observation: createDefaultObservation(state, items, nodes),\n };\n },\n\n classifyError: classifyDiscoveryError,\n\n /**\n * Sanitizes input for recording by extracting only the limit parameter.\n *\n * @returns Sanitized input with limit value\n */\n sanitizeInputForRecording: () => ({ limit }),\n });\n}\n\n/**\n * Handle getting a trimmed accessibility tree with deterministic refs.\n *\n * @param input The input containing optional root selector for scoping\n * @param options Optional handler options for the operation\n * @returns Promise resolving to accessibility nodes with deterministic refs\n */\nexport async function handleAccessibilitySnapshot(\n input: AccessibilitySnapshotInput,\n options?: HandlerOptions,\n): Promise<McpResponse<AccessibilitySnapshotResult>> {\n return runTool<AccessibilitySnapshotInput, AccessibilitySnapshotResult>({\n toolName: 'mm_accessibility_snapshot',\n input,\n options,\n observationPolicy: 'custom',\n\n /**\n * Execute the accessibility snapshot operation.\n *\n * @param context The workflow context containing the page\n * @returns The result with accessibility nodes and observation data\n */\n execute: async (context) => {\n const { nodes, refMap } = await collectTrimmedA11ySnapshot(\n context.page,\n input.rootSelector,\n );\n\n getSessionManager().setRefMap(refMap);\n\n const state = await getSessionManager().getExtensionState();\n const testIds = await collectTestIds(\n context.page,\n OBSERVATION_TESTID_LIMIT,\n );\n\n return {\n result: { nodes },\n observation: createDefaultObservation(state, testIds, nodes),\n };\n },\n\n classifyError: classifyDiscoveryError,\n\n /**\n * Sanitizes input for recording by extracting only the root selector.\n *\n * @returns Sanitized input with rootSelector value\n */\n sanitizeInputForRecording: () => ({ rootSelector: input.rootSelector }),\n });\n}\n\n/**\n * Handle getting comprehensive screen state with state, testIds, a11y, and optional screenshot.\n *\n * @param input The input containing screenshot options and selector\n * @param options Optional handler options for the operation\n * @returns Promise resolving to comprehensive screen description with prior knowledge\n */\nexport async function handleDescribeScreen(\n input: DescribeScreenInput,\n options?: HandlerOptions,\n): Promise<McpResponse<DescribeScreenResult>> {\n return runTool<DescribeScreenInput, DescribeScreenResult>({\n toolName: 'mm_describe_screen',\n input,\n options,\n observationPolicy: 'custom',\n\n /**\n * Execute the describe screen operation.\n *\n * @param context The workflow context containing the page\n * @returns The result with state, testIds, a11y, screenshot, and prior knowledge\n */\n execute: async (context) => {\n const sessionManager = getSessionManager();\n const { page } = context;\n\n const state = await sessionManager.getExtensionState();\n const testIds = await collectTestIds(page, DEFAULT_TESTID_LIMIT);\n const { nodes, refMap } = await collectTrimmedA11ySnapshot(page);\n\n sessionManager.setRefMap(refMap);\n\n let screenshot: DescribeScreenResult['screenshot'] = null;\n\n if (input.includeScreenshot) {\n const screenshotName = input.screenshotName ?? 'describe-screen';\n const result = await sessionManager.screenshot({\n name: screenshotName,\n fullPage: true,\n });\n\n screenshot = {\n path: result.path,\n width: result.width,\n height: result.height,\n base64: input.includeScreenshotBase64 ? result.base64 : null,\n };\n }\n\n const sessionMetadata = sessionManager.getSessionMetadata();\n const priorKnowledgeContext: PriorKnowledgeContext = {\n currentScreen: state.currentScreen,\n currentUrl: state.currentUrl,\n visibleTestIds: testIds,\n a11yNodes: nodes,\n currentSessionFlowTags: sessionMetadata?.flowTags,\n };\n\n const priorKnowledge = await knowledgeStore.generatePriorKnowledge(\n priorKnowledgeContext,\n context.sessionId,\n );\n\n const observation = createDefaultObservation(\n state,\n testIds,\n nodes,\n priorKnowledge,\n );\n\n return {\n result: {\n state,\n testIds: { items: testIds },\n a11y: { nodes },\n screenshot,\n priorKnowledge,\n },\n observation,\n };\n },\n\n classifyError: classifyDiscoveryError,\n\n /**\n * Sanitizes input for recording by extracting screenshot-related parameters.\n *\n * @returns Sanitized input with screenshot options\n */\n sanitizeInputForRecording: () => ({\n includeScreenshot: input.includeScreenshot,\n screenshotName: input.screenshotName,\n }),\n });\n}\n"]}
@@ -0,0 +1,26 @@
1
+ import type { ListTestIdsInput, ListTestIdsResult, AccessibilitySnapshotInput, AccessibilitySnapshotResult, DescribeScreenInput, DescribeScreenResult, McpResponse, HandlerOptions } from "../types/index.cjs";
2
+ /**
3
+ * Handle listing all visible data-testid attributes on the current page.
4
+ *
5
+ * @param input The input containing optional limit for number of items
6
+ * @param options Optional handler options for the operation
7
+ * @returns Promise resolving to list of visible test IDs with metadata
8
+ */
9
+ export declare function handleListTestIds(input: ListTestIdsInput, options?: HandlerOptions): Promise<McpResponse<ListTestIdsResult>>;
10
+ /**
11
+ * Handle getting a trimmed accessibility tree with deterministic refs.
12
+ *
13
+ * @param input The input containing optional root selector for scoping
14
+ * @param options Optional handler options for the operation
15
+ * @returns Promise resolving to accessibility nodes with deterministic refs
16
+ */
17
+ export declare function handleAccessibilitySnapshot(input: AccessibilitySnapshotInput, options?: HandlerOptions): Promise<McpResponse<AccessibilitySnapshotResult>>;
18
+ /**
19
+ * Handle getting comprehensive screen state with state, testIds, a11y, and optional screenshot.
20
+ *
21
+ * @param input The input containing screenshot options and selector
22
+ * @param options Optional handler options for the operation
23
+ * @returns Promise resolving to comprehensive screen description with prior knowledge
24
+ */
25
+ export declare function handleDescribeScreen(input: DescribeScreenInput, options?: HandlerOptions): Promise<McpResponse<DescribeScreenResult>>;
26
+ //# sourceMappingURL=discovery-tools.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery-tools.d.cts","sourceRoot":"","sources":["../../../src/mcp-server/tools/discovery-tools.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,2BAA2B,EAC3B,mBAAmB,EACnB,oBAAoB,EACpB,WAAW,EAEX,cAAc,EACf,2BAAiB;AAElB;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,gBAAgB,EACvB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAqCzC;AAED;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,0BAA0B,EACjC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC,CA0CnD;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,mBAAmB,EAC1B,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAqF5C"}
@@ -0,0 +1,26 @@
1
+ import type { ListTestIdsInput, ListTestIdsResult, AccessibilitySnapshotInput, AccessibilitySnapshotResult, DescribeScreenInput, DescribeScreenResult, McpResponse, HandlerOptions } from "../types/index.mjs";
2
+ /**
3
+ * Handle listing all visible data-testid attributes on the current page.
4
+ *
5
+ * @param input The input containing optional limit for number of items
6
+ * @param options Optional handler options for the operation
7
+ * @returns Promise resolving to list of visible test IDs with metadata
8
+ */
9
+ export declare function handleListTestIds(input: ListTestIdsInput, options?: HandlerOptions): Promise<McpResponse<ListTestIdsResult>>;
10
+ /**
11
+ * Handle getting a trimmed accessibility tree with deterministic refs.
12
+ *
13
+ * @param input The input containing optional root selector for scoping
14
+ * @param options Optional handler options for the operation
15
+ * @returns Promise resolving to accessibility nodes with deterministic refs
16
+ */
17
+ export declare function handleAccessibilitySnapshot(input: AccessibilitySnapshotInput, options?: HandlerOptions): Promise<McpResponse<AccessibilitySnapshotResult>>;
18
+ /**
19
+ * Handle getting comprehensive screen state with state, testIds, a11y, and optional screenshot.
20
+ *
21
+ * @param input The input containing screenshot options and selector
22
+ * @param options Optional handler options for the operation
23
+ * @returns Promise resolving to comprehensive screen description with prior knowledge
24
+ */
25
+ export declare function handleDescribeScreen(input: DescribeScreenInput, options?: HandlerOptions): Promise<McpResponse<DescribeScreenResult>>;
26
+ //# sourceMappingURL=discovery-tools.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery-tools.d.mts","sourceRoot":"","sources":["../../../src/mcp-server/tools/discovery-tools.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,2BAA2B,EAC3B,mBAAmB,EACnB,oBAAoB,EACpB,WAAW,EAEX,cAAc,EACf,2BAAiB;AAElB;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,gBAAgB,EACvB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAqCzC;AAED;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,0BAA0B,EACjC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC,CA0CnD;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,mBAAmB,EAC1B,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAqF5C"}
@@ -0,0 +1,157 @@
1
+ import { DEFAULT_TESTID_LIMIT, 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 { classifyDiscoveryError } from "./error-classification.mjs";
6
+ import { runTool } from "./run-tool.mjs";
7
+ /**
8
+ * Handle listing all visible data-testid attributes on the current page.
9
+ *
10
+ * @param input The input containing optional limit for number of items
11
+ * @param options Optional handler options for the operation
12
+ * @returns Promise resolving to list of visible test IDs with metadata
13
+ */
14
+ export async function handleListTestIds(input, options) {
15
+ const limit = input.limit ?? DEFAULT_TESTID_LIMIT;
16
+ return runTool({
17
+ toolName: 'mm_list_testids',
18
+ input,
19
+ options,
20
+ observationPolicy: 'custom',
21
+ /**
22
+ * Execute the list test IDs operation.
23
+ *
24
+ * @param context The workflow context containing the page
25
+ * @returns The result with test ID items and observation data
26
+ */
27
+ execute: async (context) => {
28
+ const items = await collectTestIds(context.page, limit);
29
+ const state = await getSessionManager().getExtensionState();
30
+ const { nodes, refMap } = await collectTrimmedA11ySnapshot(context.page);
31
+ getSessionManager().setRefMap(refMap);
32
+ return {
33
+ result: { items },
34
+ observation: createDefaultObservation(state, items, nodes),
35
+ };
36
+ },
37
+ classifyError: classifyDiscoveryError,
38
+ /**
39
+ * Sanitizes input for recording by extracting only the limit parameter.
40
+ *
41
+ * @returns Sanitized input with limit value
42
+ */
43
+ sanitizeInputForRecording: () => ({ limit }),
44
+ });
45
+ }
46
+ /**
47
+ * Handle getting a trimmed accessibility tree with deterministic refs.
48
+ *
49
+ * @param input The input containing optional root selector for scoping
50
+ * @param options Optional handler options for the operation
51
+ * @returns Promise resolving to accessibility nodes with deterministic refs
52
+ */
53
+ export async function handleAccessibilitySnapshot(input, options) {
54
+ return runTool({
55
+ toolName: 'mm_accessibility_snapshot',
56
+ input,
57
+ options,
58
+ observationPolicy: 'custom',
59
+ /**
60
+ * Execute the accessibility snapshot operation.
61
+ *
62
+ * @param context The workflow context containing the page
63
+ * @returns The result with accessibility nodes and observation data
64
+ */
65
+ execute: async (context) => {
66
+ const { nodes, refMap } = await collectTrimmedA11ySnapshot(context.page, input.rootSelector);
67
+ getSessionManager().setRefMap(refMap);
68
+ const state = await getSessionManager().getExtensionState();
69
+ const testIds = await collectTestIds(context.page, OBSERVATION_TESTID_LIMIT);
70
+ return {
71
+ result: { nodes },
72
+ observation: createDefaultObservation(state, testIds, nodes),
73
+ };
74
+ },
75
+ classifyError: classifyDiscoveryError,
76
+ /**
77
+ * Sanitizes input for recording by extracting only the root selector.
78
+ *
79
+ * @returns Sanitized input with rootSelector value
80
+ */
81
+ sanitizeInputForRecording: () => ({ rootSelector: input.rootSelector }),
82
+ });
83
+ }
84
+ /**
85
+ * Handle getting comprehensive screen state with state, testIds, a11y, and optional screenshot.
86
+ *
87
+ * @param input The input containing screenshot options and selector
88
+ * @param options Optional handler options for the operation
89
+ * @returns Promise resolving to comprehensive screen description with prior knowledge
90
+ */
91
+ export async function handleDescribeScreen(input, options) {
92
+ return runTool({
93
+ toolName: 'mm_describe_screen',
94
+ input,
95
+ options,
96
+ observationPolicy: 'custom',
97
+ /**
98
+ * Execute the describe screen operation.
99
+ *
100
+ * @param context The workflow context containing the page
101
+ * @returns The result with state, testIds, a11y, screenshot, and prior knowledge
102
+ */
103
+ execute: async (context) => {
104
+ const sessionManager = getSessionManager();
105
+ const { page } = context;
106
+ const state = await sessionManager.getExtensionState();
107
+ const testIds = await collectTestIds(page, DEFAULT_TESTID_LIMIT);
108
+ const { nodes, refMap } = await collectTrimmedA11ySnapshot(page);
109
+ sessionManager.setRefMap(refMap);
110
+ let screenshot = null;
111
+ if (input.includeScreenshot) {
112
+ const screenshotName = input.screenshotName ?? 'describe-screen';
113
+ const result = await sessionManager.screenshot({
114
+ name: screenshotName,
115
+ fullPage: true,
116
+ });
117
+ screenshot = {
118
+ path: result.path,
119
+ width: result.width,
120
+ height: result.height,
121
+ base64: input.includeScreenshotBase64 ? result.base64 : null,
122
+ };
123
+ }
124
+ const sessionMetadata = sessionManager.getSessionMetadata();
125
+ const priorKnowledgeContext = {
126
+ currentScreen: state.currentScreen,
127
+ currentUrl: state.currentUrl,
128
+ visibleTestIds: testIds,
129
+ a11yNodes: nodes,
130
+ currentSessionFlowTags: sessionMetadata?.flowTags,
131
+ };
132
+ const priorKnowledge = await knowledgeStore.generatePriorKnowledge(priorKnowledgeContext, context.sessionId);
133
+ const observation = createDefaultObservation(state, testIds, nodes, priorKnowledge);
134
+ return {
135
+ result: {
136
+ state,
137
+ testIds: { items: testIds },
138
+ a11y: { nodes },
139
+ screenshot,
140
+ priorKnowledge,
141
+ },
142
+ observation,
143
+ };
144
+ },
145
+ classifyError: classifyDiscoveryError,
146
+ /**
147
+ * Sanitizes input for recording by extracting screenshot-related parameters.
148
+ *
149
+ * @returns Sanitized input with screenshot options
150
+ */
151
+ sanitizeInputForRecording: () => ({
152
+ includeScreenshot: input.includeScreenshot,
153
+ screenshotName: input.screenshotName,
154
+ }),
155
+ });
156
+ }
157
+ //# sourceMappingURL=discovery-tools.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery-tools.mjs","sourceRoot":"","sources":["../../../src/mcp-server/tools/discovery-tools.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DEFAULT_TESTID_LIMIT,\n OBSERVATION_TESTID_LIMIT,\n} 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 { classifyDiscoveryError } from './error-classification.js';\nimport { runTool } from './run-tool.js';\nimport type {\n ListTestIdsInput,\n ListTestIdsResult,\n AccessibilitySnapshotInput,\n AccessibilitySnapshotResult,\n DescribeScreenInput,\n DescribeScreenResult,\n McpResponse,\n PriorKnowledgeContext,\n HandlerOptions,\n} from '../types';\n\n/**\n * Handle listing all visible data-testid attributes on the current page.\n *\n * @param input The input containing optional limit for number of items\n * @param options Optional handler options for the operation\n * @returns Promise resolving to list of visible test IDs with metadata\n */\nexport async function handleListTestIds(\n input: ListTestIdsInput,\n options?: HandlerOptions,\n): Promise<McpResponse<ListTestIdsResult>> {\n const limit = input.limit ?? DEFAULT_TESTID_LIMIT;\n\n return runTool<ListTestIdsInput, ListTestIdsResult>({\n toolName: 'mm_list_testids',\n input,\n options,\n observationPolicy: 'custom',\n\n /**\n * Execute the list test IDs operation.\n *\n * @param context The workflow context containing the page\n * @returns The result with test ID items and observation data\n */\n execute: async (context) => {\n const items = await collectTestIds(context.page, limit);\n const state = await getSessionManager().getExtensionState();\n const { nodes, refMap } = await collectTrimmedA11ySnapshot(context.page);\n\n getSessionManager().setRefMap(refMap);\n\n return {\n result: { items },\n observation: createDefaultObservation(state, items, nodes),\n };\n },\n\n classifyError: classifyDiscoveryError,\n\n /**\n * Sanitizes input for recording by extracting only the limit parameter.\n *\n * @returns Sanitized input with limit value\n */\n sanitizeInputForRecording: () => ({ limit }),\n });\n}\n\n/**\n * Handle getting a trimmed accessibility tree with deterministic refs.\n *\n * @param input The input containing optional root selector for scoping\n * @param options Optional handler options for the operation\n * @returns Promise resolving to accessibility nodes with deterministic refs\n */\nexport async function handleAccessibilitySnapshot(\n input: AccessibilitySnapshotInput,\n options?: HandlerOptions,\n): Promise<McpResponse<AccessibilitySnapshotResult>> {\n return runTool<AccessibilitySnapshotInput, AccessibilitySnapshotResult>({\n toolName: 'mm_accessibility_snapshot',\n input,\n options,\n observationPolicy: 'custom',\n\n /**\n * Execute the accessibility snapshot operation.\n *\n * @param context The workflow context containing the page\n * @returns The result with accessibility nodes and observation data\n */\n execute: async (context) => {\n const { nodes, refMap } = await collectTrimmedA11ySnapshot(\n context.page,\n input.rootSelector,\n );\n\n getSessionManager().setRefMap(refMap);\n\n const state = await getSessionManager().getExtensionState();\n const testIds = await collectTestIds(\n context.page,\n OBSERVATION_TESTID_LIMIT,\n );\n\n return {\n result: { nodes },\n observation: createDefaultObservation(state, testIds, nodes),\n };\n },\n\n classifyError: classifyDiscoveryError,\n\n /**\n * Sanitizes input for recording by extracting only the root selector.\n *\n * @returns Sanitized input with rootSelector value\n */\n sanitizeInputForRecording: () => ({ rootSelector: input.rootSelector }),\n });\n}\n\n/**\n * Handle getting comprehensive screen state with state, testIds, a11y, and optional screenshot.\n *\n * @param input The input containing screenshot options and selector\n * @param options Optional handler options for the operation\n * @returns Promise resolving to comprehensive screen description with prior knowledge\n */\nexport async function handleDescribeScreen(\n input: DescribeScreenInput,\n options?: HandlerOptions,\n): Promise<McpResponse<DescribeScreenResult>> {\n return runTool<DescribeScreenInput, DescribeScreenResult>({\n toolName: 'mm_describe_screen',\n input,\n options,\n observationPolicy: 'custom',\n\n /**\n * Execute the describe screen operation.\n *\n * @param context The workflow context containing the page\n * @returns The result with state, testIds, a11y, screenshot, and prior knowledge\n */\n execute: async (context) => {\n const sessionManager = getSessionManager();\n const { page } = context;\n\n const state = await sessionManager.getExtensionState();\n const testIds = await collectTestIds(page, DEFAULT_TESTID_LIMIT);\n const { nodes, refMap } = await collectTrimmedA11ySnapshot(page);\n\n sessionManager.setRefMap(refMap);\n\n let screenshot: DescribeScreenResult['screenshot'] = null;\n\n if (input.includeScreenshot) {\n const screenshotName = input.screenshotName ?? 'describe-screen';\n const result = await sessionManager.screenshot({\n name: screenshotName,\n fullPage: true,\n });\n\n screenshot = {\n path: result.path,\n width: result.width,\n height: result.height,\n base64: input.includeScreenshotBase64 ? result.base64 : null,\n };\n }\n\n const sessionMetadata = sessionManager.getSessionMetadata();\n const priorKnowledgeContext: PriorKnowledgeContext = {\n currentScreen: state.currentScreen,\n currentUrl: state.currentUrl,\n visibleTestIds: testIds,\n a11yNodes: nodes,\n currentSessionFlowTags: sessionMetadata?.flowTags,\n };\n\n const priorKnowledge = await knowledgeStore.generatePriorKnowledge(\n priorKnowledgeContext,\n context.sessionId,\n );\n\n const observation = createDefaultObservation(\n state,\n testIds,\n nodes,\n priorKnowledge,\n );\n\n return {\n result: {\n state,\n testIds: { items: testIds },\n a11y: { nodes },\n screenshot,\n priorKnowledge,\n },\n observation,\n };\n },\n\n classifyError: classifyDiscoveryError,\n\n /**\n * Sanitizes input for recording by extracting screenshot-related parameters.\n *\n * @returns Sanitized input with screenshot options\n */\n sanitizeInputForRecording: () => ({\n includeScreenshot: input.includeScreenshot,\n screenshotName: input.screenshotName,\n }),\n });\n}\n"]}