@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,236 @@
1
+ import { DEFAULT_INTERACTION_TIMEOUT_MS } from "../constants.mjs";
2
+ import { getSessionManager } from "../session-manager.mjs";
3
+ import { classifyNavigationError, classifyTabError, classifyNotificationError } from "./error-classification.mjs";
4
+ import { runTool } from "./run-tool.mjs";
5
+ import { ErrorCodes } from "../types/index.mjs";
6
+ import { createErrorResponse } from "../utils/index.mjs";
7
+ /**
8
+ * Handles navigation to a specific screen or URL.
9
+ *
10
+ * @param input The navigate input containing target screen and optional URL
11
+ * @param options Optional handler configuration
12
+ * @returns Promise resolving to navigate result with current URL information
13
+ */
14
+ export async function handleNavigate(input, options) {
15
+ const startTime = Date.now();
16
+ const sessionManager = getSessionManager();
17
+ const sessionId = sessionManager.getSessionId();
18
+ if (input.screen === 'url' && !input.url) {
19
+ return createErrorResponse(ErrorCodes.MM_INVALID_INPUT, 'url is required when screen is "url"', { input }, sessionId, startTime);
20
+ }
21
+ const validScreens = ['home', 'settings', 'url', 'notification'];
22
+ if (!validScreens.includes(input.screen)) {
23
+ return createErrorResponse(ErrorCodes.MM_INVALID_INPUT, `Unknown screen: ${String(input.screen)}`, { input }, sessionId, startTime);
24
+ }
25
+ return runTool({
26
+ toolName: 'mm_navigate',
27
+ input,
28
+ options,
29
+ /**
30
+ * Executes the navigation action to the target screen.
31
+ *
32
+ * @param context The tool execution context containing page and reference map
33
+ * @returns Promise resolving to navigate result with success status and URL
34
+ */
35
+ execute: async (context) => {
36
+ switch (input.screen) {
37
+ case 'home':
38
+ await sessionManager.navigateToHome();
39
+ break;
40
+ case 'settings':
41
+ await sessionManager.navigateToSettings();
42
+ break;
43
+ case 'url':
44
+ await sessionManager.navigateToUrl(input.url);
45
+ break;
46
+ case 'notification':
47
+ await sessionManager.navigateToNotification();
48
+ break;
49
+ default:
50
+ throw new Error(`Unsupported screen: ${String(input.screen)}`);
51
+ }
52
+ return {
53
+ navigated: true,
54
+ currentUrl: context.page.url(),
55
+ };
56
+ },
57
+ classifyError: classifyNavigationError,
58
+ /**
59
+ * Sanitizes input for knowledge store recording.
60
+ *
61
+ * @returns Sanitized input object with screen and URL information
62
+ */
63
+ sanitizeInputForRecording: () => ({
64
+ screen: input.screen,
65
+ url: input.url,
66
+ }),
67
+ });
68
+ }
69
+ /**
70
+ * Handles waiting for a notification popup to appear.
71
+ *
72
+ * @param input The wait input containing timeout options
73
+ * @param options Optional handler configuration
74
+ * @returns Promise resolving to wait result with notification page URL
75
+ */
76
+ export async function handleWaitForNotification(input, options) {
77
+ const sessionManager = getSessionManager();
78
+ const timeoutMs = input.timeoutMs ?? DEFAULT_INTERACTION_TIMEOUT_MS;
79
+ return runTool({
80
+ toolName: 'mm_wait_for_notification',
81
+ input,
82
+ options,
83
+ /**
84
+ * Executes the wait action for notification popup.
85
+ *
86
+ * @returns Promise resolving to wait result with notification page URL
87
+ */
88
+ execute: async () => {
89
+ const notificationPage = await sessionManager.waitForNotificationPage(timeoutMs);
90
+ const pageUrl = notificationPage.url();
91
+ return {
92
+ found: true,
93
+ pageUrl,
94
+ };
95
+ },
96
+ classifyError: classifyNotificationError,
97
+ /**
98
+ * Sanitizes input for knowledge store recording.
99
+ *
100
+ * @returns Sanitized input object with timeout information
101
+ */
102
+ sanitizeInputForRecording: () => ({ timeoutMs }),
103
+ });
104
+ }
105
+ /**
106
+ * Handles switching to a different tab by role or URL.
107
+ *
108
+ * @param input The switch input containing tab role or URL to match
109
+ * @param options Optional handler configuration
110
+ * @returns Promise resolving to switch result with active tab information
111
+ */
112
+ export async function handleSwitchToTab(input, options) {
113
+ const startTime = Date.now();
114
+ const sessionManager = getSessionManager();
115
+ const sessionId = sessionManager.getSessionId();
116
+ if (!input.role && !input.url) {
117
+ return createErrorResponse(ErrorCodes.MM_INVALID_INPUT, 'Either role or url must be provided', { input }, sessionId, startTime);
118
+ }
119
+ return runTool({
120
+ toolName: 'mm_switch_to_tab',
121
+ input,
122
+ options,
123
+ /**
124
+ * Executes the tab switch action.
125
+ *
126
+ * @param _context The tool execution context containing page and reference map
127
+ * @returns Promise resolving to switch result with active tab information
128
+ */
129
+ execute: async (_context) => {
130
+ const trackedPages = sessionManager.getTrackedPages();
131
+ const targetPage = trackedPages.find((trackedPage) => {
132
+ if (input.role) {
133
+ return trackedPage.role === input.role;
134
+ }
135
+ if (input.url) {
136
+ return trackedPage.url.startsWith(input.url);
137
+ }
138
+ return false;
139
+ });
140
+ if (!targetPage) {
141
+ const availableTabs = trackedPages.map((trackedPage) => ({
142
+ role: trackedPage.role,
143
+ url: trackedPage.url,
144
+ }));
145
+ throw new Error(`No tab found matching: ${input.role ?? input.url}. Available tabs: ${JSON.stringify(availableTabs)}`);
146
+ }
147
+ await targetPage.page.bringToFront();
148
+ sessionManager.setActivePage(targetPage.page);
149
+ const updatedTrackedPages = sessionManager.getTrackedPages();
150
+ const activeTabInfo = updatedTrackedPages.find((trackedPage) => trackedPage.page === targetPage.page);
151
+ return {
152
+ switched: true,
153
+ activeTab: {
154
+ role: activeTabInfo?.role ?? 'other',
155
+ url: targetPage.page.url(),
156
+ },
157
+ };
158
+ },
159
+ classifyError: classifyTabError,
160
+ /**
161
+ * Sanitizes input for knowledge store recording.
162
+ *
163
+ * @returns Sanitized input object with role and URL information
164
+ */
165
+ sanitizeInputForRecording: () => ({
166
+ role: input.role,
167
+ url: input.url,
168
+ }),
169
+ });
170
+ }
171
+ /**
172
+ * Handles closing a tab by role or URL.
173
+ *
174
+ * @param input The close input containing tab role or URL to match
175
+ * @param options Optional handler configuration
176
+ * @returns Promise resolving to close result with closed tab URL
177
+ */
178
+ export async function handleCloseTab(input, options) {
179
+ const startTime = Date.now();
180
+ const sessionManager = getSessionManager();
181
+ const sessionId = sessionManager.getSessionId();
182
+ if (!input.role && !input.url) {
183
+ return createErrorResponse(ErrorCodes.MM_INVALID_INPUT, 'Either role or url must be provided', { input }, sessionId, startTime);
184
+ }
185
+ return runTool({
186
+ toolName: 'mm_close_tab',
187
+ input,
188
+ options,
189
+ /**
190
+ * Executes the tab close action.
191
+ *
192
+ * @param context The tool execution context containing page and reference map
193
+ * @returns Promise resolving to close result with closed tab URL
194
+ */
195
+ execute: async (context) => {
196
+ const trackedPages = sessionManager.getTrackedPages();
197
+ const targetPage = trackedPages.find((trackedPage) => {
198
+ if (input.role) {
199
+ return trackedPage.role === input.role;
200
+ }
201
+ if (input.url) {
202
+ return trackedPage.url.startsWith(input.url);
203
+ }
204
+ return false;
205
+ });
206
+ if (!targetPage) {
207
+ throw new Error(`No tab found matching: ${input.role ?? input.url}`);
208
+ }
209
+ const closedUrl = targetPage.url;
210
+ const currentActivePage = context.page;
211
+ if (targetPage.page === currentActivePage) {
212
+ const extensionPage = trackedPages.find((trackedPage) => trackedPage.role === 'extension');
213
+ if (extensionPage) {
214
+ await extensionPage.page.bringToFront();
215
+ sessionManager.setActivePage(extensionPage.page);
216
+ }
217
+ }
218
+ await targetPage.page.close();
219
+ return {
220
+ closed: true,
221
+ closedUrl,
222
+ };
223
+ },
224
+ classifyError: classifyTabError,
225
+ /**
226
+ * Sanitizes input for knowledge store recording.
227
+ *
228
+ * @returns Sanitized input object with role and URL information
229
+ */
230
+ sanitizeInputForRecording: () => ({
231
+ role: input.role,
232
+ url: input.url,
233
+ }),
234
+ });
235
+ }
236
+ //# sourceMappingURL=navigation.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.mjs","sourceRoot":"","sources":["../../../src/mcp-server/tools/navigation.ts"],"names":[],"mappings":"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","sourcesContent":["import { DEFAULT_INTERACTION_TIMEOUT_MS } from '../constants.js';\nimport { getSessionManager } from '../session-manager.js';\nimport {\n classifyNavigationError,\n classifyTabError,\n classifyNotificationError,\n} from './error-classification.js';\nimport { runTool } from './run-tool.js';\nimport type {\n NavigateInput,\n NavigateResult,\n WaitForNotificationInput,\n WaitForNotificationResult,\n SwitchToTabInput,\n SwitchToTabResult,\n CloseTabInput,\n CloseTabResult,\n McpResponse,\n HandlerOptions,\n} from '../types';\nimport { ErrorCodes } from '../types';\nimport { createErrorResponse } from '../utils';\n\n/**\n * Handles navigation to a specific screen or URL.\n *\n * @param input The navigate input containing target screen and optional URL\n * @param options Optional handler configuration\n * @returns Promise resolving to navigate result with current URL information\n */\nexport async function handleNavigate(\n input: NavigateInput,\n options?: HandlerOptions,\n): Promise<McpResponse<NavigateResult>> {\n const startTime = Date.now();\n const sessionManager = getSessionManager();\n const sessionId = sessionManager.getSessionId();\n\n if (input.screen === 'url' && !input.url) {\n return createErrorResponse(\n ErrorCodes.MM_INVALID_INPUT,\n 'url is required when screen is \"url\"',\n { input },\n sessionId,\n startTime,\n );\n }\n\n const validScreens = ['home', 'settings', 'url', 'notification'];\n if (!validScreens.includes(input.screen)) {\n return createErrorResponse(\n ErrorCodes.MM_INVALID_INPUT,\n `Unknown screen: ${String(input.screen)}`,\n { input },\n sessionId,\n startTime,\n );\n }\n\n return runTool<NavigateInput, NavigateResult>({\n toolName: 'mm_navigate',\n input,\n options,\n\n /**\n * Executes the navigation action to the target screen.\n *\n * @param context The tool execution context containing page and reference map\n * @returns Promise resolving to navigate result with success status and URL\n */\n execute: async (context) => {\n switch (input.screen) {\n case 'home':\n await sessionManager.navigateToHome();\n break;\n case 'settings':\n await sessionManager.navigateToSettings();\n break;\n case 'url':\n await sessionManager.navigateToUrl(input.url as string);\n break;\n case 'notification':\n await sessionManager.navigateToNotification();\n break;\n default:\n throw new Error(`Unsupported screen: ${String(input.screen)}`);\n }\n\n return {\n navigated: true,\n currentUrl: context.page.url(),\n };\n },\n\n classifyError: classifyNavigationError,\n\n /**\n * Sanitizes input for knowledge store recording.\n *\n * @returns Sanitized input object with screen and URL information\n */\n sanitizeInputForRecording: () => ({\n screen: input.screen,\n url: input.url,\n }),\n });\n}\n\n/**\n * Handles waiting for a notification popup to appear.\n *\n * @param input The wait input containing timeout options\n * @param options Optional handler configuration\n * @returns Promise resolving to wait result with notification page URL\n */\nexport async function handleWaitForNotification(\n input: WaitForNotificationInput,\n options?: HandlerOptions,\n): Promise<McpResponse<WaitForNotificationResult>> {\n const sessionManager = getSessionManager();\n const timeoutMs = input.timeoutMs ?? DEFAULT_INTERACTION_TIMEOUT_MS;\n\n return runTool<WaitForNotificationInput, WaitForNotificationResult>({\n toolName: 'mm_wait_for_notification',\n input,\n options,\n\n /**\n * Executes the wait action for notification popup.\n *\n * @returns Promise resolving to wait result with notification page URL\n */\n execute: async () => {\n const notificationPage =\n await sessionManager.waitForNotificationPage(timeoutMs);\n const pageUrl = notificationPage.url();\n\n return {\n found: true,\n pageUrl,\n };\n },\n\n classifyError: classifyNotificationError,\n\n /**\n * Sanitizes input for knowledge store recording.\n *\n * @returns Sanitized input object with timeout information\n */\n sanitizeInputForRecording: () => ({ timeoutMs }),\n });\n}\n\n/**\n * Handles switching to a different tab by role or URL.\n *\n * @param input The switch input containing tab role or URL to match\n * @param options Optional handler configuration\n * @returns Promise resolving to switch result with active tab information\n */\nexport async function handleSwitchToTab(\n input: SwitchToTabInput,\n options?: HandlerOptions,\n): Promise<McpResponse<SwitchToTabResult>> {\n const startTime = Date.now();\n const sessionManager = getSessionManager();\n const sessionId = sessionManager.getSessionId();\n\n if (!input.role && !input.url) {\n return createErrorResponse(\n ErrorCodes.MM_INVALID_INPUT,\n 'Either role or url must be provided',\n { input },\n sessionId,\n startTime,\n );\n }\n\n return runTool<SwitchToTabInput, SwitchToTabResult>({\n toolName: 'mm_switch_to_tab',\n input,\n options,\n\n /**\n * Executes the tab switch action.\n *\n * @param _context The tool execution context containing page and reference map\n * @returns Promise resolving to switch result with active tab information\n */\n execute: async (_context) => {\n const trackedPages = sessionManager.getTrackedPages();\n const targetPage = trackedPages.find((trackedPage) => {\n if (input.role) {\n return trackedPage.role === input.role;\n }\n if (input.url) {\n return trackedPage.url.startsWith(input.url);\n }\n return false;\n });\n\n if (!targetPage) {\n const availableTabs = trackedPages.map((trackedPage) => ({\n role: trackedPage.role,\n url: trackedPage.url,\n }));\n throw new Error(\n `No tab found matching: ${input.role ?? input.url}. Available tabs: ${JSON.stringify(availableTabs)}`,\n );\n }\n\n await targetPage.page.bringToFront();\n sessionManager.setActivePage(targetPage.page);\n\n const updatedTrackedPages = sessionManager.getTrackedPages();\n const activeTabInfo = updatedTrackedPages.find(\n (trackedPage) => trackedPage.page === targetPage.page,\n );\n\n return {\n switched: true,\n activeTab: {\n role: activeTabInfo?.role ?? 'other',\n url: targetPage.page.url(),\n },\n };\n },\n\n classifyError: classifyTabError,\n\n /**\n * Sanitizes input for knowledge store recording.\n *\n * @returns Sanitized input object with role and URL information\n */\n sanitizeInputForRecording: () => ({\n role: input.role,\n url: input.url,\n }),\n });\n}\n\n/**\n * Handles closing a tab by role or URL.\n *\n * @param input The close input containing tab role or URL to match\n * @param options Optional handler configuration\n * @returns Promise resolving to close result with closed tab URL\n */\nexport async function handleCloseTab(\n input: CloseTabInput,\n options?: HandlerOptions,\n): Promise<McpResponse<CloseTabResult>> {\n const startTime = Date.now();\n const sessionManager = getSessionManager();\n const sessionId = sessionManager.getSessionId();\n\n if (!input.role && !input.url) {\n return createErrorResponse(\n ErrorCodes.MM_INVALID_INPUT,\n 'Either role or url must be provided',\n { input },\n sessionId,\n startTime,\n );\n }\n\n return runTool<CloseTabInput, CloseTabResult>({\n toolName: 'mm_close_tab',\n input,\n options,\n\n /**\n * Executes the tab close action.\n *\n * @param context The tool execution context containing page and reference map\n * @returns Promise resolving to close result with closed tab URL\n */\n execute: async (context) => {\n const trackedPages = sessionManager.getTrackedPages();\n const targetPage = trackedPages.find((trackedPage) => {\n if (input.role) {\n return trackedPage.role === input.role;\n }\n if (input.url) {\n return trackedPage.url.startsWith(input.url);\n }\n return false;\n });\n\n if (!targetPage) {\n throw new Error(`No tab found matching: ${input.role ?? input.url}`);\n }\n\n const closedUrl = targetPage.url;\n\n const currentActivePage = context.page;\n if (targetPage.page === currentActivePage) {\n const extensionPage = trackedPages.find(\n (trackedPage) => trackedPage.role === 'extension',\n );\n if (extensionPage) {\n await extensionPage.page.bringToFront();\n sessionManager.setActivePage(extensionPage.page);\n }\n }\n\n await targetPage.page.close();\n\n return {\n closed: true,\n closedUrl,\n };\n },\n\n classifyError: classifyTabError,\n\n /**\n * Sanitizes input for knowledge store recording.\n *\n * @returns Sanitized input object with role and URL information\n */\n sanitizeInputForRecording: () => ({\n role: input.role,\n url: input.url,\n }),\n });\n}\n"]}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toolHandlers = exports.buildToolHandlersRecord = exports.hasToolHandler = exports.getToolHandler = void 0;
4
+ const definitions_js_1 = require("./definitions.cjs");
5
+ var definitions_js_2 = require("./definitions.cjs");
6
+ Object.defineProperty(exports, "getToolHandler", { enumerable: true, get: function () { return definitions_js_2.getToolHandler; } });
7
+ Object.defineProperty(exports, "hasToolHandler", { enumerable: true, get: function () { return definitions_js_2.hasToolHandler; } });
8
+ Object.defineProperty(exports, "buildToolHandlersRecord", { enumerable: true, get: function () { return definitions_js_2.buildToolHandlersRecord; } });
9
+ exports.toolHandlers = (0, definitions_js_1.buildToolHandlersRecord)();
10
+ //# sourceMappingURL=registry.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.cjs","sourceRoot":"","sources":["../../../src/mcp-server/tools/registry.ts"],"names":[],"mappings":";;;AAAA,sDAA2D;AAE3D,oDAI0B;AAHxB,gHAAA,cAAc,OAAA;AACd,gHAAA,cAAc,OAAA;AACd,yHAAA,uBAAuB,OAAA;AAIZ,QAAA,YAAY,GAAG,IAAA,wCAAuB,GAAE,CAAC","sourcesContent":["import { buildToolHandlersRecord } from './definitions.js';\n\nexport {\n getToolHandler,\n hasToolHandler,\n buildToolHandlersRecord,\n} from './definitions.js';\nexport type { ToolHandler } from './batch.js';\n\nexport const toolHandlers = buildToolHandlersRecord();\n"]}
@@ -0,0 +1,4 @@
1
+ export { getToolHandler, hasToolHandler, buildToolHandlersRecord, } from "./definitions.cjs";
2
+ export type { ToolHandler } from "./batch.cjs";
3
+ export declare const toolHandlers: Record<string, import("./batch.cjs").ToolHandler>;
4
+ //# sourceMappingURL=registry.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.cts","sourceRoot":"","sources":["../../../src/mcp-server/tools/registry.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,cAAc,EACd,uBAAuB,GACxB,0BAAyB;AAC1B,YAAY,EAAE,WAAW,EAAE,oBAAmB;AAE9C,eAAO,MAAM,YAAY,kDAA4B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { getToolHandler, hasToolHandler, buildToolHandlersRecord, } from "./definitions.mjs";
2
+ export type { ToolHandler } from "./batch.mjs";
3
+ export declare const toolHandlers: Record<string, import("./batch.mjs").ToolHandler>;
4
+ //# sourceMappingURL=registry.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.mts","sourceRoot":"","sources":["../../../src/mcp-server/tools/registry.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,cAAc,EACd,uBAAuB,GACxB,0BAAyB;AAC1B,YAAY,EAAE,WAAW,EAAE,oBAAmB;AAE9C,eAAO,MAAM,YAAY,kDAA4B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { buildToolHandlersRecord } from "./definitions.mjs";
2
+ export { getToolHandler, hasToolHandler, buildToolHandlersRecord } from "./definitions.mjs";
3
+ export const toolHandlers = buildToolHandlersRecord();
4
+ //# sourceMappingURL=registry.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.mjs","sourceRoot":"","sources":["../../../src/mcp-server/tools/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,0BAAyB;AAE3D,OAAO,EACL,cAAc,EACd,cAAc,EACd,uBAAuB,EACxB,0BAAyB;AAG1B,MAAM,CAAC,MAAM,YAAY,GAAG,uBAAuB,EAAE,CAAC","sourcesContent":["import { buildToolHandlersRecord } from './definitions.js';\n\nexport {\n getToolHandler,\n hasToolHandler,\n buildToolHandlersRecord,\n} from './definitions.js';\nexport type { ToolHandler } from './batch.js';\n\nexport const toolHandlers = buildToolHandlersRecord();\n"]}
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runTool = runTool;
4
+ const knowledge_store_js_1 = require("../knowledge-store.cjs");
5
+ const session_manager_js_1 = require("../session-manager.cjs");
6
+ const helpers_js_1 = require("./helpers.cjs");
7
+ const types_1 = require("../types/index.cjs");
8
+ const utils_1 = require("../utils/index.cjs");
9
+ /**
10
+ * Creates an empty observation object for step recording.
11
+ *
12
+ * @returns Empty observation with default state, testIds, and a11y nodes
13
+ */
14
+ function createEmptyObservation() {
15
+ return {
16
+ state: {},
17
+ testIds: [],
18
+ a11y: { nodes: [] },
19
+ };
20
+ }
21
+ /**
22
+ * Type guard to check if result is a ToolExecuteResult with observation.
23
+ *
24
+ * @param result The result to check
25
+ * @returns True if result is a ToolExecuteResult with observation property
26
+ */
27
+ function isToolExecuteResult(result) {
28
+ return (typeof result === 'object' &&
29
+ result !== null &&
30
+ 'result' in result &&
31
+ Object.prototype.hasOwnProperty.call(result, 'result'));
32
+ }
33
+ /**
34
+ * Executes a tool with error handling, observation collection, and knowledge store recording.
35
+ *
36
+ * @param config The tool execution configuration with input, execute function, and error handling
37
+ * @returns Promise resolving to MCP response with tool result or error information
38
+ */
39
+ async function runTool(config) {
40
+ const startTime = Date.now();
41
+ const sessionManager = (0, session_manager_js_1.getSessionManager)();
42
+ const sessionId = sessionManager.getSessionId();
43
+ const requiresSession = config.requiresSession ?? true;
44
+ const effectivePolicy = config.options?.observationPolicy ?? config.observationPolicy ?? 'default';
45
+ try {
46
+ if (requiresSession && !sessionManager.hasActiveSession()) {
47
+ return (0, utils_1.createErrorResponse)(types_1.ErrorCodes.MM_NO_ACTIVE_SESSION, 'No active session. Call launch first.', { input: config.input }, undefined, startTime);
48
+ }
49
+ const context = {
50
+ sessionId,
51
+ page: requiresSession ? sessionManager.getPage() : undefined,
52
+ refMap: requiresSession ? sessionManager.getRefMap() : new Map(),
53
+ startTime,
54
+ };
55
+ const executeResult = await config.execute(context);
56
+ let result;
57
+ let customObservation;
58
+ if (isToolExecuteResult(executeResult)) {
59
+ result = executeResult.result;
60
+ customObservation = executeResult.observation;
61
+ }
62
+ else {
63
+ result = executeResult;
64
+ }
65
+ let observation;
66
+ if (effectivePolicy === 'custom' && customObservation) {
67
+ observation = customObservation;
68
+ }
69
+ else if (effectivePolicy === 'default' && requiresSession) {
70
+ observation = await (0, helpers_js_1.collectObservation)(context.page, 'full');
71
+ }
72
+ else if ((effectivePolicy === 'none' || effectivePolicy === 'failures') &&
73
+ requiresSession) {
74
+ observation = await (0, helpers_js_1.collectObservation)(context.page, 'minimal');
75
+ }
76
+ if (sessionId) {
77
+ const recordInput = config.sanitizeInputForRecording
78
+ ? config.sanitizeInputForRecording(config.input)
79
+ : config.input;
80
+ await knowledge_store_js_1.knowledgeStore.recordStep({
81
+ sessionId,
82
+ toolName: config.toolName,
83
+ input: recordInput,
84
+ target: config.getTarget?.(config.input),
85
+ outcome: { ok: true },
86
+ observation: observation ?? createEmptyObservation(),
87
+ durationMs: Date.now() - startTime,
88
+ context: sessionManager.getEnvironmentMode(),
89
+ });
90
+ }
91
+ return (0, utils_1.createSuccessResponse)(result, sessionId, startTime);
92
+ }
93
+ catch (error) {
94
+ const errorInfo = config.classifyError?.(error) ?? {
95
+ code: `MM_${config.toolName.toUpperCase().replace(/^MM_/u, '')}_FAILED`,
96
+ message: (0, utils_1.extractErrorMessage)(error),
97
+ };
98
+ let failureObservation = createEmptyObservation();
99
+ if (requiresSession && sessionManager.hasActiveSession()) {
100
+ if (effectivePolicy === 'failures' || effectivePolicy === 'default') {
101
+ try {
102
+ const page = sessionManager.getPage();
103
+ failureObservation = await (0, helpers_js_1.collectObservation)(page, 'full');
104
+ }
105
+ catch (collectError) {
106
+ (0, utils_1.debugWarn)('run-tool.collectObservation', collectError);
107
+ failureObservation = await (0, helpers_js_1.collectObservation)(undefined, 'minimal');
108
+ }
109
+ }
110
+ else if (effectivePolicy === 'none') {
111
+ try {
112
+ failureObservation = await (0, helpers_js_1.collectObservation)(undefined, 'minimal');
113
+ }
114
+ catch (collectError) {
115
+ (0, utils_1.debugWarn)('run-tool.collectObservation', collectError);
116
+ }
117
+ }
118
+ }
119
+ if (sessionId) {
120
+ const recordInput = config.sanitizeInputForRecording
121
+ ? config.sanitizeInputForRecording(config.input)
122
+ : config.input;
123
+ await knowledge_store_js_1.knowledgeStore.recordStep({
124
+ sessionId,
125
+ toolName: config.toolName,
126
+ input: recordInput,
127
+ target: config.getTarget?.(config.input),
128
+ outcome: {
129
+ ok: false,
130
+ error: { code: errorInfo.code, message: errorInfo.message },
131
+ },
132
+ observation: failureObservation,
133
+ durationMs: Date.now() - startTime,
134
+ context: sessionManager.getEnvironmentMode(),
135
+ });
136
+ }
137
+ return (0, utils_1.createErrorResponse)(errorInfo.code, errorInfo.message, { input: config.input }, sessionId, startTime);
138
+ }
139
+ }
140
+ //# sourceMappingURL=run-tool.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-tool.cjs","sourceRoot":"","sources":["../../../src/mcp-server/tools/run-tool.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Page } from '@playwright/test';\n\nimport type { ExtensionState } from '../../capabilities/types.js';\nimport { knowledgeStore } from '../knowledge-store.js';\nimport { getSessionManager } from '../session-manager.js';\nimport { collectObservation } from './helpers.js';\nimport type {\n McpResponse,\n HandlerOptions,\n StepRecordObservation,\n ErrorCode,\n} from '../types';\nimport { ErrorCodes } from '../types';\nimport {\n createSuccessResponse,\n createErrorResponse,\n extractErrorMessage,\n debugWarn,\n} from '../utils';\n\n/**\n * Creates an empty observation object for step recording.\n *\n * @returns Empty observation with default state, testIds, and a11y nodes\n */\nfunction createEmptyObservation(): StepRecordObservation {\n return {\n state: {} as ExtensionState,\n testIds: [],\n a11y: { nodes: [] },\n };\n}\n\nexport type ObservationPolicy = 'none' | 'default' | 'custom' | 'failures';\n\nexport type ToolExecutionContext = {\n sessionId: string | undefined;\n page: Page;\n refMap: Map<string, string>;\n startTime: number;\n};\n\nexport type ToolExecuteResult<TResult> = {\n result: TResult;\n observation?: StepRecordObservation;\n};\n\nexport type ToolExecutionConfig<TInput, TResult> = {\n toolName: string;\n input: TInput;\n options?: HandlerOptions;\n requiresSession?: boolean;\n observationPolicy?: ObservationPolicy;\n execute: (\n context: ToolExecutionContext,\n ) => Promise<TResult | ToolExecuteResult<TResult>>;\n classifyError?: (error: unknown) => {\n code: string;\n message: string;\n };\n getTarget?: (input: TInput) =>\n | {\n testId?: string;\n selector?: string;\n a11yRef?: string;\n }\n | undefined;\n sanitizeInputForRecording?: (input: TInput) => Record<string, unknown>;\n};\n\n/**\n * Type guard to check if result is a ToolExecuteResult with observation.\n *\n * @param result The result to check\n * @returns True if result is a ToolExecuteResult with observation property\n */\nfunction isToolExecuteResult<TResult>(\n result: TResult | ToolExecuteResult<TResult>,\n): result is ToolExecuteResult<TResult> {\n return (\n typeof result === 'object' &&\n result !== null &&\n 'result' in result &&\n Object.prototype.hasOwnProperty.call(result, 'result')\n );\n}\n\n/**\n * Executes a tool with error handling, observation collection, and knowledge store recording.\n *\n * @param config The tool execution configuration with input, execute function, and error handling\n * @returns Promise resolving to MCP response with tool result or error information\n */\nexport async function runTool<TInput, TResult>(\n config: ToolExecutionConfig<TInput, TResult>,\n): Promise<McpResponse<TResult>> {\n const startTime = Date.now();\n const sessionManager = getSessionManager();\n const sessionId = sessionManager.getSessionId();\n const requiresSession = config.requiresSession ?? true;\n\n const effectivePolicy =\n config.options?.observationPolicy ?? config.observationPolicy ?? 'default';\n\n try {\n if (requiresSession && !sessionManager.hasActiveSession()) {\n return createErrorResponse(\n ErrorCodes.MM_NO_ACTIVE_SESSION,\n 'No active session. Call launch first.',\n { input: config.input },\n undefined,\n startTime,\n );\n }\n\n const context: ToolExecutionContext = {\n sessionId,\n page: requiresSession ? sessionManager.getPage() : (undefined as never),\n refMap: requiresSession ? sessionManager.getRefMap() : new Map(),\n startTime,\n };\n\n const executeResult = await config.execute(context);\n\n let result: TResult;\n let customObservation: StepRecordObservation | undefined;\n\n if (isToolExecuteResult<TResult>(executeResult)) {\n result = executeResult.result;\n customObservation = executeResult.observation;\n } else {\n result = executeResult;\n }\n\n let observation: StepRecordObservation | undefined;\n\n if (effectivePolicy === 'custom' && customObservation) {\n observation = customObservation;\n } else if (effectivePolicy === 'default' && requiresSession) {\n observation = await collectObservation(context.page, 'full');\n } else if (\n (effectivePolicy === 'none' || effectivePolicy === 'failures') &&\n requiresSession\n ) {\n observation = await collectObservation(context.page, 'minimal');\n }\n\n if (sessionId) {\n const recordInput = config.sanitizeInputForRecording\n ? config.sanitizeInputForRecording(config.input)\n : (config.input as Record<string, unknown>);\n\n await knowledgeStore.recordStep({\n sessionId,\n toolName: config.toolName,\n input: recordInput,\n target: config.getTarget?.(config.input),\n outcome: { ok: true },\n observation: observation ?? createEmptyObservation(),\n durationMs: Date.now() - startTime,\n context: sessionManager.getEnvironmentMode(),\n });\n }\n\n return createSuccessResponse<TResult>(result, sessionId, startTime);\n } catch (error) {\n const errorInfo = config.classifyError?.(error) ?? {\n code: `MM_${config.toolName.toUpperCase().replace(/^MM_/u, '')}_FAILED`,\n message: extractErrorMessage(error),\n };\n\n let failureObservation: StepRecordObservation = createEmptyObservation();\n\n if (requiresSession && sessionManager.hasActiveSession()) {\n if (effectivePolicy === 'failures' || effectivePolicy === 'default') {\n try {\n const page = sessionManager.getPage();\n failureObservation = await collectObservation(page, 'full');\n } catch (collectError) {\n debugWarn('run-tool.collectObservation', collectError);\n failureObservation = await collectObservation(undefined, 'minimal');\n }\n } else if (effectivePolicy === 'none') {\n try {\n failureObservation = await collectObservation(undefined, 'minimal');\n } catch (collectError) {\n debugWarn('run-tool.collectObservation', collectError);\n }\n }\n }\n\n if (sessionId) {\n const recordInput = config.sanitizeInputForRecording\n ? config.sanitizeInputForRecording(config.input)\n : (config.input as Record<string, unknown>);\n\n await knowledgeStore.recordStep({\n sessionId,\n toolName: config.toolName,\n input: recordInput,\n target: config.getTarget?.(config.input),\n outcome: {\n ok: false,\n error: { code: errorInfo.code, message: errorInfo.message },\n },\n observation: failureObservation,\n durationMs: Date.now() - startTime,\n context: sessionManager.getEnvironmentMode(),\n });\n }\n\n return createErrorResponse(\n errorInfo.code as ErrorCode,\n errorInfo.message,\n { input: config.input },\n sessionId,\n startTime,\n );\n }\n}\n"]}
@@ -0,0 +1,39 @@
1
+ import type { Page } from "@playwright/test";
2
+ import type { McpResponse, HandlerOptions, StepRecordObservation } from "../types/index.cjs";
3
+ export type ObservationPolicy = 'none' | 'default' | 'custom' | 'failures';
4
+ export type ToolExecutionContext = {
5
+ sessionId: string | undefined;
6
+ page: Page;
7
+ refMap: Map<string, string>;
8
+ startTime: number;
9
+ };
10
+ export type ToolExecuteResult<TResult> = {
11
+ result: TResult;
12
+ observation?: StepRecordObservation;
13
+ };
14
+ export type ToolExecutionConfig<TInput, TResult> = {
15
+ toolName: string;
16
+ input: TInput;
17
+ options?: HandlerOptions;
18
+ requiresSession?: boolean;
19
+ observationPolicy?: ObservationPolicy;
20
+ execute: (context: ToolExecutionContext) => Promise<TResult | ToolExecuteResult<TResult>>;
21
+ classifyError?: (error: unknown) => {
22
+ code: string;
23
+ message: string;
24
+ };
25
+ getTarget?: (input: TInput) => {
26
+ testId?: string;
27
+ selector?: string;
28
+ a11yRef?: string;
29
+ } | undefined;
30
+ sanitizeInputForRecording?: (input: TInput) => Record<string, unknown>;
31
+ };
32
+ /**
33
+ * Executes a tool with error handling, observation collection, and knowledge store recording.
34
+ *
35
+ * @param config The tool execution configuration with input, execute function, and error handling
36
+ * @returns Promise resolving to MCP response with tool result or error information
37
+ */
38
+ export declare function runTool<TInput, TResult>(config: ToolExecutionConfig<TInput, TResult>): Promise<McpResponse<TResult>>;
39
+ //# sourceMappingURL=run-tool.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-tool.d.cts","sourceRoot":"","sources":["../../../src/mcp-server/tools/run-tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,yBAAyB;AAM7C,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,qBAAqB,EAEtB,2BAAiB;AAsBlB,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE3E,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,OAAO,IAAI;IACvC,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,qBAAqB,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAAC,MAAM,EAAE,OAAO,IAAI;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,OAAO,EAAE,CACP,OAAO,EAAE,oBAAoB,KAC1B,OAAO,CAAC,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;IACnD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK;QAClC,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KACtB;QACE,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GACD,SAAS,CAAC;IACd,yBAAyB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxE,CAAC;AAmBF;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,MAAM,EAAE,OAAO,EAC3C,MAAM,EAAE,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3C,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CA4H/B"}
@@ -0,0 +1,39 @@
1
+ import type { Page } from "@playwright/test";
2
+ import type { McpResponse, HandlerOptions, StepRecordObservation } from "../types/index.mjs";
3
+ export type ObservationPolicy = 'none' | 'default' | 'custom' | 'failures';
4
+ export type ToolExecutionContext = {
5
+ sessionId: string | undefined;
6
+ page: Page;
7
+ refMap: Map<string, string>;
8
+ startTime: number;
9
+ };
10
+ export type ToolExecuteResult<TResult> = {
11
+ result: TResult;
12
+ observation?: StepRecordObservation;
13
+ };
14
+ export type ToolExecutionConfig<TInput, TResult> = {
15
+ toolName: string;
16
+ input: TInput;
17
+ options?: HandlerOptions;
18
+ requiresSession?: boolean;
19
+ observationPolicy?: ObservationPolicy;
20
+ execute: (context: ToolExecutionContext) => Promise<TResult | ToolExecuteResult<TResult>>;
21
+ classifyError?: (error: unknown) => {
22
+ code: string;
23
+ message: string;
24
+ };
25
+ getTarget?: (input: TInput) => {
26
+ testId?: string;
27
+ selector?: string;
28
+ a11yRef?: string;
29
+ } | undefined;
30
+ sanitizeInputForRecording?: (input: TInput) => Record<string, unknown>;
31
+ };
32
+ /**
33
+ * Executes a tool with error handling, observation collection, and knowledge store recording.
34
+ *
35
+ * @param config The tool execution configuration with input, execute function, and error handling
36
+ * @returns Promise resolving to MCP response with tool result or error information
37
+ */
38
+ export declare function runTool<TInput, TResult>(config: ToolExecutionConfig<TInput, TResult>): Promise<McpResponse<TResult>>;
39
+ //# sourceMappingURL=run-tool.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-tool.d.mts","sourceRoot":"","sources":["../../../src/mcp-server/tools/run-tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,yBAAyB;AAM7C,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,qBAAqB,EAEtB,2BAAiB;AAsBlB,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE3E,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,OAAO,IAAI;IACvC,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,qBAAqB,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAAC,MAAM,EAAE,OAAO,IAAI;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,OAAO,EAAE,CACP,OAAO,EAAE,oBAAoB,KAC1B,OAAO,CAAC,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;IACnD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK;QAClC,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KACtB;QACE,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GACD,SAAS,CAAC;IACd,yBAAyB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxE,CAAC;AAmBF;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,MAAM,EAAE,OAAO,EAC3C,MAAM,EAAE,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3C,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CA4H/B"}