@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,43 @@
1
+ import path from "path";
2
+ /**
3
+ * Default MetaMask extension readiness configuration.
4
+ */
5
+ export const DEFAULT_EXTENSION_READINESS_CONFIG = {
6
+ readySelectors: [
7
+ '[data-testid="unlock-password"]',
8
+ '[data-testid="onboarding-create-wallet"]',
9
+ '[data-testid="onboarding-import-wallet"]',
10
+ '[data-testid="account-menu-icon"]',
11
+ '[data-testid="get-started"]',
12
+ '[data-testid="onboarding-terms-checkbox"]',
13
+ '[data-testid="onboarding-privacy-policy"]',
14
+ ],
15
+ expectedStatesDescription: 'unlock page, onboarding page, or home page',
16
+ };
17
+ /**
18
+ * Wait for the extension UI to be ready by checking for expected selectors.
19
+ *
20
+ * @param deps - Dependencies including page, screenshot directory, and logger
21
+ * @param config - Configuration with ready selectors to wait for
22
+ * @param timeout - Maximum time to wait in milliseconds (default: 30000)
23
+ */
24
+ export async function waitForExtensionUiReady(deps, config = DEFAULT_EXTENSION_READINESS_CONFIG, timeout = 30000) {
25
+ const { page, screenshotDir, log } = deps;
26
+ const { readySelectors, expectedStatesDescription } = config;
27
+ try {
28
+ await Promise.race(readySelectors.map(async (selector) => page.waitForSelector(selector, { timeout })));
29
+ log.info('Extension UI is ready');
30
+ }
31
+ catch {
32
+ const currentUrl = page.url();
33
+ const screenshotPath = path.join(screenshotDir, `ui-ready-failure-${Date.now()}.png`);
34
+ await page.screenshot({ path: screenshotPath, fullPage: true });
35
+ log.error(`Debug screenshot saved: ${screenshotPath}`);
36
+ const expectedStates = expectedStatesDescription ?? 'one of the expected ready states';
37
+ throw new Error(`Extension UI did not reach expected state within ${timeout}ms. ` +
38
+ `Current URL: ${currentUrl}. ` +
39
+ `Expected: ${expectedStates}. ` +
40
+ `Debug screenshot saved to: ${screenshotPath}`);
41
+ }
42
+ }
43
+ //# sourceMappingURL=extension-readiness.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-readiness.mjs","sourceRoot":"","sources":["../../src/launcher/extension-readiness.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,aAAa;AA2BxB;;GAEG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAA6B;IAC1E,cAAc,EAAE;QACd,iCAAiC;QACjC,0CAA0C;QAC1C,0CAA0C;QAC1C,mCAAmC;QACnC,6BAA6B;QAC7B,2CAA2C;QAC3C,2CAA2C;KAC5C;IACD,yBAAyB,EAAE,4CAA4C;CACxE,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,IAA4B,EAC5B,SAAmC,kCAAkC,EACrE,OAAO,GAAG,KAAK;IAEf,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC1C,MAAM,EAAE,cAAc,EAAE,yBAAyB,EAAE,GAAG,MAAM,CAAC;IAE7D,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,IAAI,CAChB,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CACpC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,CAC5C,CACF,CAAC;QACF,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAC9B,aAAa,EACb,oBAAoB,IAAI,CAAC,GAAG,EAAE,MAAM,CACrC,CAAC;QACF,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,GAAG,CAAC,KAAK,CAAC,2BAA2B,cAAc,EAAE,CAAC,CAAC;QAEvD,MAAM,cAAc,GAClB,yBAAyB,IAAI,kCAAkC,CAAC;QAElE,MAAM,IAAI,KAAK,CACb,oDAAoD,OAAO,MAAM;YAC/D,gBAAgB,UAAU,IAAI;YAC9B,aAAa,cAAc,IAAI;YAC/B,8BAA8B,cAAc,EAAE,CACjD,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["import type { Page } from '@playwright/test';\nimport path from 'path';\n\nexport type ExtensionReadinessDeps = {\n page: Page;\n screenshotDir: string;\n log: {\n info: (message: string) => void;\n error: (message: string) => void;\n };\n};\n\n/**\n * Configuration for extension readiness detection.\n * Allows different extensions to specify their own UI ready selectors.\n */\nexport type ExtensionReadinessConfig = {\n /**\n * CSS selectors that indicate the extension UI is ready.\n * The function waits for ANY of these selectors to appear.\n */\n readySelectors: string[];\n /**\n * Human-readable description of expected states for error messages.\n */\n expectedStatesDescription?: string;\n};\n\n/**\n * Default MetaMask extension readiness configuration.\n */\nexport const DEFAULT_EXTENSION_READINESS_CONFIG: ExtensionReadinessConfig = {\n readySelectors: [\n '[data-testid=\"unlock-password\"]',\n '[data-testid=\"onboarding-create-wallet\"]',\n '[data-testid=\"onboarding-import-wallet\"]',\n '[data-testid=\"account-menu-icon\"]',\n '[data-testid=\"get-started\"]',\n '[data-testid=\"onboarding-terms-checkbox\"]',\n '[data-testid=\"onboarding-privacy-policy\"]',\n ],\n expectedStatesDescription: 'unlock page, onboarding page, or home page',\n};\n\n/**\n * Wait for the extension UI to be ready by checking for expected selectors.\n *\n * @param deps - Dependencies including page, screenshot directory, and logger\n * @param config - Configuration with ready selectors to wait for\n * @param timeout - Maximum time to wait in milliseconds (default: 30000)\n */\nexport async function waitForExtensionUiReady(\n deps: ExtensionReadinessDeps,\n config: ExtensionReadinessConfig = DEFAULT_EXTENSION_READINESS_CONFIG,\n timeout = 30000,\n): Promise<void> {\n const { page, screenshotDir, log } = deps;\n const { readySelectors, expectedStatesDescription } = config;\n\n try {\n await Promise.race(\n readySelectors.map(async (selector) =>\n page.waitForSelector(selector, { timeout }),\n ),\n );\n log.info('Extension UI is ready');\n } catch {\n const currentUrl = page.url();\n const screenshotPath = path.join(\n screenshotDir,\n `ui-ready-failure-${Date.now()}.png`,\n );\n await page.screenshot({ path: screenshotPath, fullPage: true });\n log.error(`Debug screenshot saved: ${screenshotPath}`);\n\n const expectedStates =\n expectedStatesDescription ?? 'one of the expected ready states';\n\n throw new Error(\n `Extension UI did not reach expected state within ${timeout}ms. ` +\n `Current URL: ${currentUrl}. ` +\n `Expected: ${expectedStates}. ` +\n `Debug screenshot saved to: ${screenshotPath}`,\n );\n }\n}\n"]}
@@ -0,0 +1,21 @@
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("./retry.cjs"), exports);
18
+ __exportStar(require("./console-error-buffer.cjs"), exports);
19
+ __exportStar(require("./extension-readiness.cjs"), exports);
20
+ __exportStar(require("./extension-id-resolver.cjs"), exports);
21
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/launcher/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA2B;AAC3B,6DAA0C;AAC1C,4DAAyC;AACzC,8DAA2C","sourcesContent":["export * from './retry.js';\nexport * from './console-error-buffer.js';\nexport * from './extension-readiness.js';\nexport * from './extension-id-resolver.js';\n"]}
@@ -0,0 +1,5 @@
1
+ export * from "./retry.cjs";
2
+ export * from "./console-error-buffer.cjs";
3
+ export * from "./extension-readiness.cjs";
4
+ export * from "./extension-id-resolver.cjs";
5
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/launcher/index.ts"],"names":[],"mappings":"AAAA,4BAA2B;AAC3B,2CAA0C;AAC1C,0CAAyC;AACzC,4CAA2C"}
@@ -0,0 +1,5 @@
1
+ export * from "./retry.mjs";
2
+ export * from "./console-error-buffer.mjs";
3
+ export * from "./extension-readiness.mjs";
4
+ export * from "./extension-id-resolver.mjs";
5
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/launcher/index.ts"],"names":[],"mappings":"AAAA,4BAA2B;AAC3B,2CAA0C;AAC1C,0CAAyC;AACzC,4CAA2C"}
@@ -0,0 +1,5 @@
1
+ export * from "./retry.mjs";
2
+ export * from "./console-error-buffer.mjs";
3
+ export * from "./extension-readiness.mjs";
4
+ export * from "./extension-id-resolver.mjs";
5
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/launcher/index.ts"],"names":[],"mappings":"AAAA,4BAA2B;AAC3B,2CAA0C;AAC1C,0CAAyC;AACzC,4CAA2C","sourcesContent":["export * from './retry.js';\nexport * from './console-error-buffer.js';\nexport * from './extension-readiness.js';\nexport * from './extension-id-resolver.js';\n"]}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.delay = delay;
4
+ exports.retryUntil = retryUntil;
5
+ /**
6
+ * Delay execution for a specified number of milliseconds.
7
+ *
8
+ * @param ms - Number of milliseconds to delay
9
+ */
10
+ async function delay(ms) {
11
+ await new Promise((resolve) => setTimeout(resolve, ms));
12
+ }
13
+ /**
14
+ * Retry an operation until it succeeds or max attempts are reached.
15
+ *
16
+ * @param operation - The async operation to retry
17
+ * @param isSuccess - Function to determine if the result is successful
18
+ * @param options - Retry configuration with attempts and delay
19
+ * @returns The result from the operation
20
+ */
21
+ async function retryUntil(operation, isSuccess, options) {
22
+ const { attempts, delayMs } = options;
23
+ let lastResult;
24
+ for (let attempt = 0; attempt < attempts; attempt++) {
25
+ lastResult = await operation();
26
+ if (isSuccess(lastResult)) {
27
+ return lastResult;
28
+ }
29
+ if (attempt < attempts - 1) {
30
+ await delay(delayMs);
31
+ }
32
+ }
33
+ return lastResult;
34
+ }
35
+ //# sourceMappingURL=retry.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.cjs","sourceRoot":"","sources":["../../src/launcher/retry.ts"],"names":[],"mappings":";;AAUA,sBAEC;AAUD,gCAqBC;AAtCD;;;;GAIG;AACI,KAAK,UAAU,KAAK,CAAC,EAAU;IACpC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,UAAU,CAC9B,SAAgC,EAChC,SAAsC,EACtC,OAAqB;IAErB,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAEtC,IAAI,UAA8B,CAAC;IAEnC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC;QACpD,UAAU,GAAG,MAAM,SAAS,EAAE,CAAC;QAC/B,IAAI,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1B,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,IAAI,OAAO,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,UAAoB,CAAC;AAC9B,CAAC","sourcesContent":["export type RetryOptions = {\n attempts: number;\n delayMs: number;\n};\n\n/**\n * Delay execution for a specified number of milliseconds.\n *\n * @param ms - Number of milliseconds to delay\n */\nexport async function delay(ms: number): Promise<void> {\n await new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Retry an operation until it succeeds or max attempts are reached.\n *\n * @param operation - The async operation to retry\n * @param isSuccess - Function to determine if the result is successful\n * @param options - Retry configuration with attempts and delay\n * @returns The result from the operation\n */\nexport async function retryUntil<Result>(\n operation: () => Promise<Result>,\n isSuccess: (result: Result) => boolean,\n options: RetryOptions,\n): Promise<Result> {\n const { attempts, delayMs } = options;\n\n let lastResult: Result | undefined;\n\n for (let attempt = 0; attempt < attempts; attempt++) {\n lastResult = await operation();\n if (isSuccess(lastResult)) {\n return lastResult;\n }\n\n if (attempt < attempts - 1) {\n await delay(delayMs);\n }\n }\n\n return lastResult as Result;\n}\n"]}
@@ -0,0 +1,20 @@
1
+ export type RetryOptions = {
2
+ attempts: number;
3
+ delayMs: number;
4
+ };
5
+ /**
6
+ * Delay execution for a specified number of milliseconds.
7
+ *
8
+ * @param ms - Number of milliseconds to delay
9
+ */
10
+ export declare function delay(ms: number): Promise<void>;
11
+ /**
12
+ * Retry an operation until it succeeds or max attempts are reached.
13
+ *
14
+ * @param operation - The async operation to retry
15
+ * @param isSuccess - Function to determine if the result is successful
16
+ * @param options - Retry configuration with attempts and delay
17
+ * @returns The result from the operation
18
+ */
19
+ export declare function retryUntil<Result>(operation: () => Promise<Result>, isSuccess: (result: Result) => boolean, options: RetryOptions): Promise<Result>;
20
+ //# sourceMappingURL=retry.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.cts","sourceRoot":"","sources":["../../src/launcher/retry.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErD;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,MAAM,EACrC,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,EAChC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,EACtC,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,MAAM,CAAC,CAiBjB"}
@@ -0,0 +1,20 @@
1
+ export type RetryOptions = {
2
+ attempts: number;
3
+ delayMs: number;
4
+ };
5
+ /**
6
+ * Delay execution for a specified number of milliseconds.
7
+ *
8
+ * @param ms - Number of milliseconds to delay
9
+ */
10
+ export declare function delay(ms: number): Promise<void>;
11
+ /**
12
+ * Retry an operation until it succeeds or max attempts are reached.
13
+ *
14
+ * @param operation - The async operation to retry
15
+ * @param isSuccess - Function to determine if the result is successful
16
+ * @param options - Retry configuration with attempts and delay
17
+ * @returns The result from the operation
18
+ */
19
+ export declare function retryUntil<Result>(operation: () => Promise<Result>, isSuccess: (result: Result) => boolean, options: RetryOptions): Promise<Result>;
20
+ //# sourceMappingURL=retry.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.mts","sourceRoot":"","sources":["../../src/launcher/retry.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErD;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,MAAM,EACrC,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,EAChC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,EACtC,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,MAAM,CAAC,CAiBjB"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Delay execution for a specified number of milliseconds.
3
+ *
4
+ * @param ms - Number of milliseconds to delay
5
+ */
6
+ export async function delay(ms) {
7
+ await new Promise((resolve) => setTimeout(resolve, ms));
8
+ }
9
+ /**
10
+ * Retry an operation until it succeeds or max attempts are reached.
11
+ *
12
+ * @param operation - The async operation to retry
13
+ * @param isSuccess - Function to determine if the result is successful
14
+ * @param options - Retry configuration with attempts and delay
15
+ * @returns The result from the operation
16
+ */
17
+ export async function retryUntil(operation, isSuccess, options) {
18
+ const { attempts, delayMs } = options;
19
+ let lastResult;
20
+ for (let attempt = 0; attempt < attempts; attempt++) {
21
+ lastResult = await operation();
22
+ if (isSuccess(lastResult)) {
23
+ return lastResult;
24
+ }
25
+ if (attempt < attempts - 1) {
26
+ await delay(delayMs);
27
+ }
28
+ }
29
+ return lastResult;
30
+ }
31
+ //# sourceMappingURL=retry.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.mjs","sourceRoot":"","sources":["../../src/launcher/retry.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,EAAU;IACpC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,SAAgC,EAChC,SAAsC,EACtC,OAAqB;IAErB,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAEtC,IAAI,UAA8B,CAAC;IAEnC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC;QACpD,UAAU,GAAG,MAAM,SAAS,EAAE,CAAC;QAC/B,IAAI,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1B,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,IAAI,OAAO,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,UAAoB,CAAC;AAC9B,CAAC","sourcesContent":["export type RetryOptions = {\n attempts: number;\n delayMs: number;\n};\n\n/**\n * Delay execution for a specified number of milliseconds.\n *\n * @param ms - Number of milliseconds to delay\n */\nexport async function delay(ms: number): Promise<void> {\n await new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Retry an operation until it succeeds or max attempts are reached.\n *\n * @param operation - The async operation to retry\n * @param isSuccess - Function to determine if the result is successful\n * @param options - Retry configuration with attempts and delay\n * @returns The result from the operation\n */\nexport async function retryUntil<Result>(\n operation: () => Promise<Result>,\n isSuccess: (result: Result) => boolean,\n options: RetryOptions,\n): Promise<Result> {\n const { attempts, delayMs } = options;\n\n let lastResult: Result | undefined;\n\n for (let attempt = 0; attempt < attempts; attempt++) {\n lastResult = await operation();\n if (isSuccess(lastResult)) {\n return lastResult;\n }\n\n if (attempt < attempts - 1) {\n await delay(delayMs);\n }\n }\n\n return lastResult as Result;\n}\n"]}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ /**
3
+ * Constants for MCP server tool operations.
4
+ * Centralized to ensure consistency and easy tuning.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.TEXT_PREVIEW_MAX_LENGTH = exports.OBSERVATION_TESTID_LIMIT = exports.DEFAULT_TESTID_LIMIT = exports.DEFAULT_INTERACTION_TIMEOUT_MS = void 0;
8
+ // ============================================================================
9
+ // Timeouts
10
+ // ============================================================================
11
+ /** Default timeout for user interactions (click, type, wait_for) - 15 seconds */
12
+ exports.DEFAULT_INTERACTION_TIMEOUT_MS = 15000;
13
+ // ============================================================================
14
+ // Limits
15
+ // ============================================================================
16
+ /** Default limit for testId collection in discovery tools */
17
+ exports.DEFAULT_TESTID_LIMIT = 150;
18
+ /** Limit for testIds collected during observation (lighter weight) */
19
+ exports.OBSERVATION_TESTID_LIMIT = 50;
20
+ /** Maximum length for text content preview in discovery */
21
+ exports.TEXT_PREVIEW_MAX_LENGTH = 100;
22
+ //# sourceMappingURL=constants.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.cjs","sourceRoot":"","sources":["../../src/mcp-server/constants.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E,iFAAiF;AACpE,QAAA,8BAA8B,GAAG,KAAK,CAAC;AAEpD,+EAA+E;AAC/E,SAAS;AACT,+EAA+E;AAE/E,6DAA6D;AAChD,QAAA,oBAAoB,GAAG,GAAG,CAAC;AAExC,sEAAsE;AACzD,QAAA,wBAAwB,GAAG,EAAE,CAAC;AAE3C,2DAA2D;AAC9C,QAAA,uBAAuB,GAAG,GAAG,CAAC","sourcesContent":["/**\n * Constants for MCP server tool operations.\n * Centralized to ensure consistency and easy tuning.\n */\n\n// ============================================================================\n// Timeouts\n// ============================================================================\n\n/** Default timeout for user interactions (click, type, wait_for) - 15 seconds */\nexport const DEFAULT_INTERACTION_TIMEOUT_MS = 15000;\n\n// ============================================================================\n// Limits\n// ============================================================================\n\n/** Default limit for testId collection in discovery tools */\nexport const DEFAULT_TESTID_LIMIT = 150;\n\n/** Limit for testIds collected during observation (lighter weight) */\nexport const OBSERVATION_TESTID_LIMIT = 50;\n\n/** Maximum length for text content preview in discovery */\nexport const TEXT_PREVIEW_MAX_LENGTH = 100;\n"]}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Constants for MCP server tool operations.
3
+ * Centralized to ensure consistency and easy tuning.
4
+ */
5
+ /** Default timeout for user interactions (click, type, wait_for) - 15 seconds */
6
+ export declare const DEFAULT_INTERACTION_TIMEOUT_MS = 15000;
7
+ /** Default limit for testId collection in discovery tools */
8
+ export declare const DEFAULT_TESTID_LIMIT = 150;
9
+ /** Limit for testIds collected during observation (lighter weight) */
10
+ export declare const OBSERVATION_TESTID_LIMIT = 50;
11
+ /** Maximum length for text content preview in discovery */
12
+ export declare const TEXT_PREVIEW_MAX_LENGTH = 100;
13
+ //# sourceMappingURL=constants.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.cts","sourceRoot":"","sources":["../../src/mcp-server/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,iFAAiF;AACjF,eAAO,MAAM,8BAA8B,QAAQ,CAAC;AAMpD,6DAA6D;AAC7D,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,sEAAsE;AACtE,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,2DAA2D;AAC3D,eAAO,MAAM,uBAAuB,MAAM,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Constants for MCP server tool operations.
3
+ * Centralized to ensure consistency and easy tuning.
4
+ */
5
+ /** Default timeout for user interactions (click, type, wait_for) - 15 seconds */
6
+ export declare const DEFAULT_INTERACTION_TIMEOUT_MS = 15000;
7
+ /** Default limit for testId collection in discovery tools */
8
+ export declare const DEFAULT_TESTID_LIMIT = 150;
9
+ /** Limit for testIds collected during observation (lighter weight) */
10
+ export declare const OBSERVATION_TESTID_LIMIT = 50;
11
+ /** Maximum length for text content preview in discovery */
12
+ export declare const TEXT_PREVIEW_MAX_LENGTH = 100;
13
+ //# sourceMappingURL=constants.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.mts","sourceRoot":"","sources":["../../src/mcp-server/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,iFAAiF;AACjF,eAAO,MAAM,8BAA8B,QAAQ,CAAC;AAMpD,6DAA6D;AAC7D,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,sEAAsE;AACtE,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,2DAA2D;AAC3D,eAAO,MAAM,uBAAuB,MAAM,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Constants for MCP server tool operations.
3
+ * Centralized to ensure consistency and easy tuning.
4
+ */
5
+ // ============================================================================
6
+ // Timeouts
7
+ // ============================================================================
8
+ /** Default timeout for user interactions (click, type, wait_for) - 15 seconds */
9
+ export const DEFAULT_INTERACTION_TIMEOUT_MS = 15000;
10
+ // ============================================================================
11
+ // Limits
12
+ // ============================================================================
13
+ /** Default limit for testId collection in discovery tools */
14
+ export const DEFAULT_TESTID_LIMIT = 150;
15
+ /** Limit for testIds collected during observation (lighter weight) */
16
+ export const OBSERVATION_TESTID_LIMIT = 50;
17
+ /** Maximum length for text content preview in discovery */
18
+ export const TEXT_PREVIEW_MAX_LENGTH = 100;
19
+ //# sourceMappingURL=constants.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.mjs","sourceRoot":"","sources":["../../src/mcp-server/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E,iFAAiF;AACjF,MAAM,CAAC,MAAM,8BAA8B,GAAG,KAAK,CAAC;AAEpD,+EAA+E;AAC/E,SAAS;AACT,+EAA+E;AAE/E,6DAA6D;AAC7D,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAExC,sEAAsE;AACtE,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C,2DAA2D;AAC3D,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC","sourcesContent":["/**\n * Constants for MCP server tool operations.\n * Centralized to ensure consistency and easy tuning.\n */\n\n// ============================================================================\n// Timeouts\n// ============================================================================\n\n/** Default timeout for user interactions (click, type, wait_for) - 15 seconds */\nexport const DEFAULT_INTERACTION_TIMEOUT_MS = 15000;\n\n// ============================================================================\n// Limits\n// ============================================================================\n\n/** Default limit for testId collection in discovery tools */\nexport const DEFAULT_TESTID_LIMIT = 150;\n\n/** Limit for testIds collected during observation (lighter weight) */\nexport const OBSERVATION_TESTID_LIMIT = 50;\n\n/** Maximum length for text content preview in discovery */\nexport const TEXT_PREVIEW_MAX_LENGTH = 100;\n"]}
@@ -0,0 +1,299 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseAriaSnapshotYaml = parseAriaSnapshotYaml;
4
+ exports.collectTestIds = collectTestIds;
5
+ exports.collectTrimmedA11ySnapshot = collectTrimmedA11ySnapshot;
6
+ exports.resolveTarget = resolveTarget;
7
+ exports.waitForTarget = waitForTarget;
8
+ const constants_js_1 = require("./constants.cjs");
9
+ const types_1 = require("./types/index.cjs");
10
+ const utils_1 = require("./utils/index.cjs");
11
+ const INCLUDED_ROLES_SET = new Set(types_1.INCLUDED_ROLES);
12
+ /**
13
+ * Regular expression to parse a single ARIA snapshot line descriptor.
14
+ *
15
+ * Matches: `role` + optional `"name"` + optional `[attr]` / `[attr=value]` groups
16
+ *
17
+ * Examples:
18
+ * - `button "Submit"`
19
+ * - `heading "Title" [level=1]`
20
+ * - `checkbox "Accept" [checked]`
21
+ * - `listitem`
22
+ */
23
+ const ARIA_LINE_RE = /^(?<role>[a-zA-Z]+)(?:\s+"(?<name>(?:[^"\\]|\\.)*)")?(?<attrs>(?:\s+\[[^\]]*\])*)(?<hasChildren>:?)$/u;
24
+ /**
25
+ * Regular expression to match individual `[key]` or `[key=value]` attribute groups.
26
+ */
27
+ const ATTR_RE = /\[(?<key>[a-zA-Z]+)(?:=(?<value>[^\]]*))?\]/gu;
28
+ /**
29
+ * Parse a Playwright ariaSnapshot() YAML string into RawA11yNode[].
30
+ *
31
+ * The YAML format emitted by Playwright's `locator.ariaSnapshot()` (v1.49+)
32
+ * is a line-based, indentation-structured tree where each node line is:
33
+ * `- role "name" [attr=value]:` (children follow indented)
34
+ * `- role "name" [attr=value]` (leaf node)
35
+ * `- text: some text content` (text node, ignored for our purposes)
36
+ *
37
+ * @param yaml The YAML string returned by Playwright's ariaSnapshot()
38
+ * @returns Array of parsed RawA11yNode trees
39
+ */
40
+ function parseAriaSnapshotYaml(yaml) {
41
+ if (!yaml?.trim()) {
42
+ return [];
43
+ }
44
+ const lines = yaml.split('\n');
45
+ const roots = [];
46
+ const stack = [];
47
+ for (const line of lines) {
48
+ if (!line.trim()) {
49
+ continue;
50
+ }
51
+ const stripped = line.replace(/^ */u, '');
52
+ const indent = line.length - stripped.length;
53
+ if (!stripped.startsWith('- ')) {
54
+ continue;
55
+ }
56
+ const descriptor = stripped.slice(2);
57
+ if (descriptor.startsWith('text:') || descriptor === 'text') {
58
+ continue;
59
+ }
60
+ if (descriptor.startsWith('/')) {
61
+ continue;
62
+ }
63
+ const node = parseAriaNodeDescriptor(descriptor);
64
+ if (!node) {
65
+ continue;
66
+ }
67
+ while (stack.length > 0 && stack[stack.length - 1].indent >= indent) {
68
+ stack.pop();
69
+ }
70
+ if (stack.length === 0) {
71
+ roots.push(node);
72
+ }
73
+ else {
74
+ const parent = stack[stack.length - 1].node;
75
+ parent.children ?? (parent.children = []);
76
+ parent.children.push(node);
77
+ }
78
+ stack.push({ node, indent });
79
+ }
80
+ return roots;
81
+ }
82
+ /**
83
+ * Parse a single ARIA node descriptor string into a RawA11yNode.
84
+ *
85
+ * @param descriptor The descriptor after removing the `- ` prefix, e.g. `button "Submit" [disabled]:`
86
+ * @returns A parsed node, or null if the descriptor cannot be parsed
87
+ */
88
+ function parseAriaNodeDescriptor(descriptor) {
89
+ let desc = descriptor;
90
+ // Strip trailing `:` (children indicator) or `: text` (inline text value)
91
+ const trailingColonMatch = desc.match(/^(?<main>(?:[a-zA-Z]+)(?:\s+"(?:[^"\\]|\\.)*")?(?:\s+\[[^\]]*\])*)(?::(?<text>.*))?$/u);
92
+ if (trailingColonMatch?.groups?.main) {
93
+ desc = trailingColonMatch.groups.main;
94
+ }
95
+ const match = ARIA_LINE_RE.exec(desc);
96
+ if (!match?.groups) {
97
+ return null;
98
+ }
99
+ const { role } = match.groups;
100
+ const rawName = match.groups.name;
101
+ const node = { role };
102
+ if (rawName !== undefined) {
103
+ node.name = rawName.replace(/\\"/gu, '"').replace(/\\\\/gu, '\\');
104
+ }
105
+ const attrsStr = match.groups.attrs;
106
+ if (attrsStr) {
107
+ let attrMatch;
108
+ ATTR_RE.lastIndex = 0;
109
+ while ((attrMatch = ATTR_RE.exec(attrsStr)) !== null) {
110
+ const key = attrMatch.groups?.key;
111
+ const value = attrMatch.groups?.value;
112
+ switch (key) {
113
+ case 'disabled':
114
+ node.disabled = value !== 'false';
115
+ break;
116
+ case 'checked':
117
+ if (value === 'mixed') {
118
+ node.checked = 'mixed';
119
+ }
120
+ else {
121
+ node.checked = value !== 'false';
122
+ }
123
+ break;
124
+ case 'expanded':
125
+ node.expanded = value !== 'false';
126
+ break;
127
+ default:
128
+ break;
129
+ }
130
+ }
131
+ }
132
+ return node;
133
+ }
134
+ /**
135
+ * Collect all visible test IDs from the current page.
136
+ *
137
+ * @param page The Playwright page to scan for test IDs
138
+ * @param limit Maximum number of test IDs to return (default: 150)
139
+ * @returns Array of test ID items with visibility and text content
140
+ */
141
+ async function collectTestIds(page, limit = 150) {
142
+ await page.waitForLoadState('domcontentloaded').catch(() => undefined);
143
+ const locators = await page.locator('[data-testid]').all();
144
+ const results = [];
145
+ for (const locator of locators) {
146
+ if (results.length >= limit) {
147
+ break;
148
+ }
149
+ try {
150
+ const testId = await locator.getAttribute('data-testid');
151
+ if (!testId) {
152
+ continue;
153
+ }
154
+ const isVisible = await locator.isVisible().catch(() => false);
155
+ const textContent = await locator
156
+ .textContent()
157
+ .then((text) => text?.trim().substring(0, constants_js_1.TEXT_PREVIEW_MAX_LENGTH) ?? undefined)
158
+ .catch(() => undefined);
159
+ results.push({
160
+ testId,
161
+ tag: 'element',
162
+ text: textContent,
163
+ visible: isVisible,
164
+ });
165
+ }
166
+ catch (error) {
167
+ (0, utils_1.debugWarn)('discovery.collectTestIds', error);
168
+ continue;
169
+ }
170
+ }
171
+ return results;
172
+ }
173
+ /**
174
+ * Collect a trimmed accessibility tree snapshot with deterministic refs.
175
+ *
176
+ * @param page The Playwright page to snapshot
177
+ * @param rootSelector Optional CSS selector to scope the snapshot to a specific element
178
+ * @returns Object containing trimmed accessibility nodes and a reference map (e1, e2, etc.)
179
+ */
180
+ async function collectTrimmedA11ySnapshot(page, rootSelector) {
181
+ const locator = rootSelector
182
+ ? page.locator(rootSelector).first()
183
+ : page.locator('body').first();
184
+ const snapshotYaml = await locator.ariaSnapshot();
185
+ if (!snapshotYaml) {
186
+ return { nodes: [], refMap: new Map() };
187
+ }
188
+ const parsedRoots = parseAriaSnapshotYaml(snapshotYaml);
189
+ if (parsedRoots.length === 0) {
190
+ return { nodes: [], refMap: new Map() };
191
+ }
192
+ const trimmedNodes = [];
193
+ const refMap = new Map();
194
+ let refCounter = 1;
195
+ /**
196
+ * Recursively traverse accessibility tree and collect included roles.
197
+ *
198
+ * @param node The current accessibility node to process
199
+ * @param ancestorPath The path of ancestor nodes for context
200
+ */
201
+ function traverseNode(node, ancestorPath) {
202
+ const role = node.role?.toLowerCase() ?? '';
203
+ const name = node.name ?? '';
204
+ if (INCLUDED_ROLES_SET.has(role)) {
205
+ const ref = `e${refCounter}`;
206
+ refCounter += 1;
207
+ const currentPath = [...ancestorPath];
208
+ if (role === 'dialog' || role === 'heading') {
209
+ currentPath.push(`${role}:${name}`);
210
+ }
211
+ const trimmedNode = {
212
+ ref,
213
+ role,
214
+ name,
215
+ path: currentPath,
216
+ };
217
+ if (node.disabled !== undefined) {
218
+ trimmedNode.disabled = node.disabled;
219
+ }
220
+ if (node.checked !== undefined) {
221
+ trimmedNode.checked = node.checked === true;
222
+ }
223
+ if (node.expanded !== undefined) {
224
+ trimmedNode.expanded = node.expanded;
225
+ }
226
+ trimmedNodes.push(trimmedNode);
227
+ const selector = buildA11ySelector(role, name);
228
+ refMap.set(ref, selector);
229
+ }
230
+ const updatedPath = role === 'dialog' || role === 'heading'
231
+ ? [...ancestorPath, `${role}:${name}`]
232
+ : ancestorPath;
233
+ if (node.children) {
234
+ for (const child of node.children) {
235
+ traverseNode(child, updatedPath);
236
+ }
237
+ }
238
+ }
239
+ for (const root of parsedRoots) {
240
+ traverseNode(root, []);
241
+ }
242
+ return { nodes: trimmedNodes, refMap };
243
+ }
244
+ /**
245
+ * Build an accessibility selector string from role and name.
246
+ *
247
+ * @param role The ARIA role for the selector
248
+ * @param name The accessible name to match
249
+ * @returns Formatted selector string (e.g., "role=button[name=\"Click me\"]")
250
+ */
251
+ function buildA11ySelector(role, name) {
252
+ const escapedName = name.replace(/"/gu, '\\"');
253
+ return `role=${role}[name="${escapedName}"]`;
254
+ }
255
+ /**
256
+ * Resolve a target element to a Playwright Locator.
257
+ *
258
+ * @param page The Playwright page to search
259
+ * @param targetType The type of target identifier (a11yRef, testId, or CSS selector)
260
+ * @param targetValue The target value to resolve
261
+ * @param refMap Map of a11y refs to selectors (used when targetType is 'a11yRef')
262
+ * @returns Playwright Locator for the resolved element
263
+ */
264
+ async function resolveTarget(page, targetType, targetValue, refMap) {
265
+ switch (targetType) {
266
+ case 'a11yRef': {
267
+ const selector = refMap.get(targetValue);
268
+ if (!selector) {
269
+ throw new Error(`Unknown a11yRef: ${targetValue}. ` +
270
+ `Available refs: ${Array.from(refMap.keys()).join(', ')}`);
271
+ }
272
+ return page.locator(selector);
273
+ }
274
+ case 'testId':
275
+ return page.locator(`[data-testid="${targetValue}"]`);
276
+ case 'selector':
277
+ return page.locator(targetValue);
278
+ default: {
279
+ const exhaustiveCheck = targetType;
280
+ throw new Error(`Unknown target type: ${exhaustiveCheck}`);
281
+ }
282
+ }
283
+ }
284
+ /**
285
+ * Wait for a target element to become visible.
286
+ *
287
+ * @param page The Playwright page to search
288
+ * @param targetType The type of target identifier (a11yRef, testId, or CSS selector)
289
+ * @param targetValue The target value to resolve
290
+ * @param refMap Map of a11y refs to selectors (used when targetType is 'a11yRef')
291
+ * @param timeoutMs Maximum time to wait in milliseconds
292
+ * @returns Playwright Locator for the visible element
293
+ */
294
+ async function waitForTarget(page, targetType, targetValue, refMap, timeoutMs) {
295
+ const locator = await resolveTarget(page, targetType, targetValue, refMap);
296
+ await locator.waitFor({ state: 'visible', timeout: timeoutMs });
297
+ return locator;
298
+ }
299
+ //# sourceMappingURL=discovery.cjs.map