@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,240 @@
1
+ /**
2
+ * Generic Session Manager Interface for Browser Extension MCP Servers.
3
+ *
4
+ * This module defines the interface that concrete session managers must implement.
5
+ * The interface abstracts browser session management, page tracking, and extension state.
6
+ *
7
+ * Extension-specific implementations (e.g., MetaMaskSessionManager) should implement
8
+ * this interface and be injected into the core tool handlers.
9
+ */
10
+ import type { Page, BrowserContext } from "@playwright/test";
11
+ import type { TabRole, SessionState, SessionMetadata } from "./types/index.mjs";
12
+ import type { EnvironmentMode } from "../capabilities/context.mjs";
13
+ import type { ExtensionState, BuildCapability, FixtureCapability, ChainCapability, ContractSeedingCapability, StateSnapshotCapability, ScreenshotResult } from "../capabilities/types.mjs";
14
+ /**
15
+ * Represents a tracked browser page with its role and URL.
16
+ */
17
+ export type TrackedPage = {
18
+ role: TabRole;
19
+ url: string;
20
+ page: Page;
21
+ };
22
+ /**
23
+ * Configuration for launching a new browser session.
24
+ */
25
+ export type SessionLaunchInput = {
26
+ /** State initialization mode */
27
+ stateMode?: 'default' | 'onboarding' | 'custom';
28
+ /** Name of a preset fixture to use when stateMode is 'custom' */
29
+ fixturePreset?: string;
30
+ /** Custom fixture data when stateMode is 'custom' */
31
+ fixture?: Record<string, unknown>;
32
+ /** Goal description for this session (used in knowledge store) */
33
+ goal?: string;
34
+ /** Flow tags for categorizing this session */
35
+ flowTags?: string[];
36
+ /** Free-form tags for ad-hoc filtering */
37
+ tags?: string[];
38
+ /** Path to extension directory */
39
+ extensionPath?: string;
40
+ /** Whether to auto-build extension if not found */
41
+ autoBuild?: boolean;
42
+ /** Slow down actions for debugging (ms) */
43
+ slowMo?: number;
44
+ /** Port configuration */
45
+ ports?: {
46
+ anvil?: number;
47
+ fixtureServer?: number;
48
+ };
49
+ /** Smart contracts to deploy on launch */
50
+ seedContracts?: string[];
51
+ };
52
+ /**
53
+ * Result of launching a new session.
54
+ */
55
+ export type SessionLaunchResult = {
56
+ sessionId: string;
57
+ extensionId: string;
58
+ state: ExtensionState;
59
+ };
60
+ /**
61
+ * Screenshot options.
62
+ */
63
+ export type SessionScreenshotOptions = {
64
+ name: string;
65
+ fullPage?: boolean;
66
+ selector?: string;
67
+ };
68
+ /**
69
+ * Interface for session manager implementations.
70
+ *
71
+ * This interface defines the contract that extension-specific session managers
72
+ * must fulfill. Tool handlers depend on this interface, allowing them to work
73
+ * with any compliant session manager implementation.
74
+ */
75
+ export type ISessionManager = {
76
+ /**
77
+ * Check if there is an active session.
78
+ */
79
+ hasActiveSession(): boolean;
80
+ /**
81
+ * Get the current session ID, or undefined if no session.
82
+ */
83
+ getSessionId(): string | undefined;
84
+ /**
85
+ * Get the current session state.
86
+ */
87
+ getSessionState(): SessionState | undefined;
88
+ /**
89
+ * Get the current session metadata.
90
+ */
91
+ getSessionMetadata(): SessionMetadata | undefined;
92
+ /**
93
+ * Launch a new browser session.
94
+ *
95
+ * @throws If a session is already active
96
+ */
97
+ launch(input: SessionLaunchInput): Promise<SessionLaunchResult>;
98
+ /**
99
+ * Clean up the current session (browser, services, etc.).
100
+ *
101
+ * @returns true if cleanup was performed, false if no session was active
102
+ */
103
+ cleanup(): Promise<boolean>;
104
+ /**
105
+ * Get the current active page.
106
+ *
107
+ * @throws If no active session
108
+ */
109
+ getPage(): Page;
110
+ /**
111
+ * Set the active page for subsequent interactions.
112
+ */
113
+ setActivePage(page: Page): void;
114
+ /**
115
+ * Get all tracked pages in the current session.
116
+ */
117
+ getTrackedPages(): TrackedPage[];
118
+ /**
119
+ * Classify a page's role based on its URL.
120
+ */
121
+ classifyPageRole(page: Page, extensionId?: string): TabRole;
122
+ /**
123
+ * Get the browser context.
124
+ *
125
+ * @throws If no active session
126
+ */
127
+ getContext(): BrowserContext;
128
+ /**
129
+ * Get the current extension state.
130
+ *
131
+ * @throws If no active session
132
+ */
133
+ getExtensionState(): Promise<ExtensionState>;
134
+ /**
135
+ * Set the accessibility reference map (e1 -> selector).
136
+ */
137
+ setRefMap(map: Map<string, string>): void;
138
+ /**
139
+ * Get the current accessibility reference map.
140
+ */
141
+ getRefMap(): Map<string, string>;
142
+ /**
143
+ * Clear the accessibility reference map.
144
+ */
145
+ clearRefMap(): void;
146
+ /**
147
+ * Resolve an a11y ref (e.g., "e5") to a selector.
148
+ */
149
+ resolveA11yRef(ref: string): string | undefined;
150
+ /**
151
+ * Navigate to the extension home page.
152
+ */
153
+ navigateToHome(): Promise<void>;
154
+ /**
155
+ * Navigate to the extension settings page.
156
+ */
157
+ navigateToSettings(): Promise<void>;
158
+ /**
159
+ * Navigate to an external URL (opens new tab).
160
+ */
161
+ navigateToUrl(url: string): Promise<Page>;
162
+ /**
163
+ * Navigate to the notification page.
164
+ */
165
+ navigateToNotification(): Promise<Page>;
166
+ /**
167
+ * Wait for a notification page to appear.
168
+ */
169
+ waitForNotificationPage(timeoutMs: number): Promise<Page>;
170
+ /**
171
+ * Take a screenshot of the current page.
172
+ */
173
+ screenshot(options: SessionScreenshotOptions): Promise<ScreenshotResult>;
174
+ /**
175
+ * Get the build capability (if available).
176
+ */
177
+ getBuildCapability(): BuildCapability | undefined;
178
+ /**
179
+ * Get the fixture capability (if available).
180
+ */
181
+ getFixtureCapability(): FixtureCapability | undefined;
182
+ /**
183
+ * Get the chain capability (if available).
184
+ */
185
+ getChainCapability(): ChainCapability | undefined;
186
+ /**
187
+ * Get the contract seeding capability (if available).
188
+ */
189
+ getContractSeedingCapability(): ContractSeedingCapability | undefined;
190
+ /**
191
+ * Get the state snapshot capability (if available).
192
+ */
193
+ getStateSnapshotCapability(): StateSnapshotCapability | undefined;
194
+ /**
195
+ * Get the current environment mode.
196
+ *
197
+ * @returns 'e2e' for testing environment, 'prod' for production-like environment
198
+ */
199
+ getEnvironmentMode(): EnvironmentMode;
200
+ /**
201
+ * Set the current context (e2e or prod).
202
+ *
203
+ * @throws Error with code MM_CONTEXT_SWITCH_BLOCKED if session is active
204
+ */
205
+ setContext(context: 'e2e' | 'prod'): void;
206
+ /**
207
+ * Get current context information.
208
+ */
209
+ getContextInfo(): {
210
+ currentContext: 'e2e' | 'prod';
211
+ hasActiveSession: boolean;
212
+ sessionId: string | null;
213
+ capabilities: {
214
+ available: string[];
215
+ };
216
+ canSwitchContext: boolean;
217
+ };
218
+ };
219
+ /**
220
+ * Set the session manager instance.
221
+ *
222
+ * This should be called by extension-specific code during server initialization.
223
+ *
224
+ * @param manager The session manager implementation to inject
225
+ */
226
+ export declare function setSessionManager(manager: ISessionManager): void;
227
+ /**
228
+ * Get the session manager instance.
229
+ *
230
+ * @throws Error if no session manager has been set
231
+ * @returns The session manager instance
232
+ */
233
+ export declare function getSessionManager(): ISessionManager;
234
+ /**
235
+ * Check if a session manager has been set.
236
+ *
237
+ * @returns True if a session manager is set, false otherwise
238
+ */
239
+ export declare function hasSessionManager(): boolean;
240
+ //# sourceMappingURL=session-manager.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.d.mts","sourceRoot":"","sources":["../../src/mcp-server/session-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Generic Session Manager Interface for Browser Extension MCP Servers.
3
+ *
4
+ * This module defines the interface that concrete session managers must implement.
5
+ * The interface abstracts browser session management, page tracking, and extension state.
6
+ *
7
+ * Extension-specific implementations (e.g., MetaMaskSessionManager) should implement
8
+ * this interface and be injected into the core tool handlers.
9
+ */
10
+ /**
11
+ * Session manager instance holder.
12
+ *
13
+ * In the core package, this is undefined by default.
14
+ * Extension implementations should call setSessionManager() to inject
15
+ * their concrete implementation.
16
+ */
17
+ let _sessionManager;
18
+ /**
19
+ * Set the session manager instance.
20
+ *
21
+ * This should be called by extension-specific code during server initialization.
22
+ *
23
+ * @param manager The session manager implementation to inject
24
+ */
25
+ export function setSessionManager(manager) {
26
+ _sessionManager = manager;
27
+ }
28
+ /**
29
+ * Get the session manager instance.
30
+ *
31
+ * @throws Error if no session manager has been set
32
+ * @returns The session manager instance
33
+ */
34
+ export function getSessionManager() {
35
+ if (!_sessionManager) {
36
+ throw new Error('Session manager not initialized. Call setSessionManager() first.');
37
+ }
38
+ return _sessionManager;
39
+ }
40
+ /**
41
+ * Check if a session manager has been set.
42
+ *
43
+ * @returns True if a session manager is set, false otherwise
44
+ */
45
+ export function hasSessionManager() {
46
+ return _sessionManager !== undefined;
47
+ }
48
+ //# sourceMappingURL=session-manager.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.mjs","sourceRoot":"","sources":["../../src/mcp-server/session-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA+RH;;;;;;GAMG;AACH,IAAI,eAA4C,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAwB;IACxD,eAAe,GAAG,OAAO,CAAC;AAC5B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;IACJ,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,eAAe,KAAK,SAAS,CAAC;AACvC,CAAC","sourcesContent":["/**\n * Generic Session Manager Interface for Browser Extension MCP Servers.\n *\n * This module defines the interface that concrete session managers must implement.\n * The interface abstracts browser session management, page tracking, and extension state.\n *\n * Extension-specific implementations (e.g., MetaMaskSessionManager) should implement\n * this interface and be injected into the core tool handlers.\n */\n\nimport type { Page, BrowserContext } from '@playwright/test';\n\nimport type { TabRole, SessionState, SessionMetadata } from './types';\nimport type { EnvironmentMode } from '../capabilities/context.js';\nimport type {\n ExtensionState,\n BuildCapability,\n FixtureCapability,\n ChainCapability,\n ContractSeedingCapability,\n StateSnapshotCapability,\n ScreenshotResult,\n} from '../capabilities/types.js';\n\n/**\n * Represents a tracked browser page with its role and URL.\n */\nexport type TrackedPage = {\n role: TabRole;\n url: string;\n page: Page;\n};\n\n/**\n * Configuration for launching a new browser session.\n */\nexport type SessionLaunchInput = {\n /** State initialization mode */\n stateMode?: 'default' | 'onboarding' | 'custom';\n /** Name of a preset fixture to use when stateMode is 'custom' */\n fixturePreset?: string;\n /** Custom fixture data when stateMode is 'custom' */\n fixture?: Record<string, unknown>;\n /** Goal description for this session (used in knowledge store) */\n goal?: string;\n /** Flow tags for categorizing this session */\n flowTags?: string[];\n /** Free-form tags for ad-hoc filtering */\n tags?: string[];\n /** Path to extension directory */\n extensionPath?: string;\n /** Whether to auto-build extension if not found */\n autoBuild?: boolean;\n /** Slow down actions for debugging (ms) */\n slowMo?: number;\n /** Port configuration */\n ports?: {\n anvil?: number;\n fixtureServer?: number;\n };\n /** Smart contracts to deploy on launch */\n seedContracts?: string[];\n};\n\n/**\n * Result of launching a new session.\n */\nexport type SessionLaunchResult = {\n sessionId: string;\n extensionId: string;\n state: ExtensionState;\n};\n\n/**\n * Screenshot options.\n */\nexport type SessionScreenshotOptions = {\n name: string;\n fullPage?: boolean;\n selector?: string;\n};\n\n/**\n * Interface for session manager implementations.\n *\n * This interface defines the contract that extension-specific session managers\n * must fulfill. Tool handlers depend on this interface, allowing them to work\n * with any compliant session manager implementation.\n */\nexport type ISessionManager = {\n // -----------------------------------------------------------------------------\n // Session Lifecycle\n // -----------------------------------------------------------------------------\n\n /**\n * Check if there is an active session.\n */\n hasActiveSession(): boolean;\n\n /**\n * Get the current session ID, or undefined if no session.\n */\n getSessionId(): string | undefined;\n\n /**\n * Get the current session state.\n */\n getSessionState(): SessionState | undefined;\n\n /**\n * Get the current session metadata.\n */\n getSessionMetadata(): SessionMetadata | undefined;\n\n /**\n * Launch a new browser session.\n *\n * @throws If a session is already active\n */\n launch(input: SessionLaunchInput): Promise<SessionLaunchResult>;\n\n /**\n * Clean up the current session (browser, services, etc.).\n *\n * @returns true if cleanup was performed, false if no session was active\n */\n cleanup(): Promise<boolean>;\n\n // -----------------------------------------------------------------------------\n // Page Management\n // -----------------------------------------------------------------------------\n\n /**\n * Get the current active page.\n *\n * @throws If no active session\n */\n getPage(): Page;\n\n /**\n * Set the active page for subsequent interactions.\n */\n setActivePage(page: Page): void;\n\n /**\n * Get all tracked pages in the current session.\n */\n getTrackedPages(): TrackedPage[];\n\n /**\n * Classify a page's role based on its URL.\n */\n classifyPageRole(page: Page, extensionId?: string): TabRole;\n\n /**\n * Get the browser context.\n *\n * @throws If no active session\n */\n getContext(): BrowserContext;\n\n // -----------------------------------------------------------------------------\n // Extension State\n // -----------------------------------------------------------------------------\n\n /**\n * Get the current extension state.\n *\n * @throws If no active session\n */\n getExtensionState(): Promise<ExtensionState>;\n\n // -----------------------------------------------------------------------------\n // A11y Reference Map\n // -----------------------------------------------------------------------------\n\n /**\n * Set the accessibility reference map (e1 -> selector).\n */\n setRefMap(map: Map<string, string>): void;\n\n /**\n * Get the current accessibility reference map.\n */\n getRefMap(): Map<string, string>;\n\n /**\n * Clear the accessibility reference map.\n */\n clearRefMap(): void;\n\n /**\n * Resolve an a11y ref (e.g., \"e5\") to a selector.\n */\n resolveA11yRef(ref: string): string | undefined;\n\n // -----------------------------------------------------------------------------\n // Navigation\n // -----------------------------------------------------------------------------\n\n /**\n * Navigate to the extension home page.\n */\n navigateToHome(): Promise<void>;\n\n /**\n * Navigate to the extension settings page.\n */\n navigateToSettings(): Promise<void>;\n\n /**\n * Navigate to an external URL (opens new tab).\n */\n navigateToUrl(url: string): Promise<Page>;\n\n /**\n * Navigate to the notification page.\n */\n navigateToNotification(): Promise<Page>;\n\n /**\n * Wait for a notification page to appear.\n */\n waitForNotificationPage(timeoutMs: number): Promise<Page>;\n\n // -----------------------------------------------------------------------------\n // Screenshots\n // -----------------------------------------------------------------------------\n\n /**\n * Take a screenshot of the current page.\n */\n screenshot(options: SessionScreenshotOptions): Promise<ScreenshotResult>;\n\n // -----------------------------------------------------------------------------\n // Capabilities (Optional - Extension-Specific)\n // -----------------------------------------------------------------------------\n\n /**\n * Get the build capability (if available).\n */\n getBuildCapability(): BuildCapability | undefined;\n\n /**\n * Get the fixture capability (if available).\n */\n getFixtureCapability(): FixtureCapability | undefined;\n\n /**\n * Get the chain capability (if available).\n */\n getChainCapability(): ChainCapability | undefined;\n\n /**\n * Get the contract seeding capability (if available).\n */\n getContractSeedingCapability(): ContractSeedingCapability | undefined;\n\n /**\n * Get the state snapshot capability (if available).\n */\n getStateSnapshotCapability(): StateSnapshotCapability | undefined;\n\n // -----------------------------------------------------------------------------\n // Environment Configuration\n // -----------------------------------------------------------------------------\n\n /**\n * Get the current environment mode.\n *\n * @returns 'e2e' for testing environment, 'prod' for production-like environment\n */\n getEnvironmentMode(): EnvironmentMode;\n\n /**\n * Set the current context (e2e or prod).\n *\n * @throws Error with code MM_CONTEXT_SWITCH_BLOCKED if session is active\n */\n setContext(context: 'e2e' | 'prod'): void;\n\n /**\n * Get current context information.\n */\n getContextInfo(): {\n currentContext: 'e2e' | 'prod';\n hasActiveSession: boolean;\n sessionId: string | null;\n capabilities: {\n available: string[];\n };\n canSwitchContext: boolean;\n };\n};\n\n/**\n * Session manager instance holder.\n *\n * In the core package, this is undefined by default.\n * Extension implementations should call setSessionManager() to inject\n * their concrete implementation.\n */\nlet _sessionManager: ISessionManager | undefined;\n\n/**\n * Set the session manager instance.\n *\n * This should be called by extension-specific code during server initialization.\n *\n * @param manager The session manager implementation to inject\n */\nexport function setSessionManager(manager: ISessionManager): void {\n _sessionManager = manager;\n}\n\n/**\n * Get the session manager instance.\n *\n * @throws Error if no session manager has been set\n * @returns The session manager instance\n */\nexport function getSessionManager(): ISessionManager {\n if (!_sessionManager) {\n throw new Error(\n 'Session manager not initialized. Call setSessionManager() first.',\n );\n }\n return _sessionManager;\n}\n\n/**\n * Check if a session manager has been set.\n *\n * @returns True if a session manager is set, false otherwise\n */\nexport function hasSessionManager(): boolean {\n return _sessionManager !== undefined;\n}\n"]}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.flushPromises = flushPromises;
4
+ const scheduler = typeof setImmediate === 'function' ? setImmediate : setTimeout;
5
+ async function flushPromises() {
6
+ return new Promise((resolve) => {
7
+ scheduler(resolve, 0);
8
+ });
9
+ }
10
+ //# sourceMappingURL=flush-promises.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flush-promises.cjs","sourceRoot":"","sources":["../../../src/mcp-server/test-utils/flush-promises.ts"],"names":[],"mappings":";;AAGA,sCAIC;AAPD,MAAM,SAAS,GACb,OAAO,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC;AAE1D,KAAK,UAAU,aAAa;IACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["const scheduler =\n typeof setImmediate === 'function' ? setImmediate : setTimeout;\n\nexport async function flushPromises() {\n return new Promise((resolve) => {\n scheduler(resolve, 0);\n });\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export declare function flushPromises(): Promise<unknown>;
2
+ //# sourceMappingURL=flush-promises.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flush-promises.d.cts","sourceRoot":"","sources":["../../../src/mcp-server/test-utils/flush-promises.ts"],"names":[],"mappings":"AAGA,wBAAsB,aAAa,qBAIlC"}
@@ -0,0 +1,2 @@
1
+ export declare function flushPromises(): Promise<unknown>;
2
+ //# sourceMappingURL=flush-promises.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flush-promises.d.mts","sourceRoot":"","sources":["../../../src/mcp-server/test-utils/flush-promises.ts"],"names":[],"mappings":"AAGA,wBAAsB,aAAa,qBAIlC"}
@@ -0,0 +1,7 @@
1
+ const scheduler = typeof setImmediate === 'function' ? setImmediate : setTimeout;
2
+ export async function flushPromises() {
3
+ return new Promise((resolve) => {
4
+ scheduler(resolve, 0);
5
+ });
6
+ }
7
+ //# sourceMappingURL=flush-promises.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flush-promises.mjs","sourceRoot":"","sources":["../../../src/mcp-server/test-utils/flush-promises.ts"],"names":[],"mappings":"AAAA,MAAM,SAAS,GACb,OAAO,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC;AAEjE,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["const scheduler =\n typeof setImmediate === 'function' ? setImmediate : setTimeout;\n\nexport async function flushPromises() {\n return new Promise((resolve) => {\n scheduler(resolve, 0);\n });\n}\n"]}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.flushPromises = exports.createMockBrowserContext = exports.createMockLocator = exports.createMockPage = exports.createMockKnowledgeStore = exports.createMockSessionManager = void 0;
4
+ var mock_factories_js_1 = require("./mock-factories.cjs");
5
+ Object.defineProperty(exports, "createMockSessionManager", { enumerable: true, get: function () { return mock_factories_js_1.createMockSessionManager; } });
6
+ Object.defineProperty(exports, "createMockKnowledgeStore", { enumerable: true, get: function () { return mock_factories_js_1.createMockKnowledgeStore; } });
7
+ var mock_playwright_js_1 = require("./mock-playwright.cjs");
8
+ Object.defineProperty(exports, "createMockPage", { enumerable: true, get: function () { return mock_playwright_js_1.createMockPage; } });
9
+ Object.defineProperty(exports, "createMockLocator", { enumerable: true, get: function () { return mock_playwright_js_1.createMockLocator; } });
10
+ Object.defineProperty(exports, "createMockBrowserContext", { enumerable: true, get: function () { return mock_playwright_js_1.createMockBrowserContext; } });
11
+ var flush_promises_js_1 = require("./flush-promises.cjs");
12
+ Object.defineProperty(exports, "flushPromises", { enumerable: true, get: function () { return flush_promises_js_1.flushPromises; } });
13
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../../src/mcp-server/test-utils/index.ts"],"names":[],"mappings":";;;AAAA,0DAK6B;AAJ3B,6HAAA,wBAAwB,OAAA;AACxB,6HAAA,wBAAwB,OAAA;AAK1B,4DAO8B;AAN5B,oHAAA,cAAc,OAAA;AACd,uHAAA,iBAAiB,OAAA;AACjB,8HAAA,wBAAwB,OAAA;AAM1B,0DAAoD;AAA3C,kHAAA,aAAa,OAAA","sourcesContent":["export {\n createMockSessionManager,\n createMockKnowledgeStore,\n type MockSessionManagerOptions,\n type MockKnowledgeStoreOptions,\n} from './mock-factories.js';\n\nexport {\n createMockPage,\n createMockLocator,\n createMockBrowserContext,\n type MockPageOptions,\n type MockLocatorOptions,\n type MockBrowserContextOptions,\n} from './mock-playwright.js';\n\nexport { flushPromises } from './flush-promises.js';\n"]}
@@ -0,0 +1,4 @@
1
+ export { createMockSessionManager, createMockKnowledgeStore, type MockSessionManagerOptions, type MockKnowledgeStoreOptions, } from "./mock-factories.cjs";
2
+ export { createMockPage, createMockLocator, createMockBrowserContext, type MockPageOptions, type MockLocatorOptions, type MockBrowserContextOptions, } from "./mock-playwright.cjs";
3
+ export { flushPromises } from "./flush-promises.cjs";
4
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../../src/mcp-server/test-utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,GAC/B,6BAA4B;AAE7B,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,wBAAwB,EACxB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,GAC/B,8BAA6B;AAE9B,OAAO,EAAE,aAAa,EAAE,6BAA4B"}
@@ -0,0 +1,4 @@
1
+ export { createMockSessionManager, createMockKnowledgeStore, type MockSessionManagerOptions, type MockKnowledgeStoreOptions, } from "./mock-factories.mjs";
2
+ export { createMockPage, createMockLocator, createMockBrowserContext, type MockPageOptions, type MockLocatorOptions, type MockBrowserContextOptions, } from "./mock-playwright.mjs";
3
+ export { flushPromises } from "./flush-promises.mjs";
4
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../src/mcp-server/test-utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,GAC/B,6BAA4B;AAE7B,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,wBAAwB,EACxB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,GAC/B,8BAA6B;AAE9B,OAAO,EAAE,aAAa,EAAE,6BAA4B"}
@@ -0,0 +1,4 @@
1
+ export { createMockSessionManager, createMockKnowledgeStore } from "./mock-factories.mjs";
2
+ export { createMockPage, createMockLocator, createMockBrowserContext } from "./mock-playwright.mjs";
3
+ export { flushPromises } from "./flush-promises.mjs";
4
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../../src/mcp-server/test-utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EAGzB,6BAA4B;AAE7B,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,wBAAwB,EAIzB,8BAA6B;AAE9B,OAAO,EAAE,aAAa,EAAE,6BAA4B","sourcesContent":["export {\n createMockSessionManager,\n createMockKnowledgeStore,\n type MockSessionManagerOptions,\n type MockKnowledgeStoreOptions,\n} from './mock-factories.js';\n\nexport {\n createMockPage,\n createMockLocator,\n createMockBrowserContext,\n type MockPageOptions,\n type MockLocatorOptions,\n type MockBrowserContextOptions,\n} from './mock-playwright.js';\n\nexport { flushPromises } from './flush-promises.js';\n"]}
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ /**
3
+ * Shared mock factory utilities for unit testing.
4
+ *
5
+ * Provides factory functions that return fresh mock instances following MetaMask testing guidelines:
6
+ * - Each factory call returns NEW object instances (test isolation)
7
+ * - Each factory creates fresh vi.fn() mocks (never reused)
8
+ * - Factories accept options for customization
9
+ * - Sensible defaults so most tests need no options
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.createMockSessionManager = createMockSessionManager;
13
+ exports.createMockKnowledgeStore = createMockKnowledgeStore;
14
+ const vitest_1 = require("vitest");
15
+ /**
16
+ * Create a fresh mock ISessionManager instance.
17
+ *
18
+ * Each call returns a NEW object with fresh vi.fn() mocks.
19
+ * Follows the pattern from session-manager.test.ts:15-48.
20
+ *
21
+ * @param options - Customize mock behavior
22
+ * @returns Fresh ISessionManager mock
23
+ */
24
+ function createMockSessionManager(options = {}) {
25
+ return {
26
+ // Session Lifecycle
27
+ hasActiveSession: vitest_1.vi.fn().mockReturnValue(options.hasActive ?? false),
28
+ getSessionId: vitest_1.vi.fn().mockReturnValue(options.sessionId ?? undefined),
29
+ getSessionState: vitest_1.vi.fn().mockReturnValue(options.sessionState ?? undefined),
30
+ getSessionMetadata: vitest_1.vi
31
+ .fn()
32
+ .mockReturnValue(options.sessionMetadata ?? undefined),
33
+ launch: vitest_1.vi.fn().mockResolvedValue(options.launchResult ?? {
34
+ sessionId: 'test-session-123',
35
+ extensionId: 'ext-123',
36
+ state: {
37
+ isLoaded: true,
38
+ currentUrl: 'chrome-extension://ext-123/home.html',
39
+ extensionId: 'ext-123',
40
+ isUnlocked: false,
41
+ currentScreen: 'home',
42
+ accountAddress: null,
43
+ networkName: null,
44
+ chainId: null,
45
+ balance: null,
46
+ },
47
+ }),
48
+ cleanup: vitest_1.vi.fn().mockResolvedValue(true),
49
+ // Page Management
50
+ getPage: vitest_1.vi.fn(),
51
+ setActivePage: vitest_1.vi.fn(),
52
+ getTrackedPages: vitest_1.vi.fn().mockReturnValue(options.trackedPages ?? []),
53
+ classifyPageRole: vitest_1.vi.fn().mockReturnValue('extension'),
54
+ getContext: vitest_1.vi.fn(),
55
+ // Extension State
56
+ getExtensionState: vitest_1.vi.fn().mockResolvedValue(options.extensionState ?? {
57
+ isLoaded: true,
58
+ currentUrl: 'chrome-extension://ext-123/home.html',
59
+ extensionId: 'ext-123',
60
+ isUnlocked: false,
61
+ currentScreen: 'home',
62
+ accountAddress: null,
63
+ networkName: null,
64
+ chainId: null,
65
+ balance: null,
66
+ }),
67
+ // A11y Reference Map
68
+ setRefMap: vitest_1.vi.fn(),
69
+ getRefMap: vitest_1.vi.fn().mockReturnValue(options.refMap ?? new Map()),
70
+ clearRefMap: vitest_1.vi.fn(),
71
+ resolveA11yRef: vitest_1.vi.fn(),
72
+ // Navigation
73
+ navigateToHome: vitest_1.vi.fn().mockResolvedValue(undefined),
74
+ navigateToSettings: vitest_1.vi.fn().mockResolvedValue(undefined),
75
+ navigateToUrl: vitest_1.vi.fn(),
76
+ navigateToNotification: vitest_1.vi.fn(),
77
+ waitForNotificationPage: vitest_1.vi.fn(),
78
+ // Screenshots
79
+ screenshot: vitest_1.vi.fn().mockResolvedValue({
80
+ path: '/path/to/screenshot.png',
81
+ width: 1280,
82
+ height: 720,
83
+ }),
84
+ // Capabilities
85
+ getBuildCapability: vitest_1.vi.fn().mockReturnValue(undefined),
86
+ getFixtureCapability: vitest_1.vi.fn().mockReturnValue(undefined),
87
+ getChainCapability: vitest_1.vi.fn().mockReturnValue(undefined),
88
+ getContractSeedingCapability: vitest_1.vi.fn().mockReturnValue(undefined),
89
+ getStateSnapshotCapability: vitest_1.vi.fn().mockReturnValue(undefined),
90
+ // Environment
91
+ getEnvironmentMode: vitest_1.vi
92
+ .fn()
93
+ .mockReturnValue(options.environmentMode ?? 'e2e'),
94
+ // Context
95
+ setContext: vitest_1.vi.fn().mockReturnValue(undefined),
96
+ getContextInfo: vitest_1.vi.fn().mockReturnValue({
97
+ currentContext: options.environmentMode ?? 'e2e',
98
+ hasActiveSession: options.hasActive ?? false,
99
+ sessionId: options.sessionId ?? null,
100
+ capabilities: { available: [] },
101
+ canSwitchContext: !(options.hasActive ?? false),
102
+ }),
103
+ };
104
+ }
105
+ /**
106
+ * Create a fresh mock KnowledgeStore instance.
107
+ *
108
+ * Returns an in-memory mock with sensible defaults.
109
+ * Each call creates fresh vi.fn() mocks.
110
+ *
111
+ * @param options - Customize mock behavior
112
+ * @returns Fresh KnowledgeStore mock
113
+ */
114
+ function createMockKnowledgeStore(options = {}) {
115
+ return {
116
+ recordStep: vitest_1.vi.fn().mockResolvedValue(undefined),
117
+ getLastSteps: vitest_1.vi.fn().mockResolvedValue(options.lastSteps ?? []),
118
+ searchSteps: vitest_1.vi.fn().mockResolvedValue(options.searchResults ?? []),
119
+ summarizeSession: vitest_1.vi.fn().mockResolvedValue(options.sessionSummary ?? {
120
+ sessionId: 'test-session-123',
121
+ stepCount: 0,
122
+ recipe: [],
123
+ }),
124
+ listSessions: vitest_1.vi.fn().mockResolvedValue(options.sessions ?? []),
125
+ generatePriorKnowledge: vitest_1.vi.fn().mockResolvedValue(undefined),
126
+ writeSessionMetadata: vitest_1.vi.fn().mockResolvedValue('test-session-123'),
127
+ };
128
+ }
129
+ //# sourceMappingURL=mock-factories.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-factories.cjs","sourceRoot":"","sources":["../../../src/mcp-server/test-utils/mock-factories.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shared mock factory utilities for unit testing.\n *\n * Provides factory functions that return fresh mock instances following MetaMask testing guidelines:\n * - Each factory call returns NEW object instances (test isolation)\n * - Each factory creates fresh vi.fn() mocks (never reused)\n * - Factories accept options for customization\n * - Sensible defaults so most tests need no options\n */\n\nimport { vi } from 'vitest';\n\nimport type { ExtensionState } from '../../capabilities/types.js';\nimport type { KnowledgeStore } from '../knowledge-store.js';\nimport type { TrackedPage, SessionLaunchResult } from '../session-manager.js';\nimport type { SessionState } from '../types/session.js';\nimport type { SessionMetadata } from '../types/step-record.js';\n\n/**\n * Options for customizing mock session manager behavior\n */\nexport type MockSessionManagerOptions = {\n hasActive?: boolean;\n sessionId?: string;\n sessionState?: SessionState;\n sessionMetadata?: SessionMetadata;\n launchResult?: SessionLaunchResult;\n trackedPages?: TrackedPage[];\n extensionState?: ExtensionState;\n refMap?: Map<string, string>;\n environmentMode?: 'e2e' | 'prod';\n};\n\n/**\n * Options for customizing mock knowledge store behavior\n */\nexport type MockKnowledgeStoreOptions = {\n lastSteps?: Record<string, unknown>[];\n searchResults?: Record<string, unknown>[];\n sessionSummary?: Record<string, unknown>;\n sessions?: Record<string, unknown>[];\n};\n\n/**\n * Create a fresh mock ISessionManager instance.\n *\n * Each call returns a NEW object with fresh vi.fn() mocks.\n * Follows the pattern from session-manager.test.ts:15-48.\n *\n * @param options - Customize mock behavior\n * @returns Fresh ISessionManager mock\n */\nexport function createMockSessionManager(\n options: MockSessionManagerOptions = {},\n) {\n return {\n // Session Lifecycle\n hasActiveSession: vi.fn().mockReturnValue(options.hasActive ?? false),\n getSessionId: vi.fn().mockReturnValue(options.sessionId ?? undefined),\n getSessionState: vi.fn().mockReturnValue(options.sessionState ?? undefined),\n getSessionMetadata: vi\n .fn()\n .mockReturnValue(options.sessionMetadata ?? undefined),\n launch: vi.fn().mockResolvedValue(\n options.launchResult ?? {\n sessionId: 'test-session-123',\n extensionId: 'ext-123',\n state: {\n isLoaded: true,\n currentUrl: 'chrome-extension://ext-123/home.html',\n extensionId: 'ext-123',\n isUnlocked: false,\n currentScreen: 'home',\n accountAddress: null,\n networkName: null,\n chainId: null,\n balance: null,\n },\n },\n ),\n cleanup: vi.fn().mockResolvedValue(true),\n\n // Page Management\n getPage: vi.fn(),\n setActivePage: vi.fn(),\n getTrackedPages: vi.fn().mockReturnValue(options.trackedPages ?? []),\n classifyPageRole: vi.fn().mockReturnValue('extension'),\n getContext: vi.fn(),\n\n // Extension State\n getExtensionState: vi.fn().mockResolvedValue(\n options.extensionState ?? {\n isLoaded: true,\n currentUrl: 'chrome-extension://ext-123/home.html',\n extensionId: 'ext-123',\n isUnlocked: false,\n currentScreen: 'home',\n accountAddress: null,\n networkName: null,\n chainId: null,\n balance: null,\n },\n ),\n\n // A11y Reference Map\n setRefMap: vi.fn(),\n getRefMap: vi.fn().mockReturnValue(options.refMap ?? new Map()),\n clearRefMap: vi.fn(),\n resolveA11yRef: vi.fn(),\n\n // Navigation\n navigateToHome: vi.fn().mockResolvedValue(undefined),\n navigateToSettings: vi.fn().mockResolvedValue(undefined),\n navigateToUrl: vi.fn(),\n navigateToNotification: vi.fn(),\n waitForNotificationPage: vi.fn(),\n\n // Screenshots\n screenshot: vi.fn().mockResolvedValue({\n path: '/path/to/screenshot.png',\n width: 1280,\n height: 720,\n }),\n\n // Capabilities\n getBuildCapability: vi.fn().mockReturnValue(undefined),\n getFixtureCapability: vi.fn().mockReturnValue(undefined),\n getChainCapability: vi.fn().mockReturnValue(undefined),\n getContractSeedingCapability: vi.fn().mockReturnValue(undefined),\n getStateSnapshotCapability: vi.fn().mockReturnValue(undefined),\n\n // Environment\n getEnvironmentMode: vi\n .fn()\n .mockReturnValue(options.environmentMode ?? 'e2e'),\n\n // Context\n setContext: vi.fn().mockReturnValue(undefined),\n getContextInfo: vi.fn().mockReturnValue({\n currentContext: options.environmentMode ?? 'e2e',\n hasActiveSession: options.hasActive ?? false,\n sessionId: options.sessionId ?? null,\n capabilities: { available: [] },\n canSwitchContext: !(options.hasActive ?? false),\n }),\n };\n}\n\n/**\n * Create a fresh mock KnowledgeStore instance.\n *\n * Returns an in-memory mock with sensible defaults.\n * Each call creates fresh vi.fn() mocks.\n *\n * @param options - Customize mock behavior\n * @returns Fresh KnowledgeStore mock\n */\nexport function createMockKnowledgeStore(\n options: MockKnowledgeStoreOptions = {},\n): Partial<KnowledgeStore> {\n return {\n recordStep: vi.fn().mockResolvedValue(undefined),\n getLastSteps: vi.fn().mockResolvedValue(options.lastSteps ?? []),\n searchSteps: vi.fn().mockResolvedValue(options.searchResults ?? []),\n summarizeSession: vi.fn().mockResolvedValue(\n options.sessionSummary ?? {\n sessionId: 'test-session-123',\n stepCount: 0,\n recipe: [],\n },\n ),\n listSessions: vi.fn().mockResolvedValue(options.sessions ?? []),\n generatePriorKnowledge: vi.fn().mockResolvedValue(undefined),\n writeSessionMetadata: vi.fn().mockResolvedValue('test-session-123'),\n };\n}\n"]}