@metamask/client-mcp-core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (486) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/LICENSE +6 -0
  3. package/LICENSE.APACHE2 +201 -0
  4. package/LICENSE.MIT +21 -0
  5. package/README.md +1459 -0
  6. package/dist/capabilities/context.cjs +34 -0
  7. package/dist/capabilities/context.cjs.map +1 -0
  8. package/dist/capabilities/context.d.cts +101 -0
  9. package/dist/capabilities/context.d.cts.map +1 -0
  10. package/dist/capabilities/context.d.mts +101 -0
  11. package/dist/capabilities/context.d.mts.map +1 -0
  12. package/dist/capabilities/context.mjs +29 -0
  13. package/dist/capabilities/context.mjs.map +1 -0
  14. package/dist/capabilities/index.cjs +18 -0
  15. package/dist/capabilities/index.cjs.map +1 -0
  16. package/dist/capabilities/index.d.cts +3 -0
  17. package/dist/capabilities/index.d.cts.map +1 -0
  18. package/dist/capabilities/index.d.mts +3 -0
  19. package/dist/capabilities/index.d.mts.map +1 -0
  20. package/dist/capabilities/index.mjs +2 -0
  21. package/dist/capabilities/index.mjs.map +1 -0
  22. package/dist/capabilities/types.cjs +3 -0
  23. package/dist/capabilities/types.cjs.map +1 -0
  24. package/dist/capabilities/types.d.cts +152 -0
  25. package/dist/capabilities/types.d.cts.map +1 -0
  26. package/dist/capabilities/types.d.mts +152 -0
  27. package/dist/capabilities/types.d.mts.map +1 -0
  28. package/dist/capabilities/types.mjs +2 -0
  29. package/dist/capabilities/types.mjs.map +1 -0
  30. package/dist/index.cjs +59 -0
  31. package/dist/index.cjs.map +1 -0
  32. package/dist/index.d.cts +33 -0
  33. package/dist/index.d.cts.map +1 -0
  34. package/dist/index.d.mts +33 -0
  35. package/dist/index.d.mts.map +1 -0
  36. package/dist/index.mjs +43 -0
  37. package/dist/index.mjs.map +1 -0
  38. package/dist/launcher/console-error-buffer.cjs +72 -0
  39. package/dist/launcher/console-error-buffer.cjs.map +1 -0
  40. package/dist/launcher/console-error-buffer.d.cts +43 -0
  41. package/dist/launcher/console-error-buffer.d.cts.map +1 -0
  42. package/dist/launcher/console-error-buffer.d.mts +43 -0
  43. package/dist/launcher/console-error-buffer.d.mts.map +1 -0
  44. package/dist/launcher/console-error-buffer.mjs +68 -0
  45. package/dist/launcher/console-error-buffer.mjs.map +1 -0
  46. package/dist/launcher/extension-id-resolver.cjs +177 -0
  47. package/dist/launcher/extension-id-resolver.cjs.map +1 -0
  48. package/dist/launcher/extension-id-resolver.d.cts +32 -0
  49. package/dist/launcher/extension-id-resolver.d.cts.map +1 -0
  50. package/dist/launcher/extension-id-resolver.d.mts +32 -0
  51. package/dist/launcher/extension-id-resolver.d.mts.map +1 -0
  52. package/dist/launcher/extension-id-resolver.mjs +173 -0
  53. package/dist/launcher/extension-id-resolver.mjs.map +1 -0
  54. package/dist/launcher/extension-readiness.cjs +50 -0
  55. package/dist/launcher/extension-readiness.cjs.map +1 -0
  56. package/dist/launcher/extension-readiness.d.cts +37 -0
  57. package/dist/launcher/extension-readiness.d.cts.map +1 -0
  58. package/dist/launcher/extension-readiness.d.mts +37 -0
  59. package/dist/launcher/extension-readiness.d.mts.map +1 -0
  60. package/dist/launcher/extension-readiness.mjs +43 -0
  61. package/dist/launcher/extension-readiness.mjs.map +1 -0
  62. package/dist/launcher/index.cjs +21 -0
  63. package/dist/launcher/index.cjs.map +1 -0
  64. package/dist/launcher/index.d.cts +5 -0
  65. package/dist/launcher/index.d.cts.map +1 -0
  66. package/dist/launcher/index.d.mts +5 -0
  67. package/dist/launcher/index.d.mts.map +1 -0
  68. package/dist/launcher/index.mjs +5 -0
  69. package/dist/launcher/index.mjs.map +1 -0
  70. package/dist/launcher/retry.cjs +35 -0
  71. package/dist/launcher/retry.cjs.map +1 -0
  72. package/dist/launcher/retry.d.cts +20 -0
  73. package/dist/launcher/retry.d.cts.map +1 -0
  74. package/dist/launcher/retry.d.mts +20 -0
  75. package/dist/launcher/retry.d.mts.map +1 -0
  76. package/dist/launcher/retry.mjs +31 -0
  77. package/dist/launcher/retry.mjs.map +1 -0
  78. package/dist/mcp-server/constants.cjs +22 -0
  79. package/dist/mcp-server/constants.cjs.map +1 -0
  80. package/dist/mcp-server/constants.d.cts +13 -0
  81. package/dist/mcp-server/constants.d.cts.map +1 -0
  82. package/dist/mcp-server/constants.d.mts +13 -0
  83. package/dist/mcp-server/constants.d.mts.map +1 -0
  84. package/dist/mcp-server/constants.mjs +19 -0
  85. package/dist/mcp-server/constants.mjs.map +1 -0
  86. package/dist/mcp-server/discovery.cjs +299 -0
  87. package/dist/mcp-server/discovery.cjs.map +1 -0
  88. package/dist/mcp-server/discovery.d.cts +56 -0
  89. package/dist/mcp-server/discovery.d.cts.map +1 -0
  90. package/dist/mcp-server/discovery.d.mts +56 -0
  91. package/dist/mcp-server/discovery.d.mts.map +1 -0
  92. package/dist/mcp-server/discovery.mjs +292 -0
  93. package/dist/mcp-server/discovery.mjs.map +1 -0
  94. package/dist/mcp-server/knowledge-store.cjs +1196 -0
  95. package/dist/mcp-server/knowledge-store.cjs.map +1 -0
  96. package/dist/mcp-server/knowledge-store.d.cts +249 -0
  97. package/dist/mcp-server/knowledge-store.d.cts.map +1 -0
  98. package/dist/mcp-server/knowledge-store.d.mts +249 -0
  99. package/dist/mcp-server/knowledge-store.d.mts.map +1 -0
  100. package/dist/mcp-server/knowledge-store.mjs +1154 -0
  101. package/dist/mcp-server/knowledge-store.mjs.map +1 -0
  102. package/dist/mcp-server/schemas.cjs +433 -0
  103. package/dist/mcp-server/schemas.cjs.map +1 -0
  104. package/dist/mcp-server/schemas.d.cts +557 -0
  105. package/dist/mcp-server/schemas.d.cts.map +1 -0
  106. package/dist/mcp-server/schemas.d.mts +557 -0
  107. package/dist/mcp-server/schemas.d.mts.map +1 -0
  108. package/dist/mcp-server/schemas.mjs +430 -0
  109. package/dist/mcp-server/schemas.mjs.map +1 -0
  110. package/dist/mcp-server/server.cjs +161 -0
  111. package/dist/mcp-server/server.cjs.map +1 -0
  112. package/dist/mcp-server/server.d.cts +24 -0
  113. package/dist/mcp-server/server.d.cts.map +1 -0
  114. package/dist/mcp-server/server.d.mts +24 -0
  115. package/dist/mcp-server/server.d.mts.map +1 -0
  116. package/dist/mcp-server/server.mjs +158 -0
  117. package/dist/mcp-server/server.mjs.map +1 -0
  118. package/dist/mcp-server/session-manager.cjs +53 -0
  119. package/dist/mcp-server/session-manager.cjs.map +1 -0
  120. package/dist/mcp-server/session-manager.d.cts +240 -0
  121. package/dist/mcp-server/session-manager.d.cts.map +1 -0
  122. package/dist/mcp-server/session-manager.d.mts +240 -0
  123. package/dist/mcp-server/session-manager.d.mts.map +1 -0
  124. package/dist/mcp-server/session-manager.mjs +48 -0
  125. package/dist/mcp-server/session-manager.mjs.map +1 -0
  126. package/dist/mcp-server/test-utils/flush-promises.cjs +10 -0
  127. package/dist/mcp-server/test-utils/flush-promises.cjs.map +1 -0
  128. package/dist/mcp-server/test-utils/flush-promises.d.cts +2 -0
  129. package/dist/mcp-server/test-utils/flush-promises.d.cts.map +1 -0
  130. package/dist/mcp-server/test-utils/flush-promises.d.mts +2 -0
  131. package/dist/mcp-server/test-utils/flush-promises.d.mts.map +1 -0
  132. package/dist/mcp-server/test-utils/flush-promises.mjs +7 -0
  133. package/dist/mcp-server/test-utils/flush-promises.mjs.map +1 -0
  134. package/dist/mcp-server/test-utils/index.cjs +13 -0
  135. package/dist/mcp-server/test-utils/index.cjs.map +1 -0
  136. package/dist/mcp-server/test-utils/index.d.cts +4 -0
  137. package/dist/mcp-server/test-utils/index.d.cts.map +1 -0
  138. package/dist/mcp-server/test-utils/index.d.mts +4 -0
  139. package/dist/mcp-server/test-utils/index.d.mts.map +1 -0
  140. package/dist/mcp-server/test-utils/index.mjs +4 -0
  141. package/dist/mcp-server/test-utils/index.mjs.map +1 -0
  142. package/dist/mcp-server/test-utils/mock-factories.cjs +129 -0
  143. package/dist/mcp-server/test-utils/mock-factories.cjs.map +1 -0
  144. package/dist/mcp-server/test-utils/mock-factories.d.cts +89 -0
  145. package/dist/mcp-server/test-utils/mock-factories.d.cts.map +1 -0
  146. package/dist/mcp-server/test-utils/mock-factories.d.mts +89 -0
  147. package/dist/mcp-server/test-utils/mock-factories.d.mts.map +1 -0
  148. package/dist/mcp-server/test-utils/mock-factories.mjs +125 -0
  149. package/dist/mcp-server/test-utils/mock-factories.mjs.map +1 -0
  150. package/dist/mcp-server/test-utils/mock-playwright.cjs +205 -0
  151. package/dist/mcp-server/test-utils/mock-playwright.cjs.map +1 -0
  152. package/dist/mcp-server/test-utils/mock-playwright.d.cts +69 -0
  153. package/dist/mcp-server/test-utils/mock-playwright.d.cts.map +1 -0
  154. package/dist/mcp-server/test-utils/mock-playwright.d.mts +69 -0
  155. package/dist/mcp-server/test-utils/mock-playwright.d.mts.map +1 -0
  156. package/dist/mcp-server/test-utils/mock-playwright.mjs +200 -0
  157. package/dist/mcp-server/test-utils/mock-playwright.mjs.map +1 -0
  158. package/dist/mcp-server/tokenization.cjs +117 -0
  159. package/dist/mcp-server/tokenization.cjs.map +1 -0
  160. package/dist/mcp-server/tokenization.d.cts +22 -0
  161. package/dist/mcp-server/tokenization.d.cts.map +1 -0
  162. package/dist/mcp-server/tokenization.d.mts +22 -0
  163. package/dist/mcp-server/tokenization.d.mts.map +1 -0
  164. package/dist/mcp-server/tokenization.mjs +112 -0
  165. package/dist/mcp-server/tokenization.mjs.map +1 -0
  166. package/dist/mcp-server/tools/batch.cjs +199 -0
  167. package/dist/mcp-server/tools/batch.cjs.map +1 -0
  168. package/dist/mcp-server/tools/batch.d.cts +81 -0
  169. package/dist/mcp-server/tools/batch.d.cts.map +1 -0
  170. package/dist/mcp-server/tools/batch.d.mts +81 -0
  171. package/dist/mcp-server/tools/batch.d.mts.map +1 -0
  172. package/dist/mcp-server/tools/batch.mjs +191 -0
  173. package/dist/mcp-server/tools/batch.mjs.map +1 -0
  174. package/dist/mcp-server/tools/build.cjs +47 -0
  175. package/dist/mcp-server/tools/build.cjs.map +1 -0
  176. package/dist/mcp-server/tools/build.d.cts +22 -0
  177. package/dist/mcp-server/tools/build.d.cts.map +1 -0
  178. package/dist/mcp-server/tools/build.d.mts +22 -0
  179. package/dist/mcp-server/tools/build.d.mts.map +1 -0
  180. package/dist/mcp-server/tools/build.mjs +44 -0
  181. package/dist/mcp-server/tools/build.mjs.map +1 -0
  182. package/dist/mcp-server/tools/cleanup.cjs +20 -0
  183. package/dist/mcp-server/tools/cleanup.cjs.map +1 -0
  184. package/dist/mcp-server/tools/cleanup.d.cts +10 -0
  185. package/dist/mcp-server/tools/cleanup.d.cts.map +1 -0
  186. package/dist/mcp-server/tools/cleanup.d.mts +10 -0
  187. package/dist/mcp-server/tools/cleanup.d.mts.map +1 -0
  188. package/dist/mcp-server/tools/cleanup.mjs +17 -0
  189. package/dist/mcp-server/tools/cleanup.mjs.map +1 -0
  190. package/dist/mcp-server/tools/clipboard.cjs +100 -0
  191. package/dist/mcp-server/tools/clipboard.cjs.map +1 -0
  192. package/dist/mcp-server/tools/clipboard.d.cts +16 -0
  193. package/dist/mcp-server/tools/clipboard.d.cts.map +1 -0
  194. package/dist/mcp-server/tools/clipboard.d.mts +16 -0
  195. package/dist/mcp-server/tools/clipboard.d.mts.map +1 -0
  196. package/dist/mcp-server/tools/clipboard.mjs +97 -0
  197. package/dist/mcp-server/tools/clipboard.mjs.map +1 -0
  198. package/dist/mcp-server/tools/context.cjs +66 -0
  199. package/dist/mcp-server/tools/context.cjs.map +1 -0
  200. package/dist/mcp-server/tools/context.d.cts +35 -0
  201. package/dist/mcp-server/tools/context.d.cts.map +1 -0
  202. package/dist/mcp-server/tools/context.d.mts +35 -0
  203. package/dist/mcp-server/tools/context.d.mts.map +1 -0
  204. package/dist/mcp-server/tools/context.mjs +62 -0
  205. package/dist/mcp-server/tools/context.mjs.map +1 -0
  206. package/dist/mcp-server/tools/definitions.cjs +463 -0
  207. package/dist/mcp-server/tools/definitions.cjs.map +1 -0
  208. package/dist/mcp-server/tools/definitions.d.cts +97 -0
  209. package/dist/mcp-server/tools/definitions.d.cts.map +1 -0
  210. package/dist/mcp-server/tools/definitions.d.mts +97 -0
  211. package/dist/mcp-server/tools/definitions.d.mts.map +1 -0
  212. package/dist/mcp-server/tools/definitions.mjs +451 -0
  213. package/dist/mcp-server/tools/definitions.mjs.map +1 -0
  214. package/dist/mcp-server/tools/discovery-tools.cjs +162 -0
  215. package/dist/mcp-server/tools/discovery-tools.cjs.map +1 -0
  216. package/dist/mcp-server/tools/discovery-tools.d.cts +26 -0
  217. package/dist/mcp-server/tools/discovery-tools.d.cts.map +1 -0
  218. package/dist/mcp-server/tools/discovery-tools.d.mts +26 -0
  219. package/dist/mcp-server/tools/discovery-tools.d.mts.map +1 -0
  220. package/dist/mcp-server/tools/discovery-tools.mjs +157 -0
  221. package/dist/mcp-server/tools/discovery-tools.mjs.map +1 -0
  222. package/dist/mcp-server/tools/error-classification.cjs +296 -0
  223. package/dist/mcp-server/tools/error-classification.cjs.map +1 -0
  224. package/dist/mcp-server/tools/error-classification.d.cts +135 -0
  225. package/dist/mcp-server/tools/error-classification.d.cts.map +1 -0
  226. package/dist/mcp-server/tools/error-classification.d.mts +135 -0
  227. package/dist/mcp-server/tools/error-classification.d.mts.map +1 -0
  228. package/dist/mcp-server/tools/error-classification.mjs +281 -0
  229. package/dist/mcp-server/tools/error-classification.mjs.map +1 -0
  230. package/dist/mcp-server/tools/helpers.cjs +149 -0
  231. package/dist/mcp-server/tools/helpers.cjs.map +1 -0
  232. package/dist/mcp-server/tools/helpers.d.cts +149 -0
  233. package/dist/mcp-server/tools/helpers.d.cts.map +1 -0
  234. package/dist/mcp-server/tools/helpers.d.mts +149 -0
  235. package/dist/mcp-server/tools/helpers.d.mts.map +1 -0
  236. package/dist/mcp-server/tools/helpers.mjs +141 -0
  237. package/dist/mcp-server/tools/helpers.mjs.map +1 -0
  238. package/dist/mcp-server/tools/index.cjs +27 -0
  239. package/dist/mcp-server/tools/index.cjs.map +1 -0
  240. package/dist/mcp-server/tools/index.d.cts +11 -0
  241. package/dist/mcp-server/tools/index.d.cts.map +1 -0
  242. package/dist/mcp-server/tools/index.d.mts +11 -0
  243. package/dist/mcp-server/tools/index.d.mts.map +1 -0
  244. package/dist/mcp-server/tools/index.mjs +11 -0
  245. package/dist/mcp-server/tools/index.mjs.map +1 -0
  246. package/dist/mcp-server/tools/interaction.cjs +190 -0
  247. package/dist/mcp-server/tools/interaction.cjs.map +1 -0
  248. package/dist/mcp-server/tools/interaction.d.cts +26 -0
  249. package/dist/mcp-server/tools/interaction.d.cts.map +1 -0
  250. package/dist/mcp-server/tools/interaction.d.mts +26 -0
  251. package/dist/mcp-server/tools/interaction.d.mts.map +1 -0
  252. package/dist/mcp-server/tools/interaction.mjs +185 -0
  253. package/dist/mcp-server/tools/interaction.mjs.map +1 -0
  254. package/dist/mcp-server/tools/knowledge.cjs +120 -0
  255. package/dist/mcp-server/tools/knowledge.cjs.map +1 -0
  256. package/dist/mcp-server/tools/knowledge.d.cts +34 -0
  257. package/dist/mcp-server/tools/knowledge.d.cts.map +1 -0
  258. package/dist/mcp-server/tools/knowledge.d.mts +34 -0
  259. package/dist/mcp-server/tools/knowledge.d.mts.map +1 -0
  260. package/dist/mcp-server/tools/knowledge.mjs +114 -0
  261. package/dist/mcp-server/tools/knowledge.mjs.map +1 -0
  262. package/dist/mcp-server/tools/launch.cjs +51 -0
  263. package/dist/mcp-server/tools/launch.cjs.map +1 -0
  264. package/dist/mcp-server/tools/launch.d.cts +10 -0
  265. package/dist/mcp-server/tools/launch.d.cts.map +1 -0
  266. package/dist/mcp-server/tools/launch.d.mts +10 -0
  267. package/dist/mcp-server/tools/launch.d.mts.map +1 -0
  268. package/dist/mcp-server/tools/launch.mjs +48 -0
  269. package/dist/mcp-server/tools/launch.mjs.map +1 -0
  270. package/dist/mcp-server/tools/navigation.cjs +242 -0
  271. package/dist/mcp-server/tools/navigation.cjs.map +1 -0
  272. package/dist/mcp-server/tools/navigation.d.cts +34 -0
  273. package/dist/mcp-server/tools/navigation.d.cts.map +1 -0
  274. package/dist/mcp-server/tools/navigation.d.mts +34 -0
  275. package/dist/mcp-server/tools/navigation.d.mts.map +1 -0
  276. package/dist/mcp-server/tools/navigation.mjs +236 -0
  277. package/dist/mcp-server/tools/navigation.mjs.map +1 -0
  278. package/dist/mcp-server/tools/registry.cjs +10 -0
  279. package/dist/mcp-server/tools/registry.cjs.map +1 -0
  280. package/dist/mcp-server/tools/registry.d.cts +4 -0
  281. package/dist/mcp-server/tools/registry.d.cts.map +1 -0
  282. package/dist/mcp-server/tools/registry.d.mts +4 -0
  283. package/dist/mcp-server/tools/registry.d.mts.map +1 -0
  284. package/dist/mcp-server/tools/registry.mjs +4 -0
  285. package/dist/mcp-server/tools/registry.mjs.map +1 -0
  286. package/dist/mcp-server/tools/run-tool.cjs +140 -0
  287. package/dist/mcp-server/tools/run-tool.cjs.map +1 -0
  288. package/dist/mcp-server/tools/run-tool.d.cts +39 -0
  289. package/dist/mcp-server/tools/run-tool.d.cts.map +1 -0
  290. package/dist/mcp-server/tools/run-tool.d.mts +39 -0
  291. package/dist/mcp-server/tools/run-tool.d.mts.map +1 -0
  292. package/dist/mcp-server/tools/run-tool.mjs +137 -0
  293. package/dist/mcp-server/tools/run-tool.mjs.map +1 -0
  294. package/dist/mcp-server/tools/screenshot.cjs +55 -0
  295. package/dist/mcp-server/tools/screenshot.cjs.map +1 -0
  296. package/dist/mcp-server/tools/screenshot.d.cts +10 -0
  297. package/dist/mcp-server/tools/screenshot.d.cts.map +1 -0
  298. package/dist/mcp-server/tools/screenshot.d.mts +10 -0
  299. package/dist/mcp-server/tools/screenshot.d.mts.map +1 -0
  300. package/dist/mcp-server/tools/screenshot.mjs +52 -0
  301. package/dist/mcp-server/tools/screenshot.mjs.map +1 -0
  302. package/dist/mcp-server/tools/seeding.cjs +214 -0
  303. package/dist/mcp-server/tools/seeding.cjs.map +1 -0
  304. package/dist/mcp-server/tools/seeding.d.cts +38 -0
  305. package/dist/mcp-server/tools/seeding.d.cts.map +1 -0
  306. package/dist/mcp-server/tools/seeding.d.mts +38 -0
  307. package/dist/mcp-server/tools/seeding.d.mts.map +1 -0
  308. package/dist/mcp-server/tools/seeding.mjs +208 -0
  309. package/dist/mcp-server/tools/seeding.mjs.map +1 -0
  310. package/dist/mcp-server/tools/state.cjs +69 -0
  311. package/dist/mcp-server/tools/state.cjs.map +1 -0
  312. package/dist/mcp-server/tools/state.d.cts +19 -0
  313. package/dist/mcp-server/tools/state.d.cts.map +1 -0
  314. package/dist/mcp-server/tools/state.d.mts +19 -0
  315. package/dist/mcp-server/tools/state.d.mts.map +1 -0
  316. package/dist/mcp-server/tools/state.mjs +66 -0
  317. package/dist/mcp-server/tools/state.mjs.map +1 -0
  318. package/dist/mcp-server/types/discovery.cjs +24 -0
  319. package/dist/mcp-server/types/discovery.cjs.map +1 -0
  320. package/dist/mcp-server/types/discovery.d.cts +30 -0
  321. package/dist/mcp-server/types/discovery.d.cts.map +1 -0
  322. package/dist/mcp-server/types/discovery.d.mts +30 -0
  323. package/dist/mcp-server/types/discovery.d.mts.map +1 -0
  324. package/dist/mcp-server/types/discovery.mjs +21 -0
  325. package/dist/mcp-server/types/discovery.mjs.map +1 -0
  326. package/dist/mcp-server/types/errors.cjs +33 -0
  327. package/dist/mcp-server/types/errors.cjs.map +1 -0
  328. package/dist/mcp-server/types/errors.d.cts +31 -0
  329. package/dist/mcp-server/types/errors.d.cts.map +1 -0
  330. package/dist/mcp-server/types/errors.d.mts +31 -0
  331. package/dist/mcp-server/types/errors.d.mts.map +1 -0
  332. package/dist/mcp-server/types/errors.mjs +30 -0
  333. package/dist/mcp-server/types/errors.mjs.map +1 -0
  334. package/dist/mcp-server/types/index.cjs +21 -0
  335. package/dist/mcp-server/types/index.cjs.map +1 -0
  336. package/dist/mcp-server/types/index.d.cts +10 -0
  337. package/dist/mcp-server/types/index.d.cts.map +1 -0
  338. package/dist/mcp-server/types/index.d.mts +10 -0
  339. package/dist/mcp-server/types/index.d.mts.map +1 -0
  340. package/dist/mcp-server/types/index.mjs +5 -0
  341. package/dist/mcp-server/types/index.mjs.map +1 -0
  342. package/dist/mcp-server/types/knowledge.cjs +3 -0
  343. package/dist/mcp-server/types/knowledge.cjs.map +1 -0
  344. package/dist/mcp-server/types/knowledge.d.cts +116 -0
  345. package/dist/mcp-server/types/knowledge.d.cts.map +1 -0
  346. package/dist/mcp-server/types/knowledge.d.mts +116 -0
  347. package/dist/mcp-server/types/knowledge.d.mts.map +1 -0
  348. package/dist/mcp-server/types/knowledge.mjs +2 -0
  349. package/dist/mcp-server/types/knowledge.mjs.map +1 -0
  350. package/dist/mcp-server/types/responses.cjs +3 -0
  351. package/dist/mcp-server/types/responses.cjs.map +1 -0
  352. package/dist/mcp-server/types/responses.d.cts +22 -0
  353. package/dist/mcp-server/types/responses.d.cts.map +1 -0
  354. package/dist/mcp-server/types/responses.d.mts +22 -0
  355. package/dist/mcp-server/types/responses.d.mts.map +1 -0
  356. package/dist/mcp-server/types/responses.mjs +2 -0
  357. package/dist/mcp-server/types/responses.mjs.map +1 -0
  358. package/dist/mcp-server/types/seeding.cjs +34 -0
  359. package/dist/mcp-server/types/seeding.cjs.map +1 -0
  360. package/dist/mcp-server/types/seeding.d.cts +40 -0
  361. package/dist/mcp-server/types/seeding.d.cts.map +1 -0
  362. package/dist/mcp-server/types/seeding.d.mts +40 -0
  363. package/dist/mcp-server/types/seeding.d.mts.map +1 -0
  364. package/dist/mcp-server/types/seeding.mjs +31 -0
  365. package/dist/mcp-server/types/seeding.mjs.map +1 -0
  366. package/dist/mcp-server/types/session.cjs +3 -0
  367. package/dist/mcp-server/types/session.cjs.map +1 -0
  368. package/dist/mcp-server/types/session.d.cts +11 -0
  369. package/dist/mcp-server/types/session.d.cts.map +1 -0
  370. package/dist/mcp-server/types/session.d.mts +11 -0
  371. package/dist/mcp-server/types/session.d.mts.map +1 -0
  372. package/dist/mcp-server/types/session.mjs +2 -0
  373. package/dist/mcp-server/types/session.mjs.map +1 -0
  374. package/dist/mcp-server/types/step-record.cjs +20 -0
  375. package/dist/mcp-server/types/step-record.cjs.map +1 -0
  376. package/dist/mcp-server/types/step-record.d.cts +86 -0
  377. package/dist/mcp-server/types/step-record.d.cts.map +1 -0
  378. package/dist/mcp-server/types/step-record.d.mts +86 -0
  379. package/dist/mcp-server/types/step-record.d.mts.map +1 -0
  380. package/dist/mcp-server/types/step-record.mjs +17 -0
  381. package/dist/mcp-server/types/step-record.mjs.map +1 -0
  382. package/dist/mcp-server/types/tool-inputs.cjs +3 -0
  383. package/dist/mcp-server/types/tool-inputs.cjs.map +1 -0
  384. package/dist/mcp-server/types/tool-inputs.d.cts +118 -0
  385. package/dist/mcp-server/types/tool-inputs.d.cts.map +1 -0
  386. package/dist/mcp-server/types/tool-inputs.d.mts +118 -0
  387. package/dist/mcp-server/types/tool-inputs.d.mts.map +1 -0
  388. package/dist/mcp-server/types/tool-inputs.mjs +2 -0
  389. package/dist/mcp-server/types/tool-inputs.mjs.map +1 -0
  390. package/dist/mcp-server/types/tool-outputs.cjs +3 -0
  391. package/dist/mcp-server/types/tool-outputs.cjs.map +1 -0
  392. package/dist/mcp-server/types/tool-outputs.d.cts +121 -0
  393. package/dist/mcp-server/types/tool-outputs.d.cts.map +1 -0
  394. package/dist/mcp-server/types/tool-outputs.d.mts +121 -0
  395. package/dist/mcp-server/types/tool-outputs.d.mts.map +1 -0
  396. package/dist/mcp-server/types/tool-outputs.mjs +2 -0
  397. package/dist/mcp-server/types/tool-outputs.mjs.map +1 -0
  398. package/dist/mcp-server/utils/errors.cjs +14 -0
  399. package/dist/mcp-server/utils/errors.cjs.map +1 -0
  400. package/dist/mcp-server/utils/errors.d.cts +9 -0
  401. package/dist/mcp-server/utils/errors.d.cts.map +1 -0
  402. package/dist/mcp-server/utils/errors.d.mts +9 -0
  403. package/dist/mcp-server/utils/errors.d.mts.map +1 -0
  404. package/dist/mcp-server/utils/errors.mjs +11 -0
  405. package/dist/mcp-server/utils/errors.mjs.map +1 -0
  406. package/dist/mcp-server/utils/index.cjs +22 -0
  407. package/dist/mcp-server/utils/index.cjs.map +1 -0
  408. package/dist/mcp-server/utils/index.d.cts +8 -0
  409. package/dist/mcp-server/utils/index.d.cts.map +1 -0
  410. package/dist/mcp-server/utils/index.d.mts +8 -0
  411. package/dist/mcp-server/utils/index.d.mts.map +1 -0
  412. package/dist/mcp-server/utils/index.mjs +8 -0
  413. package/dist/mcp-server/utils/index.mjs.map +1 -0
  414. package/dist/mcp-server/utils/logger.cjs +25 -0
  415. package/dist/mcp-server/utils/logger.cjs.map +1 -0
  416. package/dist/mcp-server/utils/logger.d.cts +9 -0
  417. package/dist/mcp-server/utils/logger.d.cts.map +1 -0
  418. package/dist/mcp-server/utils/logger.d.mts +9 -0
  419. package/dist/mcp-server/utils/logger.d.mts.map +1 -0
  420. package/dist/mcp-server/utils/logger.mjs +22 -0
  421. package/dist/mcp-server/utils/logger.mjs.map +1 -0
  422. package/dist/mcp-server/utils/redaction.cjs +24 -0
  423. package/dist/mcp-server/utils/redaction.cjs.map +1 -0
  424. package/dist/mcp-server/utils/redaction.d.cts +9 -0
  425. package/dist/mcp-server/utils/redaction.d.cts.map +1 -0
  426. package/dist/mcp-server/utils/redaction.d.mts +9 -0
  427. package/dist/mcp-server/utils/redaction.d.mts.map +1 -0
  428. package/dist/mcp-server/utils/redaction.mjs +20 -0
  429. package/dist/mcp-server/utils/redaction.mjs.map +1 -0
  430. package/dist/mcp-server/utils/response.cjs +49 -0
  431. package/dist/mcp-server/utils/response.cjs.map +1 -0
  432. package/dist/mcp-server/utils/response.d.cts +22 -0
  433. package/dist/mcp-server/utils/response.d.cts.map +1 -0
  434. package/dist/mcp-server/utils/response.d.mts +22 -0
  435. package/dist/mcp-server/utils/response.d.mts.map +1 -0
  436. package/dist/mcp-server/utils/response.mjs +45 -0
  437. package/dist/mcp-server/utils/response.mjs.map +1 -0
  438. package/dist/mcp-server/utils/targets.cjs +32 -0
  439. package/dist/mcp-server/utils/targets.cjs.map +1 -0
  440. package/dist/mcp-server/utils/targets.d.cts +25 -0
  441. package/dist/mcp-server/utils/targets.d.cts.map +1 -0
  442. package/dist/mcp-server/utils/targets.d.mts +25 -0
  443. package/dist/mcp-server/utils/targets.d.mts.map +1 -0
  444. package/dist/mcp-server/utils/targets.mjs +29 -0
  445. package/dist/mcp-server/utils/targets.mjs.map +1 -0
  446. package/dist/mcp-server/utils/time.cjs +39 -0
  447. package/dist/mcp-server/utils/time.cjs.map +1 -0
  448. package/dist/mcp-server/utils/time.d.cts +15 -0
  449. package/dist/mcp-server/utils/time.d.cts.map +1 -0
  450. package/dist/mcp-server/utils/time.d.mts +15 -0
  451. package/dist/mcp-server/utils/time.d.mts.map +1 -0
  452. package/dist/mcp-server/utils/time.mjs +35 -0
  453. package/dist/mcp-server/utils/time.mjs.map +1 -0
  454. package/dist/mcp-server/utils/type-guards.cjs +42 -0
  455. package/dist/mcp-server/utils/type-guards.cjs.map +1 -0
  456. package/dist/mcp-server/utils/type-guards.d.cts +30 -0
  457. package/dist/mcp-server/utils/type-guards.d.cts.map +1 -0
  458. package/dist/mcp-server/utils/type-guards.d.mts +30 -0
  459. package/dist/mcp-server/utils/type-guards.d.mts.map +1 -0
  460. package/dist/mcp-server/utils/type-guards.mjs +38 -0
  461. package/dist/mcp-server/utils/type-guards.mjs.map +1 -0
  462. package/dist/utils/fetch.cjs +36 -0
  463. package/dist/utils/fetch.cjs.map +1 -0
  464. package/dist/utils/fetch.d.cts +20 -0
  465. package/dist/utils/fetch.d.cts.map +1 -0
  466. package/dist/utils/fetch.d.mts +20 -0
  467. package/dist/utils/fetch.d.mts.map +1 -0
  468. package/dist/utils/fetch.mjs +33 -0
  469. package/dist/utils/fetch.mjs.map +1 -0
  470. package/dist/utils/index.cjs +11 -0
  471. package/dist/utils/index.cjs.map +1 -0
  472. package/dist/utils/index.d.cts +6 -0
  473. package/dist/utils/index.d.cts.map +1 -0
  474. package/dist/utils/index.d.mts +6 -0
  475. package/dist/utils/index.d.mts.map +1 -0
  476. package/dist/utils/index.mjs +6 -0
  477. package/dist/utils/index.mjs.map +1 -0
  478. package/dist/utils/service-readiness.cjs +75 -0
  479. package/dist/utils/service-readiness.cjs.map +1 -0
  480. package/dist/utils/service-readiness.d.cts +61 -0
  481. package/dist/utils/service-readiness.d.cts.map +1 -0
  482. package/dist/utils/service-readiness.d.mts +61 -0
  483. package/dist/utils/service-readiness.d.mts.map +1 -0
  484. package/dist/utils/service-readiness.mjs +72 -0
  485. package/dist/utils/service-readiness.mjs.map +1 -0
  486. package/package.json +119 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-store.cjs","sourceRoot":"","sources":["../../src/mcp-server/knowledge-store.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable id-length */\nimport { promises as fs } from 'fs';\nimport * as path from 'path';\n\nimport {\n expandWithSynonyms,\n tokenize,\n tokenizeIdentifier,\n} from './tokenization.js';\nimport type {\n StepRecord,\n StepRecordTool,\n StepRecordObservation,\n StepRecordOutcome,\n TestIdItem,\n A11yNodeTrimmed,\n KnowledgeStepSummary,\n RecipeStep,\n SessionMetadata,\n KnowledgeScope,\n KnowledgeFilters,\n SessionSummary,\n PriorKnowledgeV1,\n PriorKnowledgeContext,\n PriorKnowledgeSimilarStep,\n PriorKnowledgeSuggestedAction,\n PriorKnowledgeAvoid,\n PriorKnowledgeRelatedSession,\n PriorKnowledgeTarget,\n} from './types';\nimport {\n generateFilesafeTimestamp,\n isSensitiveField,\n SENSITIVE_FIELD_PATTERNS,\n debugWarn,\n} from './utils';\nimport type { ExtensionState } from '../capabilities/types.js';\n\nconst KNOWLEDGE_ROOT = 'test-artifacts/llm-knowledge';\nconst SCHEMA_VERSION = 1;\n\nconst PRIOR_KNOWLEDGE_CONFIG = {\n /** Look back 48 hours for related sessions - balances recency with having enough data */\n windowHours: 48,\n /** Limit to 5 related sessions to keep context focused and token-efficient */\n maxRelatedSessions: 5,\n /** Maximum 10 similar steps to include - prevents overwhelming the context */\n maxSimilarSteps: 10,\n /** Limit to 5 suggested actions to keep recommendations focused and actionable */\n maxSuggestedActions: 5,\n /** Maximum 5 items in avoid list to prevent excessive warnings */\n maxAvoid: 5,\n /** Require at least 2 failures before suggesting avoidance - prevents false positives */\n minAvoidFailureCount: 2,\n} as const;\n\nconst SCAN_LIMITS = {\n /** Scan up to 20 sessions to balance thoroughness with performance */\n maxSessionsToScan: 20,\n /** Limit to 500 steps per session to avoid memory issues with large sessions */\n maxStepsPerSession: 500,\n /** Hard limit of 2000 total steps across all sessions to prevent excessive scanning */\n maxTotalSteps: 2000,\n} as const;\n\nconst SIMILARITY_WEIGHTS = {\n /** Highest weight - same screen is the strongest indicator of relevance */\n sameScreen: 8,\n /** URL path overlap indicates similar context/feature area */\n urlPathOverlap: 6,\n /** Test ID overlap shows similar UI elements are present */\n testIdOverlap: 3,\n /** Accessibility node overlap provides additional context matching */\n a11yOverlap: 2,\n /** Actionable tools (click, type, etc.) are more relevant than discovery tools */\n actionableTool: 2,\n} as const;\n\nconst MAX_SIMILARITY_SCORE =\n SIMILARITY_WEIGHTS.sameScreen +\n SIMILARITY_WEIGHTS.urlPathOverlap +\n SIMILARITY_WEIGHTS.testIdOverlap * 3 +\n SIMILARITY_WEIGHTS.a11yOverlap * 2 +\n SIMILARITY_WEIGHTS.actionableTool;\n\n/**\n * Configuration options for KnowledgeStore initialization\n */\nexport type KnowledgeStoreConfig = {\n /**\n * Root directory for storing knowledge artifacts\n */\n rootDir?: string;\n /**\n * Prefix for session IDs (default: 'mm-')\n */\n sessionIdPrefix?: string;\n /**\n * Prefix for tool names (default: 'mm')\n */\n toolPrefix?: string;\n};\n\n/**\n * Extract path tokens from URL hash fragment\n *\n * @param url - The URL to extract tokens from\n * @returns Array of path tokens from the hash fragment\n */\nfunction extractPathTokens(url: string): string[] {\n try {\n const hashPart = url.split('#')[1] ?? '';\n return hashPart\n .split('/')\n .filter((t) => t.length > 0 && !t.startsWith('0x'));\n } catch (error) {\n debugWarn('knowledge-store.extractPathTokens', error);\n return [];\n }\n}\n\n/**\n * Persistent cross-session knowledge store for recording and querying tool invocations.\n */\nexport class KnowledgeStore {\n readonly #knowledgeRoot: string;\n\n readonly #sessionIdPrefix: string;\n\n readonly #toolPrefix: string;\n\n readonly #sessionMetadataCache: Map<string, SessionMetadata | null> =\n new Map();\n\n readonly #actionableTools: string[];\n\n readonly #toolActionMap: Record<\n string,\n PriorKnowledgeSuggestedAction['action']\n >;\n\n readonly #discoveryTools: string[];\n\n /**\n * Initialize KnowledgeStore with optional configuration\n *\n * @param config - Configuration options for the store\n */\n constructor(config: KnowledgeStoreConfig = {}) {\n this.#knowledgeRoot =\n config.rootDir ?? path.join(process.cwd(), KNOWLEDGE_ROOT);\n this.#sessionIdPrefix = config.sessionIdPrefix ?? 'mm-';\n this.#toolPrefix = config.toolPrefix ?? 'mm';\n\n const prefix = this.#toolPrefix;\n this.#actionableTools = [\n `${prefix}_click`,\n `${prefix}_type`,\n `${prefix}_wait_for`,\n `${prefix}_navigate`,\n `${prefix}_wait_for_notification`,\n ];\n\n this.#toolActionMap = {\n [`${prefix}_click`]: 'click',\n [`${prefix}_type`]: 'type',\n [`${prefix}_wait_for`]: 'wait_for',\n [`${prefix}_navigate`]: 'navigate',\n [`${prefix}_wait_for_notification`]: 'wait_for_notification',\n };\n\n this.#discoveryTools = [\n `${prefix}_describe_screen`,\n `${prefix}_list_testids`,\n `${prefix}_accessibility_snapshot`,\n `${prefix}_get_state`,\n ];\n }\n\n /**\n * Write session metadata to disk\n *\n * @param metadata - Session metadata to persist\n * @returns Path to the written metadata file\n */\n async writeSessionMetadata(metadata: SessionMetadata): Promise<string> {\n const sessionDir = path.join(this.#knowledgeRoot, metadata.sessionId);\n await fs.mkdir(sessionDir, { recursive: true });\n\n const filepath = path.join(sessionDir, 'session.json');\n await fs.writeFile(filepath, JSON.stringify(metadata, null, 2));\n\n this.#sessionMetadataCache.set(metadata.sessionId, metadata);\n\n return filepath;\n }\n\n /**\n * Read session metadata from disk (private)\n *\n * @param sessionId - Session ID to read metadata for\n * @returns Session metadata or null if not found\n */\n async #readSessionMetadata(\n sessionId: string,\n ): Promise<SessionMetadata | null> {\n if (this.#sessionMetadataCache.has(sessionId)) {\n return this.#sessionMetadataCache.get(sessionId) ?? null;\n }\n\n const filepath = path.join(this.#knowledgeRoot, sessionId, 'session.json');\n\n try {\n const content = await fs.readFile(filepath, 'utf-8');\n const metadata = JSON.parse(content) as SessionMetadata;\n this.#sessionMetadataCache.set(sessionId, metadata);\n return metadata;\n } catch (error) {\n debugWarn('knowledge-store.readSessionMetadata', error);\n this.#sessionMetadataCache.set(sessionId, null);\n return null;\n }\n }\n\n /**\n * List sessions with optional filtering and limit\n *\n * @param limit - Maximum number of sessions to return\n * @param filters - Optional filters for sessions\n * @returns Array of session summaries\n */\n async listSessions(\n limit: number,\n filters?: KnowledgeFilters,\n ): Promise<SessionSummary[]> {\n const sessionIds = await this.getAllSessionIds();\n const sessions: {\n metadata: SessionMetadata;\n createdAt: Date;\n }[] = [];\n\n for (const sid of sessionIds) {\n const metadata = await this.#readSessionMetadata(sid);\n if (!metadata) {\n continue;\n }\n\n if (!this.#matchesFilters(metadata, filters)) {\n continue;\n }\n\n sessions.push({\n metadata,\n createdAt: new Date(metadata.createdAt),\n });\n }\n\n sessions.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());\n\n return sessions.slice(0, limit).map((s) => ({\n sessionId: s.metadata.sessionId,\n createdAt: s.metadata.createdAt,\n goal: s.metadata.goal,\n flowTags: s.metadata.flowTags,\n tags: s.metadata.tags,\n }));\n }\n\n /**\n * Check if session metadata matches the given filters\n *\n * @param metadata - Session metadata to check\n * @param filters - Filters to apply\n * @returns True if metadata matches all filters\n */\n #matchesFilters(\n metadata: SessionMetadata,\n filters?: KnowledgeFilters,\n ): boolean {\n if (!filters) {\n return true;\n }\n\n if (filters.flowTag && !metadata.flowTags.includes(filters.flowTag)) {\n return false;\n }\n\n if (filters.tag && !metadata.tags.includes(filters.tag)) {\n return false;\n }\n\n if (filters.sinceHours) {\n const cutoff = Date.now() - filters.sinceHours * 60 * 60 * 1000;\n const createdAt = new Date(metadata.createdAt).getTime();\n if (createdAt < cutoff) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Resolve session IDs based on scope and filters\n *\n * @param scope - Scope for session resolution (current, all, or specific sessionId)\n * @param currentSessionId - Current session ID for scope resolution\n * @param filters - Optional filters to apply to sessions\n * @returns Array of resolved session IDs\n */\n async resolveSessionIds(\n scope: KnowledgeScope,\n currentSessionId: string | undefined,\n filters?: KnowledgeFilters,\n ): Promise<string[]> {\n if (scope === 'current') {\n return currentSessionId ? [currentSessionId] : [];\n }\n\n if (typeof scope === 'object' && 'sessionId' in scope) {\n return [scope.sessionId];\n }\n\n const allIds = await this.getAllSessionIds();\n\n if (!filters) {\n return allIds;\n }\n\n const filtered: string[] = [];\n for (const sid of allIds) {\n const metadata = await this.#readSessionMetadata(sid);\n if (metadata && this.#matchesFilters(metadata, filters)) {\n filtered.push(sid);\n } else if (!metadata) {\n filtered.push(sid);\n }\n }\n\n return filtered;\n }\n\n /**\n * Record a tool execution step with context and artifacts\n *\n * @param params - Step recording parameters\n * @param params.sessionId - Session ID for this step\n * @param params.toolName - Name of the tool executed\n * @param params.input - Tool input parameters\n * @param params.target - Target element information\n * @param params.outcome - Execution outcome (success/failure)\n * @param params.observation - Observed state after execution\n * @param params.durationMs - Execution duration in milliseconds\n * @param params.screenshotPath - Path to screenshot artifact\n * @param params.screenshotDimensions - Screenshot dimensions\n * @param params.screenshotDimensions.width - Screenshot width in pixels\n * @param params.screenshotDimensions.height - Screenshot height in pixels\n * @param params.context - Execution context (e2e or prod)\n * @returns Path to the recorded step file\n */\n async recordStep(params: {\n sessionId: string;\n toolName: string;\n input?: Record<string, unknown>;\n target?: StepRecordTool['target'];\n outcome: StepRecordOutcome;\n observation: StepRecordObservation;\n durationMs?: number;\n screenshotPath?: string;\n screenshotDimensions?: {\n /**\n * Screenshot width in pixels\n */\n width: number;\n /**\n * Screenshot height in pixels\n */\n height: number;\n };\n context?: 'e2e' | 'prod';\n }): Promise<string> {\n const timestamp = new Date();\n const filesafeTimestamp = generateFilesafeTimestamp(timestamp);\n\n const sessionDir = path.join(this.#knowledgeRoot, params.sessionId);\n const stepsDir = path.join(sessionDir, 'steps');\n await fs.mkdir(stepsDir, { recursive: true });\n\n const sanitizedInput = this.#sanitizeInput(params.toolName, params.input);\n const labels = this.#computeLabels(\n params.toolName,\n params.target,\n params.outcome,\n );\n\n const stepRecord: StepRecord = {\n schemaVersion: SCHEMA_VERSION,\n timestamp: timestamp.toISOString(),\n sessionId: params.sessionId,\n context: params.context,\n environment: this.#getEnvironmentInfo(),\n tool: {\n name: params.toolName,\n input: sanitizedInput.input,\n target: params.target,\n textRedacted: sanitizedInput.textRedacted,\n textLength: sanitizedInput.textLength,\n },\n timing: {\n durationMs: params.durationMs,\n },\n outcome: params.outcome,\n observation: params.observation,\n labels,\n };\n\n if (params.screenshotPath) {\n stepRecord.artifacts = {\n screenshot: {\n path: params.screenshotPath,\n width: params.screenshotDimensions?.width,\n height: params.screenshotDimensions?.height,\n },\n };\n }\n\n const filename = `${filesafeTimestamp}-${params.toolName}.json`;\n const filepath = path.join(stepsDir, filename);\n\n await fs.writeFile(filepath, JSON.stringify(stepRecord, null, 2));\n\n return filepath;\n }\n\n /**\n * Compute labels for a step based on tool and outcome\n *\n * @param toolName - Name of the tool executed\n * @param target - Target element information\n * @param outcome - Execution outcome\n * @returns Array of labels describing the step\n */\n #computeLabels(\n toolName: string,\n target?: StepRecordTool['target'],\n outcome?: StepRecordOutcome,\n ): string[] {\n const labels: string[] = [];\n\n const navigationTools = [\n `${this.#toolPrefix}_navigate`,\n `${this.#toolPrefix}_wait_for_notification`,\n ];\n const interactionTools = [\n `${this.#toolPrefix}_click`,\n `${this.#toolPrefix}_type`,\n `${this.#toolPrefix}_wait_for`,\n ];\n\n if (this.#discoveryTools.includes(toolName)) {\n labels.push('discovery');\n } else if (navigationTools.includes(toolName)) {\n labels.push('navigation');\n } else if (interactionTools.includes(toolName)) {\n labels.push('interaction');\n\n const targetStr = JSON.stringify(target ?? {}).toLowerCase();\n if (\n targetStr.includes('confirm') ||\n targetStr.includes('approve') ||\n targetStr.includes('submit')\n ) {\n labels.push('confirmation');\n }\n }\n\n if (outcome && !outcome.ok) {\n labels.push('error-recovery');\n }\n\n return labels;\n }\n\n /**\n * Get the last N steps from the knowledge store\n *\n * @param n - Number of steps to retrieve\n * @param scope - Scope for step retrieval (current, all, or specific sessionId)\n * @param currentSessionId - Current session ID for scope resolution\n * @param filters - Optional filters to apply to steps\n * @returns Array of step summaries\n */\n async getLastSteps(\n n: number,\n scope: KnowledgeScope,\n currentSessionId: string | undefined,\n filters?: KnowledgeFilters,\n ): Promise<KnowledgeStepSummary[]> {\n const sessionIds = await this.resolveSessionIds(\n scope,\n currentSessionId,\n filters,\n );\n\n const allSteps: {\n /**\n * The step record\n */\n step: StepRecord;\n /**\n * Path to the step file\n */\n filepath: string;\n }[] = [];\n\n for (const sid of sessionIds) {\n const steps = await this.#loadSessionSteps(sid);\n for (const s of steps) {\n if (this.#stepMatchesFilters(s.step, filters)) {\n allSteps.push(s);\n }\n }\n }\n\n allSteps.sort(\n (a, b) =>\n new Date(b.step.timestamp).getTime() -\n new Date(a.step.timestamp).getTime(),\n );\n\n return allSteps.slice(0, n).map((item) => this.#summarizeStep(item.step));\n }\n\n /**\n * Search steps by query across sessions\n *\n * @param query - Search query string\n * @param limit - Maximum number of results to return\n * @param scope - Scope for search (current, all, or specific sessionId)\n * @param currentSessionId - Current session ID for scope resolution\n * @param filters - Optional filters to apply to steps\n * @returns Array of matching step summaries\n */\n async searchSteps(\n query: string,\n limit: number,\n scope: KnowledgeScope,\n currentSessionId: string | undefined,\n filters?: KnowledgeFilters,\n ): Promise<KnowledgeStepSummary[]> {\n const queryTokens = tokenize(query);\n if (queryTokens.length === 0) {\n return [];\n }\n\n const expandedTokens = expandWithSynonyms(queryTokens);\n\n const sessionIds = await this.resolveSessionIds(\n scope,\n currentSessionId,\n filters,\n );\n\n type ScoredSession = {\n sessionId: string;\n score: number;\n metadata?: SessionMetadata;\n };\n const scoredSessions: ScoredSession[] = [];\n\n for (const sid of sessionIds) {\n const metadata = await this.#readSessionMetadata(sid);\n const sessionScore = metadata\n ? this.#computeSessionScore(metadata, expandedTokens)\n : 0;\n scoredSessions.push({\n sessionId: sid,\n score: sessionScore,\n metadata: metadata ?? undefined,\n });\n }\n\n scoredSessions.sort((a, b) => {\n if (b.score !== a.score) {\n return b.score - a.score;\n }\n const aTime = a.metadata?.createdAt\n ? new Date(a.metadata.createdAt).getTime()\n : 0;\n const bTime = b.metadata?.createdAt\n ? new Date(b.metadata.createdAt).getTime()\n : 0;\n if (bTime !== aTime) {\n return bTime - aTime;\n }\n return a.sessionId.localeCompare(b.sessionId);\n });\n const topSessions = scoredSessions.slice(0, SCAN_LIMITS.maxSessionsToScan);\n\n type StepMatch = {\n step: StepRecord;\n score: number;\n sessionScore: number;\n sessionGoal?: string;\n matchedFields: string[];\n };\n const matches: StepMatch[] = [];\n let totalStepsScanned = 0;\n\n for (const {\n sessionId: sid,\n score: sessionScore,\n metadata,\n } of topSessions) {\n if (totalStepsScanned >= SCAN_LIMITS.maxTotalSteps) {\n break;\n }\n\n const steps = await this.#loadSessionSteps(sid);\n const limitedSteps = steps.slice(0, SCAN_LIMITS.maxStepsPerSession);\n totalStepsScanned += limitedSteps.length;\n\n for (const { step } of limitedSteps) {\n if (!this.#stepMatchesFilters(step, filters)) {\n continue;\n }\n\n const { score: stepScore, matchedFields } = this.#computeSearchScore(\n step,\n expandedTokens,\n );\n\n const combinedScore = sessionScore + stepScore;\n\n if (combinedScore > 0) {\n matches.push({\n step,\n score: combinedScore,\n sessionScore,\n sessionGoal: metadata?.goal,\n matchedFields,\n });\n }\n }\n }\n\n matches.sort((a, b) => b.score - a.score);\n\n return matches\n .slice(0, limit)\n .map((m) => this.#summarizeStep(m.step, m.matchedFields, m.sessionGoal));\n }\n\n /**\n * Check if a step matches the given filters\n *\n * @param step - Step record to check\n * @param filters - Filters to apply\n * @returns True if step matches all filters\n */\n #stepMatchesFilters(step: StepRecord, filters?: KnowledgeFilters): boolean {\n if (!filters) {\n return true;\n }\n\n if (\n filters.screen &&\n step.observation?.state?.currentScreen !== filters.screen\n ) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Generate a recipe summary of steps in a session\n *\n * @param sessionId - Session ID to summarize\n * @returns Session summary with recipe steps\n */\n async summarizeSession(sessionId: string): Promise<{\n /**\n * Session ID\n */\n sessionId: string;\n /**\n * Total number of steps in session\n */\n stepCount: number;\n /**\n * Recipe steps describing the session flow\n */\n recipe: RecipeStep[];\n }> {\n const steps = await this.#loadSessionSteps(sessionId);\n\n steps.sort(\n (a, b) =>\n new Date(a.step.timestamp).getTime() -\n new Date(b.step.timestamp).getTime(),\n );\n\n const recipe: RecipeStep[] = steps.map(({ step }, index) => ({\n stepNumber: index + 1,\n tool: step.tool.name,\n notes: this.#generateStepNotes(step),\n }));\n\n return {\n sessionId,\n stepCount: steps.length,\n recipe,\n };\n }\n\n /**\n * Get all session IDs from the knowledge store\n *\n * @returns Array of all session IDs\n */\n async getAllSessionIds(): Promise<string[]> {\n try {\n const entries = await fs.readdir(this.#knowledgeRoot, {\n withFileTypes: true,\n });\n return entries\n .filter(\n (e) =>\n e.isDirectory() &&\n (e.name.startsWith('mm-') ||\n e.name.startsWith(this.#sessionIdPrefix)),\n )\n .map((e) => e.name);\n } catch (error) {\n debugWarn('knowledge-store.getAllSessionIds', error);\n return [];\n }\n }\n\n /**\n * Load all step records from a session\n *\n * @param sessionId - Session ID to load steps from\n * @returns Array of step records with file paths\n */\n async #loadSessionSteps(sessionId: string): Promise<\n {\n /**\n * The step record\n */\n step: StepRecord;\n /**\n * Path to the step file\n */\n filepath: string;\n }[]\n > {\n const stepsDir = path.join(this.#knowledgeRoot, sessionId, 'steps');\n\n try {\n const files = await fs.readdir(stepsDir);\n const jsonFiles = files.filter((f) => f.endsWith('.json'));\n\n const steps: {\n /**\n * The step record\n */\n step: StepRecord;\n /**\n * Path to the step file\n */\n filepath: string;\n }[] = [];\n\n for (const file of jsonFiles) {\n const filepath = path.join(stepsDir, file);\n try {\n const content = await fs.readFile(filepath, 'utf-8');\n const step = JSON.parse(content) as StepRecord;\n steps.push({ step, filepath });\n } catch (error) {\n debugWarn('knowledge-store.loadSessionSteps', error);\n continue;\n }\n }\n\n return steps;\n } catch (error) {\n debugWarn('knowledge-store.loadSessionSteps', error);\n return [];\n }\n }\n\n /**\n * Sanitize tool input by redacting sensitive fields\n *\n * @param toolName - Name of the tool\n * @param input - Input parameters to sanitize\n * @returns Sanitized input with redaction metadata\n */\n #sanitizeInput(\n toolName: string,\n input?: Record<string, unknown>,\n ): {\n /**\n * Sanitized input parameters\n */\n input?: Record<string, unknown>;\n /**\n * Whether text was redacted\n */\n textRedacted?: boolean;\n /**\n * Length of redacted text\n */\n textLength?: number;\n } {\n if (!input) {\n return {};\n }\n\n const sanitized: Record<string, unknown> = {};\n let textRedacted = false;\n let textLength: number | undefined;\n\n const typeToolName = `${this.#toolPrefix}_type`;\n\n for (const [key, value] of Object.entries(input)) {\n if (toolName === typeToolName && key === 'text') {\n const textValue = String(value);\n const targetTestId = input.testId as string | undefined;\n const targetSelector = input.selector as string | undefined;\n\n const isSensitive =\n isSensitiveField(targetTestId ?? '') ||\n isSensitiveField(targetSelector ?? '') ||\n SENSITIVE_FIELD_PATTERNS.some((p: RegExp) => p.test(key));\n\n if (isSensitive) {\n textRedacted = true;\n textLength = textValue.length;\n sanitized[key] = '[REDACTED]';\n } else {\n sanitized[key] = value;\n }\n } else if (isSensitiveField(key)) {\n sanitized[key] = '[REDACTED]';\n } else {\n sanitized[key] = value;\n }\n }\n\n return {\n input: sanitized,\n textRedacted: textRedacted || undefined,\n textLength,\n };\n }\n\n /**\n * Get environment information\n *\n * @returns Environment details (platform and Node version)\n */\n #getEnvironmentInfo(): {\n /**\n * Operating system platform\n */\n platform: string;\n /**\n * Node.js version\n */\n nodeVersion: string;\n } {\n return {\n platform: process.platform,\n nodeVersion: process.version,\n };\n }\n\n /**\n * Create a summary of a step record\n *\n * @param step - Step record to summarize\n * @param matchedFields - Fields that matched the search query\n * @param sessionGoal - Goal of the session containing this step\n * @returns Step summary for display\n */\n #summarizeStep(\n step: StepRecord,\n matchedFields?: string[],\n sessionGoal?: string,\n ): KnowledgeStepSummary {\n const screen = step.observation?.state?.currentScreen ?? 'unknown';\n const snippet = this.#generateSnippet(step, matchedFields);\n\n return {\n timestamp: step.timestamp,\n tool: step.tool.name,\n screen,\n snippet,\n sessionId: step.sessionId,\n matchedFields: matchedFields?.length ? matchedFields : undefined,\n sessionGoal,\n };\n }\n\n /**\n * Generate a human-readable snippet from a step\n *\n * @param step - Step record to generate snippet from\n * @param matchedFields - Fields that matched the search query\n * @returns Human-readable snippet string\n */\n #generateSnippet(step: StepRecord, matchedFields?: string[]): string {\n const parts: string[] = [];\n\n if (matchedFields && matchedFields.length > 0) {\n const topMatches = matchedFields.slice(0, 3).join(', ');\n parts.push(`match: ${topMatches}`);\n }\n\n if (step.tool.target?.testId) {\n parts.push(`testId: ${step.tool.target.testId}`);\n } else if (step.tool.target?.a11yRef) {\n parts.push(`ref: ${step.tool.target.a11yRef}`);\n } else if (step.tool.target?.selector) {\n const shortSelector = step.tool.target.selector.substring(0, 30);\n parts.push(`selector: ${shortSelector}`);\n }\n\n if (step.labels && step.labels.length > 0) {\n parts.push(`labels: ${step.labels.join(', ')}`);\n }\n\n if (step.observation?.state?.currentScreen) {\n parts.push(`screen: ${step.observation.state.currentScreen}`);\n }\n\n if (!step.outcome.ok && step.outcome.error) {\n parts.push(`error: ${step.outcome.error.code}`);\n }\n\n return parts.join(', ') || step.tool.name;\n }\n\n /**\n * Generate notes describing a step\n *\n * @param step - Step record to generate notes from\n * @returns Notes string describing the step\n */\n #generateStepNotes(step: StepRecord): string {\n const notes: string[] = [];\n\n if (step.tool.target?.testId) {\n notes.push(`target: [data-testid=\"${step.tool.target.testId}\"]`);\n } else if (step.tool.target?.a11yRef) {\n notes.push(`target: ${step.tool.target.a11yRef}`);\n }\n\n if (step.observation?.state?.currentScreen) {\n notes.push(`on screen: ${step.observation.state.currentScreen}`);\n }\n\n if (!step.outcome.ok && step.outcome.error) {\n notes.push(`FAILED: ${step.outcome.error.message}`);\n }\n\n if (step.artifacts?.screenshot?.path) {\n notes.push('screenshot captured');\n }\n\n return notes.join('; ') || 'executed';\n }\n\n /**\n * Compute relevance score for a session based on query tokens\n *\n * @param metadata - Session metadata to score\n * @param queryTokens - Tokens from the search query\n * @returns Relevance score for the session\n */\n #computeSessionScore(\n metadata: SessionMetadata,\n queryTokens: string[],\n ): number {\n let score = 0;\n\n for (const token of queryTokens) {\n for (const flowTag of metadata.flowTags) {\n if (flowTag.toLowerCase().includes(token)) {\n score += 12;\n break;\n }\n }\n }\n\n const goalTokens = tokenize(metadata.goal ?? '');\n for (const token of queryTokens) {\n if (goalTokens.includes(token)) {\n score += 6;\n }\n }\n\n for (const token of queryTokens) {\n for (const tag of metadata.tags) {\n if (tag.toLowerCase().includes(token)) {\n score += 4;\n break;\n }\n }\n }\n\n const ageHours =\n (Date.now() - new Date(metadata.createdAt).getTime()) / (1000 * 60 * 60);\n if (ageHours < 24) {\n score += 3;\n } else if (ageHours < 72) {\n score += 1;\n }\n\n return score;\n }\n\n /**\n * Compute relevance score for a step based on query tokens\n *\n * @param step - Step record to score\n * @param queryTokens - Tokens from the search query\n * @returns Score and matched field names\n */\n #computeSearchScore(\n step: StepRecord,\n queryTokens: string[],\n ): {\n /**\n * Relevance score for the step\n */\n score: number;\n /**\n * Fields that matched the query\n */\n matchedFields: string[];\n } {\n let score = 0;\n const matchedFieldsSet = new Set<string>();\n let matchedTokens = 0;\n\n const targetTestIdTokens = step.tool.target?.testId\n ? tokenizeIdentifier(step.tool.target.testId)\n : [];\n\n const observedTestIdTokensMap = new Map<string, string[]>();\n for (const testIdItem of step.observation?.testIds ?? []) {\n observedTestIdTokensMap.set(\n testIdItem.testId,\n tokenizeIdentifier(testIdItem.testId),\n );\n }\n\n for (const token of queryTokens) {\n let tokenMatched = false;\n\n if (step.tool.name.toLowerCase().includes(token)) {\n score += 10;\n matchedFieldsSet.add(`tool:${step.tool.name}`);\n tokenMatched = true;\n }\n\n const screen = step.observation?.state?.currentScreen;\n if (screen?.toLowerCase().includes(token)) {\n score += 8;\n matchedFieldsSet.add(`screen:${screen}`);\n tokenMatched = true;\n }\n\n if (step.tool.target?.testId && targetTestIdTokens.includes(token)) {\n score += 6;\n matchedFieldsSet.add(`testId:${step.tool.target.testId}`);\n tokenMatched = true;\n }\n\n for (const label of step.labels ?? []) {\n if (label.toLowerCase().includes(token)) {\n score += 5;\n matchedFieldsSet.add(`label:${label}`);\n tokenMatched = true;\n break;\n }\n }\n\n for (const [testId, tokens] of observedTestIdTokensMap) {\n if (tokens.includes(token)) {\n score += 3;\n matchedFieldsSet.add(`testId:${testId}`);\n tokenMatched = true;\n break;\n }\n }\n\n for (const node of step.observation?.a11y?.nodes ?? []) {\n if (node.name.toLowerCase().includes(token)) {\n score += 2;\n matchedFieldsSet.add(`a11y:${node.role}:\"${node.name}\"`);\n tokenMatched = true;\n break;\n }\n if (node.role.toLowerCase().includes(token)) {\n score += 2;\n matchedFieldsSet.add(`a11y:${node.role}`);\n tokenMatched = true;\n break;\n }\n }\n\n if (tokenMatched) {\n matchedTokens += 1;\n }\n }\n\n if (queryTokens.length > 0) {\n const coverageRatio = matchedTokens / queryTokens.length;\n score += Math.floor(coverageRatio * 5);\n }\n\n return { score, matchedFields: [...matchedFieldsSet] };\n }\n\n /**\n * Generate prior knowledge from historical sessions\n *\n * @param context - Current context for knowledge generation\n * @param currentSessionId - Current session ID to exclude from results\n * @returns Prior knowledge object or undefined if no relevant data found\n */\n async generatePriorKnowledge(\n context: PriorKnowledgeContext,\n currentSessionId?: string,\n ): Promise<PriorKnowledgeV1 | undefined> {\n const { windowHours } = PRIOR_KNOWLEDGE_CONFIG;\n\n const filters: KnowledgeFilters = {\n sinceHours: windowHours,\n };\n\n if (context.currentSessionFlowTags?.length) {\n filters.flowTag = context.currentSessionFlowTags[0];\n }\n\n const sessionIds = await this.resolveSessionIds('all', undefined, filters);\n const candidateSessionIds = sessionIds.filter(\n (sid) => sid !== currentSessionId,\n );\n\n if (candidateSessionIds.length === 0) {\n return undefined;\n }\n\n const relatedSessions = await this.#getRelatedSessions(\n candidateSessionIds,\n filters,\n PRIOR_KNOWLEDGE_CONFIG.maxRelatedSessions,\n );\n\n const { similarSteps, candidateStepCount } = await this.#getSimilarSteps(\n context,\n candidateSessionIds,\n filters,\n );\n\n const suggestedNextActions = this.#buildSuggestedActions(\n similarSteps,\n context,\n );\n\n const avoidList = await this.#buildAvoidList(context, candidateSessionIds);\n\n if (\n relatedSessions.length === 0 &&\n similarSteps.length === 0 &&\n suggestedNextActions.length === 0\n ) {\n return undefined;\n }\n\n return {\n schemaVersion: 1,\n generatedAt: new Date().toISOString(),\n query: {\n windowHours,\n usedFlowTags: context.currentSessionFlowTags ?? [],\n usedFilters: filters,\n candidateSessions: candidateSessionIds.length,\n candidateSteps: candidateStepCount,\n },\n relatedSessions,\n similarSteps: similarSteps.slice(\n 0,\n PRIOR_KNOWLEDGE_CONFIG.maxSimilarSteps,\n ),\n suggestedNextActions: suggestedNextActions.slice(\n 0,\n PRIOR_KNOWLEDGE_CONFIG.maxSuggestedActions,\n ),\n avoid:\n avoidList.length > 0\n ? avoidList.slice(0, PRIOR_KNOWLEDGE_CONFIG.maxAvoid)\n : undefined,\n };\n }\n\n /**\n * Get related sessions based on filters\n *\n * @param sessionIds - Session IDs to filter\n * @param filters - Filters to apply\n * @param limit - Maximum number of sessions to return\n * @returns Array of related session summaries\n */\n async #getRelatedSessions(\n sessionIds: string[],\n filters: KnowledgeFilters,\n limit: number,\n ): Promise<PriorKnowledgeRelatedSession[]> {\n const sessions: PriorKnowledgeRelatedSession[] = [];\n\n for (const sid of sessionIds) {\n if (sessions.length >= limit) {\n break;\n }\n\n const metadata = await this.#readSessionMetadata(sid);\n if (!metadata) {\n continue;\n }\n\n if (!this.#matchesFilters(metadata, filters)) {\n continue;\n }\n\n sessions.push({\n sessionId: metadata.sessionId,\n createdAt: metadata.createdAt,\n goal: metadata.goal,\n flowTags: metadata.flowTags,\n tags: metadata.tags,\n });\n }\n\n return sessions;\n }\n\n /**\n * Find similar steps from historical sessions\n *\n * @param context - Current context for similarity matching\n * @param sessionIds - Session IDs to search\n * @param filters - Filters to apply to steps\n * @returns Similar steps and total candidate count\n */\n async #getSimilarSteps(\n context: PriorKnowledgeContext,\n sessionIds: string[],\n filters: KnowledgeFilters,\n ): Promise<{\n /**\n * Array of similar steps found\n */\n similarSteps: PriorKnowledgeSimilarStep[];\n /**\n * Total number of candidate steps scanned\n */\n candidateStepCount: number;\n }> {\n const scoredSteps: {\n /**\n * The step record\n */\n step: StepRecord;\n /**\n * Similarity score for the step\n */\n score: number;\n }[] = [];\n let candidateStepCount = 0;\n\n const visibleTestIdSet = new Set(\n context.visibleTestIds.map((t) => t.testId),\n );\n const visibleA11yNames = new Set(\n context.a11yNodes.map((n) => n.name.toLowerCase()),\n );\n\n const limitedSessionIds = sessionIds.slice(\n 0,\n SCAN_LIMITS.maxSessionsToScan,\n );\n\n for (const sid of limitedSessionIds) {\n if (candidateStepCount >= SCAN_LIMITS.maxTotalSteps) {\n break;\n }\n\n const steps = await this.#loadSessionSteps(sid);\n const limitedSteps = steps.slice(0, SCAN_LIMITS.maxStepsPerSession);\n\n for (const { step } of limitedSteps) {\n candidateStepCount += 1;\n\n if (!this.#stepMatchesFilters(step, filters)) {\n continue;\n }\n\n if (this.#discoveryTools.includes(step.tool.name)) {\n continue;\n }\n\n const score = this.#computeSimilarityScore(\n step,\n context,\n visibleTestIdSet,\n visibleA11yNames,\n );\n\n if (score > 0) {\n scoredSteps.push({ step, score });\n }\n }\n }\n\n scoredSteps.sort((a, b) => b.score - a.score);\n\n const similarSteps: PriorKnowledgeSimilarStep[] = scoredSteps\n .slice(0, PRIOR_KNOWLEDGE_CONFIG.maxSimilarSteps)\n .map(({ step, score }) => {\n const a11yHint = this.#lookupA11yHint(step);\n\n return {\n sessionId: step.sessionId,\n timestamp: step.timestamp,\n tool: step.tool.name,\n screen: step.observation?.state?.currentScreen ?? 'unknown',\n snippet: this.#generateSnippet(step),\n labels: step.labels,\n target: step.tool.target\n ? {\n testId: step.tool.target.testId,\n selector: step.tool.target.selector,\n }\n : undefined,\n a11yHint,\n confidence: Math.min(score / MAX_SIMILARITY_SCORE, 1),\n };\n });\n\n return { similarSteps, candidateStepCount };\n }\n\n /**\n * Look up accessibility hint for a step's target\n *\n * @param step - Step record to look up hint for\n * @returns Accessibility hint with role and name, or undefined\n */\n #lookupA11yHint(step: StepRecord):\n | {\n /**\n * ARIA role of the element\n */\n role: string;\n /**\n * Accessible name of the element\n */\n name: string;\n }\n | undefined {\n const a11yRef = step.tool.target?.a11yRef;\n if (!a11yRef) {\n return undefined;\n }\n\n const nodes = step.observation?.a11y?.nodes ?? [];\n const matchingNode = nodes.find((node) => node.ref === a11yRef);\n if (!matchingNode?.name) {\n return undefined;\n }\n\n return { role: matchingNode.role, name: matchingNode.name };\n }\n\n /**\n * Compute similarity score between a step and current context\n *\n * @param step - Step record to score\n * @param context - Current context for comparison\n * @param visibleTestIdSet - Set of visible test IDs in current context\n * @param visibleA11yNames - Set of visible accessibility names in current context\n * @returns Similarity score\n */\n #computeSimilarityScore(\n step: StepRecord,\n context: PriorKnowledgeContext,\n visibleTestIdSet: Set<string>,\n visibleA11yNames: Set<string>,\n ): number {\n let score = 0;\n\n const stepScreen = step.observation?.state?.currentScreen;\n const contextScreen = context.currentScreen;\n\n if (stepScreen === contextScreen && stepScreen !== 'unknown') {\n score += SIMILARITY_WEIGHTS.sameScreen;\n }\n\n if (context.currentUrl && step.observation?.state) {\n const currentPathTokens = extractPathTokens(context.currentUrl);\n const stepUrl = step.observation.state.currentUrl ?? '';\n const stepPathTokens = extractPathTokens(stepUrl);\n\n for (const token of currentPathTokens) {\n if (stepPathTokens.includes(token)) {\n score += SIMILARITY_WEIGHTS.urlPathOverlap;\n break;\n }\n }\n }\n\n let testIdOverlapCount = 0;\n for (const testId of step.observation?.testIds ?? []) {\n if (visibleTestIdSet.has(testId.testId)) {\n testIdOverlapCount += 1;\n if (testIdOverlapCount >= 3) {\n break;\n }\n }\n }\n score += Math.min(testIdOverlapCount, 3) * SIMILARITY_WEIGHTS.testIdOverlap;\n\n let a11yOverlapCount = 0;\n for (const node of step.observation?.a11y?.nodes ?? []) {\n if (visibleA11yNames.has(node.name.toLowerCase())) {\n a11yOverlapCount += 1;\n if (a11yOverlapCount >= 2) {\n break;\n }\n }\n }\n score += Math.min(a11yOverlapCount, 2) * SIMILARITY_WEIGHTS.a11yOverlap;\n\n if (this.#actionableTools.includes(step.tool.name)) {\n score += SIMILARITY_WEIGHTS.actionableTool;\n }\n\n return score;\n }\n\n /**\n * Build suggested actions from similar steps\n *\n * @param similarSteps - Similar steps to analyze\n * @param context - Current context for action building\n * @returns Array of suggested actions\n */\n #buildSuggestedActions(\n similarSteps: PriorKnowledgeSimilarStep[],\n context: PriorKnowledgeContext,\n ): PriorKnowledgeSuggestedAction[] {\n const visibleTestIdSet = new Set(\n context.visibleTestIds.map((t) => t.testId),\n );\n const visibleA11yMap = new Map(\n context.a11yNodes.map((n) => [n.name.toLowerCase(), n]),\n );\n\n const actionCounts = new Map<\n string,\n {\n step: PriorKnowledgeSimilarStep;\n count: number;\n confidenceSum: number;\n }\n >();\n\n for (const step of similarSteps) {\n if (!step.target?.testId && !step.target?.selector) {\n continue;\n }\n\n const key = step.target.testId ?? step.target.selector ?? '';\n\n const existing = actionCounts.get(key);\n if (existing) {\n existing.count += 1;\n existing.confidenceSum += step.confidence;\n } else {\n actionCounts.set(key, {\n step,\n count: 1,\n confidenceSum: step.confidence,\n });\n }\n }\n\n const suggestions: PriorKnowledgeSuggestedAction[] = [];\n\n const sortedActions = Array.from(actionCounts.entries()).sort(\n ([, a], [, b]) => b.confidenceSum - a.confidenceSum,\n );\n\n for (const [, { step, count, confidenceSum }] of sortedActions) {\n if (suggestions.length >= PRIOR_KNOWLEDGE_CONFIG.maxSuggestedActions) {\n break;\n }\n\n const preferredTarget = this.#buildPreferredTarget(\n step,\n visibleTestIdSet,\n );\n if (!preferredTarget) {\n continue;\n }\n\n const fallbackTargets = this.#buildFallbackTargets(\n preferredTarget,\n visibleA11yMap,\n );\n\n const action = this.#toolToAction(step.tool);\n if (!action) {\n continue;\n }\n\n suggestions.push({\n rank: suggestions.length + 1,\n action,\n rationale:\n count > 1\n ? `Used ${count} times successfully on this screen`\n : 'Most common next successful step on this screen',\n confidence: Math.min(confidenceSum / count, 1),\n preferredTarget,\n fallbackTargets:\n fallbackTargets.length > 0 ? fallbackTargets : undefined,\n });\n }\n\n return suggestions;\n }\n\n /**\n * Build preferred target from a prior step\n *\n * @param priorStep - Prior step to extract target from\n * @param visibleTestIdSet - Set of visible test IDs in current context\n * @returns Preferred target or null if none found\n */\n #buildPreferredTarget(\n priorStep: PriorKnowledgeSimilarStep,\n visibleTestIdSet: Set<string>,\n ): PriorKnowledgeTarget | null {\n if (\n priorStep.target?.testId &&\n visibleTestIdSet.has(priorStep.target.testId)\n ) {\n return { type: 'testId', value: priorStep.target.testId };\n }\n\n if (priorStep.target?.selector) {\n return { type: 'selector', value: priorStep.target.selector };\n }\n\n if (priorStep.a11yHint) {\n return { type: 'a11yHint', value: priorStep.a11yHint };\n }\n\n return null;\n }\n\n /**\n * Build fallback targets for a preferred target\n *\n * @param preferredTarget - Preferred target to find fallbacks for\n * @param visibleA11yMap - Map of visible accessibility nodes\n * @returns Array of fallback targets\n */\n #buildFallbackTargets(\n preferredTarget: PriorKnowledgeTarget,\n visibleA11yMap: Map<string, A11yNodeTrimmed>,\n ): PriorKnowledgeTarget[] {\n const fallbacks: PriorKnowledgeTarget[] = [];\n\n if (preferredTarget.type === 'testId') {\n const testId = preferredTarget.value;\n\n const entries = Array.from(visibleA11yMap.entries());\n for (const [name, node] of entries) {\n if (\n name.includes(testId.replace(/-/gu, ' ').toLowerCase()) ||\n testId.toLowerCase().includes(name)\n ) {\n fallbacks.push({\n type: 'a11yHint',\n value: { role: node.role, name: node.name },\n });\n break;\n }\n }\n }\n\n return fallbacks;\n }\n\n /**\n * Convert tool name to action type\n *\n * @param toolName - Tool name to convert\n * @returns Action type or null if not found\n */\n #toolToAction(\n toolName: string,\n ): PriorKnowledgeSuggestedAction['action'] | null {\n return this.#toolActionMap[toolName] ?? null;\n }\n\n /**\n * Build list of actions to avoid based on failure history\n *\n * @param context - Current context for avoid list building\n * @param sessionIds - Session IDs to analyze for failures\n * @returns Array of actions to avoid\n */\n async #buildAvoidList(\n context: PriorKnowledgeContext,\n sessionIds: string[],\n ): Promise<PriorKnowledgeAvoid[]> {\n const failureCounts = new Map<\n string,\n {\n /**\n * Error code from the failure\n */\n errorCode?: string;\n /**\n * CSS selector of the failed target\n */\n selector?: string;\n /**\n * Test ID of the failed target\n */\n testId?: string;\n /**\n * Number of times this target failed\n */\n count: number;\n }\n >();\n\n for (const sid of sessionIds) {\n const steps = await this.#loadSessionSteps(sid);\n\n for (const { step } of steps) {\n if (step.outcome.ok) {\n continue;\n }\n if (step.observation?.state?.currentScreen !== context.currentScreen) {\n continue;\n }\n\n const targetKey =\n step.tool.target?.testId ?? step.tool.target?.selector ?? 'unknown';\n\n const existing = failureCounts.get(targetKey);\n if (existing) {\n existing.count += 1;\n } else {\n failureCounts.set(targetKey, {\n errorCode: step.outcome.error?.code,\n testId: step.tool.target?.testId,\n selector: step.tool.target?.selector,\n count: 1,\n });\n }\n }\n }\n\n const avoidList: PriorKnowledgeAvoid[] = [];\n\n const failureEntries = Array.from(failureCounts.values());\n for (const failure of failureEntries) {\n if (failure.count < PRIOR_KNOWLEDGE_CONFIG.minAvoidFailureCount) {\n continue;\n }\n\n avoidList.push({\n rationale: 'Frequently fails due to UI churn',\n target: {\n testId: failure.testId,\n selector: failure.selector,\n },\n errorCode: failure.errorCode,\n frequency: failure.count,\n });\n }\n\n avoidList.sort((a, b) => b.frequency - a.frequency);\n\n return avoidList;\n }\n}\n\n/**\n * Create a default observation object with state and optional artifacts\n *\n * @param state - Extension state snapshot\n * @param testIds - Array of visible test IDs\n * @param a11yNodes - Array of accessibility nodes\n * @param priorKnowledge - Optional prior knowledge from history\n * @returns Observation object for step recording\n */\nexport function createDefaultObservation(\n state: ExtensionState,\n testIds: TestIdItem[] = [],\n a11yNodes: A11yNodeTrimmed[] = [],\n priorKnowledge?: PriorKnowledgeV1,\n): StepRecordObservation {\n const observation: StepRecordObservation = {\n state,\n testIds,\n a11y: { nodes: a11yNodes },\n };\n\n if (priorKnowledge) {\n observation.priorKnowledge = priorKnowledge;\n }\n\n return observation;\n}\n\n/**\n * Create a new KnowledgeStore instance\n *\n * @param config - Optional configuration for the store\n * @returns New KnowledgeStore instance\n */\nexport function createKnowledgeStore(\n config?: KnowledgeStoreConfig,\n): KnowledgeStore {\n return new KnowledgeStore(config);\n}\n\nlet _knowledgeStore: KnowledgeStore | undefined;\n\n/**\n * Set the global knowledge store instance\n *\n * @param store - KnowledgeStore instance to set as global\n */\nexport function setKnowledgeStore(store: KnowledgeStore): void {\n _knowledgeStore = store;\n}\n\n/**\n * Get the global knowledge store instance\n *\n * @returns The global KnowledgeStore instance\n */\nexport function getKnowledgeStore(): KnowledgeStore {\n if (!_knowledgeStore) {\n throw new Error(\n 'Knowledge store not initialized. Call setKnowledgeStore() first.',\n );\n }\n return _knowledgeStore;\n}\n\n/**\n * Check if a knowledge store has been initialized\n *\n * @returns True if knowledge store is initialized\n */\nexport function hasKnowledgeStore(): boolean {\n return _knowledgeStore !== undefined;\n}\n\nexport const knowledgeStore = {\n /**\n * Record a tool execution step\n *\n * @param params - Step recording parameters\n * @returns Path to the recorded step file\n */\n recordStep: async (params: Parameters<KnowledgeStore['recordStep']>[0]) => {\n return getKnowledgeStore().recordStep(params);\n },\n /**\n * Get the last N steps from the knowledge store\n *\n * @param args - Arguments for getLastSteps\n * @returns Array of step summaries\n */\n getLastSteps: async (...args: Parameters<KnowledgeStore['getLastSteps']>) => {\n return getKnowledgeStore().getLastSteps(...args);\n },\n /**\n * Search steps by query\n *\n * @param args - Arguments for searchSteps\n * @returns Array of matching step summaries\n */\n searchSteps: async (...args: Parameters<KnowledgeStore['searchSteps']>) => {\n return getKnowledgeStore().searchSteps(...args);\n },\n /**\n * Generate a recipe summary of a session\n *\n * @param args - Arguments for summarizeSession\n * @returns Session summary with recipe steps\n */\n summarizeSession: async (\n ...args: Parameters<KnowledgeStore['summarizeSession']>\n ) => {\n return getKnowledgeStore().summarizeSession(...args);\n },\n /**\n * List sessions with optional filtering\n *\n * @param args - Arguments for listSessions\n * @returns Array of session summaries\n */\n listSessions: async (...args: Parameters<KnowledgeStore['listSessions']>) => {\n return getKnowledgeStore().listSessions(...args);\n },\n /**\n * Generate prior knowledge from historical sessions\n *\n * @param args - Arguments for generatePriorKnowledge\n * @returns Prior knowledge object or undefined\n */\n generatePriorKnowledge: async (\n ...args: Parameters<KnowledgeStore['generatePriorKnowledge']>\n ) => {\n return getKnowledgeStore().generatePriorKnowledge(...args);\n },\n /**\n * Write session metadata to disk\n *\n * @param metadata - Session metadata to persist\n * @returns Path to the written metadata file\n */\n writeSessionMetadata: async (metadata: SessionMetadata) => {\n return getKnowledgeStore().writeSessionMetadata(metadata);\n },\n};\n"]}
@@ -0,0 +1,249 @@
1
+ import type { StepRecordTool, StepRecordObservation, StepRecordOutcome, TestIdItem, A11yNodeTrimmed, KnowledgeStepSummary, RecipeStep, SessionMetadata, KnowledgeScope, KnowledgeFilters, SessionSummary, PriorKnowledgeV1, PriorKnowledgeContext } from "./types/index.cjs";
2
+ import type { ExtensionState } from "../capabilities/types.cjs";
3
+ /**
4
+ * Configuration options for KnowledgeStore initialization
5
+ */
6
+ export type KnowledgeStoreConfig = {
7
+ /**
8
+ * Root directory for storing knowledge artifacts
9
+ */
10
+ rootDir?: string;
11
+ /**
12
+ * Prefix for session IDs (default: 'mm-')
13
+ */
14
+ sessionIdPrefix?: string;
15
+ /**
16
+ * Prefix for tool names (default: 'mm')
17
+ */
18
+ toolPrefix?: string;
19
+ };
20
+ /**
21
+ * Persistent cross-session knowledge store for recording and querying tool invocations.
22
+ */
23
+ export declare class KnowledgeStore {
24
+ #private;
25
+ /**
26
+ * Initialize KnowledgeStore with optional configuration
27
+ *
28
+ * @param config - Configuration options for the store
29
+ */
30
+ constructor(config?: KnowledgeStoreConfig);
31
+ /**
32
+ * Write session metadata to disk
33
+ *
34
+ * @param metadata - Session metadata to persist
35
+ * @returns Path to the written metadata file
36
+ */
37
+ writeSessionMetadata(metadata: SessionMetadata): Promise<string>;
38
+ /**
39
+ * List sessions with optional filtering and limit
40
+ *
41
+ * @param limit - Maximum number of sessions to return
42
+ * @param filters - Optional filters for sessions
43
+ * @returns Array of session summaries
44
+ */
45
+ listSessions(limit: number, filters?: KnowledgeFilters): Promise<SessionSummary[]>;
46
+ /**
47
+ * Resolve session IDs based on scope and filters
48
+ *
49
+ * @param scope - Scope for session resolution (current, all, or specific sessionId)
50
+ * @param currentSessionId - Current session ID for scope resolution
51
+ * @param filters - Optional filters to apply to sessions
52
+ * @returns Array of resolved session IDs
53
+ */
54
+ resolveSessionIds(scope: KnowledgeScope, currentSessionId: string | undefined, filters?: KnowledgeFilters): Promise<string[]>;
55
+ /**
56
+ * Record a tool execution step with context and artifacts
57
+ *
58
+ * @param params - Step recording parameters
59
+ * @param params.sessionId - Session ID for this step
60
+ * @param params.toolName - Name of the tool executed
61
+ * @param params.input - Tool input parameters
62
+ * @param params.target - Target element information
63
+ * @param params.outcome - Execution outcome (success/failure)
64
+ * @param params.observation - Observed state after execution
65
+ * @param params.durationMs - Execution duration in milliseconds
66
+ * @param params.screenshotPath - Path to screenshot artifact
67
+ * @param params.screenshotDimensions - Screenshot dimensions
68
+ * @param params.screenshotDimensions.width - Screenshot width in pixels
69
+ * @param params.screenshotDimensions.height - Screenshot height in pixels
70
+ * @param params.context - Execution context (e2e or prod)
71
+ * @returns Path to the recorded step file
72
+ */
73
+ recordStep(params: {
74
+ sessionId: string;
75
+ toolName: string;
76
+ input?: Record<string, unknown>;
77
+ target?: StepRecordTool['target'];
78
+ outcome: StepRecordOutcome;
79
+ observation: StepRecordObservation;
80
+ durationMs?: number;
81
+ screenshotPath?: string;
82
+ screenshotDimensions?: {
83
+ /**
84
+ * Screenshot width in pixels
85
+ */
86
+ width: number;
87
+ /**
88
+ * Screenshot height in pixels
89
+ */
90
+ height: number;
91
+ };
92
+ context?: 'e2e' | 'prod';
93
+ }): Promise<string>;
94
+ /**
95
+ * Get the last N steps from the knowledge store
96
+ *
97
+ * @param n - Number of steps to retrieve
98
+ * @param scope - Scope for step retrieval (current, all, or specific sessionId)
99
+ * @param currentSessionId - Current session ID for scope resolution
100
+ * @param filters - Optional filters to apply to steps
101
+ * @returns Array of step summaries
102
+ */
103
+ getLastSteps(n: number, scope: KnowledgeScope, currentSessionId: string | undefined, filters?: KnowledgeFilters): Promise<KnowledgeStepSummary[]>;
104
+ /**
105
+ * Search steps by query across sessions
106
+ *
107
+ * @param query - Search query string
108
+ * @param limit - Maximum number of results to return
109
+ * @param scope - Scope for search (current, all, or specific sessionId)
110
+ * @param currentSessionId - Current session ID for scope resolution
111
+ * @param filters - Optional filters to apply to steps
112
+ * @returns Array of matching step summaries
113
+ */
114
+ searchSteps(query: string, limit: number, scope: KnowledgeScope, currentSessionId: string | undefined, filters?: KnowledgeFilters): Promise<KnowledgeStepSummary[]>;
115
+ /**
116
+ * Generate a recipe summary of steps in a session
117
+ *
118
+ * @param sessionId - Session ID to summarize
119
+ * @returns Session summary with recipe steps
120
+ */
121
+ summarizeSession(sessionId: string): Promise<{
122
+ /**
123
+ * Session ID
124
+ */
125
+ sessionId: string;
126
+ /**
127
+ * Total number of steps in session
128
+ */
129
+ stepCount: number;
130
+ /**
131
+ * Recipe steps describing the session flow
132
+ */
133
+ recipe: RecipeStep[];
134
+ }>;
135
+ /**
136
+ * Get all session IDs from the knowledge store
137
+ *
138
+ * @returns Array of all session IDs
139
+ */
140
+ getAllSessionIds(): Promise<string[]>;
141
+ /**
142
+ * Generate prior knowledge from historical sessions
143
+ *
144
+ * @param context - Current context for knowledge generation
145
+ * @param currentSessionId - Current session ID to exclude from results
146
+ * @returns Prior knowledge object or undefined if no relevant data found
147
+ */
148
+ generatePriorKnowledge(context: PriorKnowledgeContext, currentSessionId?: string): Promise<PriorKnowledgeV1 | undefined>;
149
+ }
150
+ /**
151
+ * Create a default observation object with state and optional artifacts
152
+ *
153
+ * @param state - Extension state snapshot
154
+ * @param testIds - Array of visible test IDs
155
+ * @param a11yNodes - Array of accessibility nodes
156
+ * @param priorKnowledge - Optional prior knowledge from history
157
+ * @returns Observation object for step recording
158
+ */
159
+ export declare function createDefaultObservation(state: ExtensionState, testIds?: TestIdItem[], a11yNodes?: A11yNodeTrimmed[], priorKnowledge?: PriorKnowledgeV1): StepRecordObservation;
160
+ /**
161
+ * Create a new KnowledgeStore instance
162
+ *
163
+ * @param config - Optional configuration for the store
164
+ * @returns New KnowledgeStore instance
165
+ */
166
+ export declare function createKnowledgeStore(config?: KnowledgeStoreConfig): KnowledgeStore;
167
+ /**
168
+ * Set the global knowledge store instance
169
+ *
170
+ * @param store - KnowledgeStore instance to set as global
171
+ */
172
+ export declare function setKnowledgeStore(store: KnowledgeStore): void;
173
+ /**
174
+ * Get the global knowledge store instance
175
+ *
176
+ * @returns The global KnowledgeStore instance
177
+ */
178
+ export declare function getKnowledgeStore(): KnowledgeStore;
179
+ /**
180
+ * Check if a knowledge store has been initialized
181
+ *
182
+ * @returns True if knowledge store is initialized
183
+ */
184
+ export declare function hasKnowledgeStore(): boolean;
185
+ export declare const knowledgeStore: {
186
+ /**
187
+ * Record a tool execution step
188
+ *
189
+ * @param params - Step recording parameters
190
+ * @returns Path to the recorded step file
191
+ */
192
+ recordStep: (params: Parameters<KnowledgeStore["recordStep"]>[0]) => Promise<string>;
193
+ /**
194
+ * Get the last N steps from the knowledge store
195
+ *
196
+ * @param args - Arguments for getLastSteps
197
+ * @returns Array of step summaries
198
+ */
199
+ getLastSteps: (n: number, scope: KnowledgeScope, currentSessionId: string | undefined, filters?: KnowledgeFilters | undefined) => Promise<KnowledgeStepSummary[]>;
200
+ /**
201
+ * Search steps by query
202
+ *
203
+ * @param args - Arguments for searchSteps
204
+ * @returns Array of matching step summaries
205
+ */
206
+ searchSteps: (query: string, limit: number, scope: KnowledgeScope, currentSessionId: string | undefined, filters?: KnowledgeFilters | undefined) => Promise<KnowledgeStepSummary[]>;
207
+ /**
208
+ * Generate a recipe summary of a session
209
+ *
210
+ * @param args - Arguments for summarizeSession
211
+ * @returns Session summary with recipe steps
212
+ */
213
+ summarizeSession: (sessionId: string) => Promise<{
214
+ /**
215
+ * Session ID
216
+ */
217
+ sessionId: string;
218
+ /**
219
+ * Total number of steps in session
220
+ */
221
+ stepCount: number;
222
+ /**
223
+ * Recipe steps describing the session flow
224
+ */
225
+ recipe: RecipeStep[];
226
+ }>;
227
+ /**
228
+ * List sessions with optional filtering
229
+ *
230
+ * @param args - Arguments for listSessions
231
+ * @returns Array of session summaries
232
+ */
233
+ listSessions: (limit: number, filters?: KnowledgeFilters | undefined) => Promise<SessionSummary[]>;
234
+ /**
235
+ * Generate prior knowledge from historical sessions
236
+ *
237
+ * @param args - Arguments for generatePriorKnowledge
238
+ * @returns Prior knowledge object or undefined
239
+ */
240
+ generatePriorKnowledge: (context: PriorKnowledgeContext, currentSessionId?: string | undefined) => Promise<PriorKnowledgeV1 | undefined>;
241
+ /**
242
+ * Write session metadata to disk
243
+ *
244
+ * @param metadata - Session metadata to persist
245
+ * @returns Path to the written metadata file
246
+ */
247
+ writeSessionMetadata: (metadata: SessionMetadata) => Promise<string>;
248
+ };
249
+ //# sourceMappingURL=knowledge-store.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-store.d.cts","sourceRoot":"","sources":["../../src/mcp-server/knowledge-store.ts"],"names":[],"mappings":"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"}