@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,199 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setToolRegistry = setToolRegistry;
4
+ exports.getToolRegistry = getToolRegistry;
5
+ exports.hasToolRegistry = hasToolRegistry;
6
+ exports.setToolValidator = setToolValidator;
7
+ exports.getToolValidator = getToolValidator;
8
+ exports.handleRunSteps = handleRunSteps;
9
+ const session_manager_js_1 = require("../session-manager.cjs");
10
+ const types_1 = require("../types/index.cjs");
11
+ const utils_1 = require("../utils/index.cjs");
12
+ /**
13
+ * Maps includeObservations string to observation policy override.
14
+ *
15
+ * @param value The observation policy string ('none', 'failures', 'all', or undefined)
16
+ * @returns The mapped observation policy override
17
+ */
18
+ function mapIncludeObservationsToPolicy(value) {
19
+ switch (value) {
20
+ case 'none':
21
+ return 'none';
22
+ case 'failures':
23
+ return 'failures';
24
+ case 'all':
25
+ default:
26
+ return 'default';
27
+ }
28
+ }
29
+ let _toolRegistry = {};
30
+ let _toolValidator;
31
+ /**
32
+ * Sets the global tool registry for batch execution.
33
+ *
34
+ * @param registry Tool registry mapping names to handlers
35
+ */
36
+ function setToolRegistry(registry) {
37
+ _toolRegistry = registry;
38
+ }
39
+ /**
40
+ * Gets the current global tool registry.
41
+ *
42
+ * @returns The current tool registry
43
+ */
44
+ function getToolRegistry() {
45
+ return _toolRegistry;
46
+ }
47
+ /**
48
+ * Checks if the tool registry has any registered handlers.
49
+ *
50
+ * @returns True if registry contains handlers, false otherwise
51
+ */
52
+ function hasToolRegistry() {
53
+ return Object.keys(_toolRegistry).length > 0;
54
+ }
55
+ /**
56
+ * Sets the global tool validator for batch execution.
57
+ *
58
+ * @param validator Validator function to validate tool arguments
59
+ */
60
+ function setToolValidator(validator) {
61
+ _toolValidator = validator;
62
+ }
63
+ /**
64
+ * Gets the current global tool validator.
65
+ *
66
+ * @returns The current tool validator or undefined if not set
67
+ */
68
+ function getToolValidator() {
69
+ return _toolValidator;
70
+ }
71
+ /**
72
+ * Executes multiple tool steps in sequence with optional validation and error handling.
73
+ *
74
+ * @param input Steps to execute with optional stop-on-error and observation policy
75
+ * @param options Optional handler configuration and observation policy override
76
+ * @returns Promise resolving to MCP response with step results and summary
77
+ */
78
+ async function handleRunSteps(input, options) {
79
+ const batchStartTime = Date.now();
80
+ const sessionManager = (0, session_manager_js_1.getSessionManager)();
81
+ const sessionId = sessionManager.getSessionId();
82
+ if (!sessionManager.hasActiveSession()) {
83
+ return (0, utils_1.createErrorResponse)(types_1.ErrorCodes.MM_NO_ACTIVE_SESSION, 'No active session. Call launch first.', { input }, undefined, batchStartTime);
84
+ }
85
+ const { steps: stepInputs, stopOnError = false, includeObservations } = input;
86
+ const observationPolicy = mapIncludeObservationsToPolicy(includeObservations);
87
+ const stepResults = [];
88
+ let succeeded = 0;
89
+ let failed = 0;
90
+ const toolHandlers = getToolRegistry();
91
+ const toolValidator = getToolValidator();
92
+ for (const stepInput of stepInputs) {
93
+ const stepStartTime = Date.now();
94
+ const { tool, args = {} } = stepInput;
95
+ const handler = toolHandlers[tool];
96
+ if (!handler) {
97
+ const result = {
98
+ tool,
99
+ ok: false,
100
+ error: {
101
+ code: types_1.ErrorCodes.MM_UNKNOWN_TOOL,
102
+ message: `Unknown tool: ${tool}`,
103
+ },
104
+ meta: {
105
+ durationMs: Date.now() - stepStartTime,
106
+ timestamp: new Date().toISOString(),
107
+ },
108
+ };
109
+ stepResults.push(result);
110
+ failed += 1;
111
+ if (stopOnError) {
112
+ break;
113
+ }
114
+ continue;
115
+ }
116
+ if (toolValidator) {
117
+ const validation = toolValidator(tool, args);
118
+ if (!validation.success) {
119
+ const result = {
120
+ tool,
121
+ ok: false,
122
+ error: {
123
+ code: types_1.ErrorCodes.MM_INVALID_INPUT,
124
+ message: `Invalid input: ${validation.error.message}`,
125
+ },
126
+ meta: {
127
+ durationMs: Date.now() - stepStartTime,
128
+ timestamp: new Date().toISOString(),
129
+ },
130
+ };
131
+ stepResults.push(result);
132
+ failed += 1;
133
+ if (stopOnError) {
134
+ break;
135
+ }
136
+ continue;
137
+ }
138
+ }
139
+ try {
140
+ const stepOptions = {
141
+ ...options,
142
+ observationPolicy,
143
+ };
144
+ const response = await handler(args, stepOptions);
145
+ const result = {
146
+ tool,
147
+ ok: response.ok,
148
+ result: response.ok ? response.result : undefined,
149
+ error: response.ok ? undefined : response.error,
150
+ meta: {
151
+ durationMs: Date.now() - stepStartTime,
152
+ timestamp: new Date().toISOString(),
153
+ },
154
+ };
155
+ stepResults.push(result);
156
+ if (response.ok) {
157
+ succeeded += 1;
158
+ }
159
+ else {
160
+ failed += 1;
161
+ if (stopOnError) {
162
+ break;
163
+ }
164
+ }
165
+ }
166
+ catch (error) {
167
+ const message = (0, utils_1.extractErrorMessage)(error);
168
+ const result = {
169
+ tool,
170
+ ok: false,
171
+ error: {
172
+ code: types_1.ErrorCodes.MM_INTERNAL_ERROR,
173
+ message: `Unexpected error: ${message}`,
174
+ },
175
+ meta: {
176
+ durationMs: Date.now() - stepStartTime,
177
+ timestamp: new Date().toISOString(),
178
+ },
179
+ };
180
+ stepResults.push(result);
181
+ failed += 1;
182
+ if (stopOnError) {
183
+ break;
184
+ }
185
+ }
186
+ }
187
+ const batchResult = {
188
+ steps: stepResults,
189
+ summary: {
190
+ ok: failed === 0,
191
+ total: stepResults.length,
192
+ succeeded,
193
+ failed,
194
+ durationMs: Date.now() - batchStartTime,
195
+ },
196
+ };
197
+ return (0, utils_1.createSuccessResponse)(batchResult, sessionId, batchStartTime);
198
+ }
199
+ //# sourceMappingURL=batch.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.cjs","sourceRoot":"","sources":["../../../src/mcp-server/tools/batch.ts"],"names":[],"mappings":"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","sourcesContent":["import { getSessionManager } from '../session-manager.js';\nimport type {\n McpResponse,\n HandlerOptions,\n RunStepsInput,\n RunStepsResult,\n StepResult,\n ObservationPolicyOverride,\n} from '../types';\nimport { ErrorCodes } from '../types';\nimport {\n createSuccessResponse,\n createErrorResponse,\n extractErrorMessage,\n} from '../utils';\n\n/**\n * Maps includeObservations string to observation policy override.\n *\n * @param value The observation policy string ('none', 'failures', 'all', or undefined)\n * @returns The mapped observation policy override\n */\nfunction mapIncludeObservationsToPolicy(\n value: 'none' | 'failures' | 'all' | undefined,\n): ObservationPolicyOverride {\n switch (value) {\n case 'none':\n return 'none';\n case 'failures':\n return 'failures';\n case 'all':\n default:\n return 'default';\n }\n}\n\n/**\n * Handler function type for executing MCP tools.\n *\n * @param input Tool arguments as key-value pairs\n * @param options Optional handler configuration\n * @returns Promise resolving to MCP response with tool result\n */\nexport type ToolHandler = (\n input: Record<string, unknown>,\n options?: HandlerOptions,\n) => Promise<McpResponse<unknown>>;\n\n/**\n * Registry mapping tool names to their handler functions.\n *\n * @returns Record of tool name to handler function mappings\n */\nexport type ToolRegistry = Record<string, ToolHandler>;\n\n/**\n * Validator function type for validating tool arguments before execution.\n *\n * @param tool Tool name being validated\n * @param args Tool arguments to validate\n * @returns Validation result with success status and optional error details\n */\nexport type ToolValidator = (\n tool: string,\n args: Record<string, unknown>,\n) =>\n | {\n /**\n * Validation succeeded\n */\n success: true;\n }\n | {\n /**\n * Validation failed\n */\n success: false;\n /**\n * Error details when validation fails\n */\n error: {\n /**\n * Error message describing validation failure\n */\n message: string;\n };\n };\n\nlet _toolRegistry: ToolRegistry = {};\nlet _toolValidator: ToolValidator | undefined;\n\n/**\n * Sets the global tool registry for batch execution.\n *\n * @param registry Tool registry mapping names to handlers\n */\nexport function setToolRegistry(registry: ToolRegistry): void {\n _toolRegistry = registry;\n}\n\n/**\n * Gets the current global tool registry.\n *\n * @returns The current tool registry\n */\nexport function getToolRegistry(): ToolRegistry {\n return _toolRegistry;\n}\n\n/**\n * Checks if the tool registry has any registered handlers.\n *\n * @returns True if registry contains handlers, false otherwise\n */\nexport function hasToolRegistry(): boolean {\n return Object.keys(_toolRegistry).length > 0;\n}\n\n/**\n * Sets the global tool validator for batch execution.\n *\n * @param validator Validator function to validate tool arguments\n */\nexport function setToolValidator(validator: ToolValidator): void {\n _toolValidator = validator;\n}\n\n/**\n * Gets the current global tool validator.\n *\n * @returns The current tool validator or undefined if not set\n */\nexport function getToolValidator(): ToolValidator | undefined {\n return _toolValidator;\n}\n\n/**\n * Executes multiple tool steps in sequence with optional validation and error handling.\n *\n * @param input Steps to execute with optional stop-on-error and observation policy\n * @param options Optional handler configuration and observation policy override\n * @returns Promise resolving to MCP response with step results and summary\n */\nexport async function handleRunSteps(\n input: RunStepsInput,\n options?: HandlerOptions,\n): Promise<McpResponse<RunStepsResult>> {\n const batchStartTime = Date.now();\n const sessionManager = getSessionManager();\n const sessionId = sessionManager.getSessionId();\n\n if (!sessionManager.hasActiveSession()) {\n return createErrorResponse(\n ErrorCodes.MM_NO_ACTIVE_SESSION,\n 'No active session. Call launch first.',\n { input },\n undefined,\n batchStartTime,\n );\n }\n\n const { steps: stepInputs, stopOnError = false, includeObservations } = input;\n const observationPolicy = mapIncludeObservationsToPolicy(includeObservations);\n const stepResults: StepResult[] = [];\n let succeeded = 0;\n let failed = 0;\n\n const toolHandlers = getToolRegistry();\n const toolValidator = getToolValidator();\n\n for (const stepInput of stepInputs) {\n const stepStartTime = Date.now();\n const { tool, args = {} } = stepInput;\n\n const handler = toolHandlers[tool];\n if (!handler) {\n const result: StepResult = {\n tool,\n ok: false,\n error: {\n code: ErrorCodes.MM_UNKNOWN_TOOL,\n message: `Unknown tool: ${tool}`,\n },\n meta: {\n durationMs: Date.now() - stepStartTime,\n timestamp: new Date().toISOString(),\n },\n };\n stepResults.push(result);\n failed += 1;\n\n if (stopOnError) {\n break;\n }\n continue;\n }\n\n if (toolValidator) {\n const validation = toolValidator(tool, args);\n if (!validation.success) {\n const result: StepResult = {\n tool,\n ok: false,\n error: {\n code: ErrorCodes.MM_INVALID_INPUT,\n message: `Invalid input: ${validation.error.message}`,\n },\n meta: {\n durationMs: Date.now() - stepStartTime,\n timestamp: new Date().toISOString(),\n },\n };\n stepResults.push(result);\n failed += 1;\n\n if (stopOnError) {\n break;\n }\n continue;\n }\n }\n\n try {\n const stepOptions: HandlerOptions = {\n ...options,\n observationPolicy,\n };\n const response = await handler(args, stepOptions);\n\n const result: StepResult = {\n tool,\n ok: response.ok,\n result: response.ok ? response.result : undefined,\n error: response.ok ? undefined : response.error,\n meta: {\n durationMs: Date.now() - stepStartTime,\n timestamp: new Date().toISOString(),\n },\n };\n\n stepResults.push(result);\n\n if (response.ok) {\n succeeded += 1;\n } else {\n failed += 1;\n if (stopOnError) {\n break;\n }\n }\n } catch (error) {\n const message = extractErrorMessage(error);\n const result: StepResult = {\n tool,\n ok: false,\n error: {\n code: ErrorCodes.MM_INTERNAL_ERROR,\n message: `Unexpected error: ${message}`,\n },\n meta: {\n durationMs: Date.now() - stepStartTime,\n timestamp: new Date().toISOString(),\n },\n };\n stepResults.push(result);\n failed += 1;\n\n if (stopOnError) {\n break;\n }\n }\n }\n\n const batchResult: RunStepsResult = {\n steps: stepResults,\n summary: {\n ok: failed === 0,\n total: stepResults.length,\n succeeded,\n failed,\n durationMs: Date.now() - batchStartTime,\n },\n };\n\n return createSuccessResponse(batchResult, sessionId, batchStartTime);\n}\n"]}
@@ -0,0 +1,81 @@
1
+ import type { McpResponse, HandlerOptions, RunStepsInput, RunStepsResult } from "../types/index.cjs";
2
+ /**
3
+ * Handler function type for executing MCP tools.
4
+ *
5
+ * @param input Tool arguments as key-value pairs
6
+ * @param options Optional handler configuration
7
+ * @returns Promise resolving to MCP response with tool result
8
+ */
9
+ export type ToolHandler = (input: Record<string, unknown>, options?: HandlerOptions) => Promise<McpResponse<unknown>>;
10
+ /**
11
+ * Registry mapping tool names to their handler functions.
12
+ *
13
+ * @returns Record of tool name to handler function mappings
14
+ */
15
+ export type ToolRegistry = Record<string, ToolHandler>;
16
+ /**
17
+ * Validator function type for validating tool arguments before execution.
18
+ *
19
+ * @param tool Tool name being validated
20
+ * @param args Tool arguments to validate
21
+ * @returns Validation result with success status and optional error details
22
+ */
23
+ export type ToolValidator = (tool: string, args: Record<string, unknown>) => {
24
+ /**
25
+ * Validation succeeded
26
+ */
27
+ success: true;
28
+ } | {
29
+ /**
30
+ * Validation failed
31
+ */
32
+ success: false;
33
+ /**
34
+ * Error details when validation fails
35
+ */
36
+ error: {
37
+ /**
38
+ * Error message describing validation failure
39
+ */
40
+ message: string;
41
+ };
42
+ };
43
+ /**
44
+ * Sets the global tool registry for batch execution.
45
+ *
46
+ * @param registry Tool registry mapping names to handlers
47
+ */
48
+ export declare function setToolRegistry(registry: ToolRegistry): void;
49
+ /**
50
+ * Gets the current global tool registry.
51
+ *
52
+ * @returns The current tool registry
53
+ */
54
+ export declare function getToolRegistry(): ToolRegistry;
55
+ /**
56
+ * Checks if the tool registry has any registered handlers.
57
+ *
58
+ * @returns True if registry contains handlers, false otherwise
59
+ */
60
+ export declare function hasToolRegistry(): boolean;
61
+ /**
62
+ * Sets the global tool validator for batch execution.
63
+ *
64
+ * @param validator Validator function to validate tool arguments
65
+ */
66
+ export declare function setToolValidator(validator: ToolValidator): void;
67
+ /**
68
+ * Gets the current global tool validator.
69
+ *
70
+ * @returns The current tool validator or undefined if not set
71
+ */
72
+ export declare function getToolValidator(): ToolValidator | undefined;
73
+ /**
74
+ * Executes multiple tool steps in sequence with optional validation and error handling.
75
+ *
76
+ * @param input Steps to execute with optional stop-on-error and observation policy
77
+ * @param options Optional handler configuration and observation policy override
78
+ * @returns Promise resolving to MCP response with step results and summary
79
+ */
80
+ export declare function handleRunSteps(input: RunStepsInput, options?: HandlerOptions): Promise<McpResponse<RunStepsResult>>;
81
+ //# sourceMappingURL=batch.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.d.cts","sourceRoot":"","sources":["../../../src/mcp-server/tools/batch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,aAAa,EACb,cAAc,EAGf,2BAAiB;AA4BlB;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG,CACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,CAAC,EAAE,cAAc,KACrB,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AAEnC;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEvD;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,CAC1B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAE3B;IACE;;OAEG;IACH,OAAO,EAAE,IAAI,CAAC;CACf,GACD;IACE;;OAEG;IACH,OAAO,EAAE,KAAK,CAAC;IACf;;OAEG;IACH,KAAK,EAAE;QACL;;WAEG;QACH,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH,CAAC;AAKN;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAE9C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,GAAG,SAAS,CAE5D;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,aAAa,EACpB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CA2ItC"}
@@ -0,0 +1,81 @@
1
+ import type { McpResponse, HandlerOptions, RunStepsInput, RunStepsResult } from "../types/index.mjs";
2
+ /**
3
+ * Handler function type for executing MCP tools.
4
+ *
5
+ * @param input Tool arguments as key-value pairs
6
+ * @param options Optional handler configuration
7
+ * @returns Promise resolving to MCP response with tool result
8
+ */
9
+ export type ToolHandler = (input: Record<string, unknown>, options?: HandlerOptions) => Promise<McpResponse<unknown>>;
10
+ /**
11
+ * Registry mapping tool names to their handler functions.
12
+ *
13
+ * @returns Record of tool name to handler function mappings
14
+ */
15
+ export type ToolRegistry = Record<string, ToolHandler>;
16
+ /**
17
+ * Validator function type for validating tool arguments before execution.
18
+ *
19
+ * @param tool Tool name being validated
20
+ * @param args Tool arguments to validate
21
+ * @returns Validation result with success status and optional error details
22
+ */
23
+ export type ToolValidator = (tool: string, args: Record<string, unknown>) => {
24
+ /**
25
+ * Validation succeeded
26
+ */
27
+ success: true;
28
+ } | {
29
+ /**
30
+ * Validation failed
31
+ */
32
+ success: false;
33
+ /**
34
+ * Error details when validation fails
35
+ */
36
+ error: {
37
+ /**
38
+ * Error message describing validation failure
39
+ */
40
+ message: string;
41
+ };
42
+ };
43
+ /**
44
+ * Sets the global tool registry for batch execution.
45
+ *
46
+ * @param registry Tool registry mapping names to handlers
47
+ */
48
+ export declare function setToolRegistry(registry: ToolRegistry): void;
49
+ /**
50
+ * Gets the current global tool registry.
51
+ *
52
+ * @returns The current tool registry
53
+ */
54
+ export declare function getToolRegistry(): ToolRegistry;
55
+ /**
56
+ * Checks if the tool registry has any registered handlers.
57
+ *
58
+ * @returns True if registry contains handlers, false otherwise
59
+ */
60
+ export declare function hasToolRegistry(): boolean;
61
+ /**
62
+ * Sets the global tool validator for batch execution.
63
+ *
64
+ * @param validator Validator function to validate tool arguments
65
+ */
66
+ export declare function setToolValidator(validator: ToolValidator): void;
67
+ /**
68
+ * Gets the current global tool validator.
69
+ *
70
+ * @returns The current tool validator or undefined if not set
71
+ */
72
+ export declare function getToolValidator(): ToolValidator | undefined;
73
+ /**
74
+ * Executes multiple tool steps in sequence with optional validation and error handling.
75
+ *
76
+ * @param input Steps to execute with optional stop-on-error and observation policy
77
+ * @param options Optional handler configuration and observation policy override
78
+ * @returns Promise resolving to MCP response with step results and summary
79
+ */
80
+ export declare function handleRunSteps(input: RunStepsInput, options?: HandlerOptions): Promise<McpResponse<RunStepsResult>>;
81
+ //# sourceMappingURL=batch.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.d.mts","sourceRoot":"","sources":["../../../src/mcp-server/tools/batch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,aAAa,EACb,cAAc,EAGf,2BAAiB;AA4BlB;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG,CACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,CAAC,EAAE,cAAc,KACrB,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AAEnC;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEvD;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,CAC1B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAE3B;IACE;;OAEG;IACH,OAAO,EAAE,IAAI,CAAC;CACf,GACD;IACE;;OAEG;IACH,OAAO,EAAE,KAAK,CAAC;IACf;;OAEG;IACH,KAAK,EAAE;QACL;;WAEG;QACH,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH,CAAC;AAKN;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAE9C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,GAAG,SAAS,CAE5D;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,aAAa,EACpB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CA2ItC"}
@@ -0,0 +1,191 @@
1
+ import { getSessionManager } from "../session-manager.mjs";
2
+ import { ErrorCodes } from "../types/index.mjs";
3
+ import { createSuccessResponse, createErrorResponse, extractErrorMessage } from "../utils/index.mjs";
4
+ /**
5
+ * Maps includeObservations string to observation policy override.
6
+ *
7
+ * @param value The observation policy string ('none', 'failures', 'all', or undefined)
8
+ * @returns The mapped observation policy override
9
+ */
10
+ function mapIncludeObservationsToPolicy(value) {
11
+ switch (value) {
12
+ case 'none':
13
+ return 'none';
14
+ case 'failures':
15
+ return 'failures';
16
+ case 'all':
17
+ default:
18
+ return 'default';
19
+ }
20
+ }
21
+ let _toolRegistry = {};
22
+ let _toolValidator;
23
+ /**
24
+ * Sets the global tool registry for batch execution.
25
+ *
26
+ * @param registry Tool registry mapping names to handlers
27
+ */
28
+ export function setToolRegistry(registry) {
29
+ _toolRegistry = registry;
30
+ }
31
+ /**
32
+ * Gets the current global tool registry.
33
+ *
34
+ * @returns The current tool registry
35
+ */
36
+ export function getToolRegistry() {
37
+ return _toolRegistry;
38
+ }
39
+ /**
40
+ * Checks if the tool registry has any registered handlers.
41
+ *
42
+ * @returns True if registry contains handlers, false otherwise
43
+ */
44
+ export function hasToolRegistry() {
45
+ return Object.keys(_toolRegistry).length > 0;
46
+ }
47
+ /**
48
+ * Sets the global tool validator for batch execution.
49
+ *
50
+ * @param validator Validator function to validate tool arguments
51
+ */
52
+ export function setToolValidator(validator) {
53
+ _toolValidator = validator;
54
+ }
55
+ /**
56
+ * Gets the current global tool validator.
57
+ *
58
+ * @returns The current tool validator or undefined if not set
59
+ */
60
+ export function getToolValidator() {
61
+ return _toolValidator;
62
+ }
63
+ /**
64
+ * Executes multiple tool steps in sequence with optional validation and error handling.
65
+ *
66
+ * @param input Steps to execute with optional stop-on-error and observation policy
67
+ * @param options Optional handler configuration and observation policy override
68
+ * @returns Promise resolving to MCP response with step results and summary
69
+ */
70
+ export async function handleRunSteps(input, options) {
71
+ const batchStartTime = Date.now();
72
+ const sessionManager = getSessionManager();
73
+ const sessionId = sessionManager.getSessionId();
74
+ if (!sessionManager.hasActiveSession()) {
75
+ return createErrorResponse(ErrorCodes.MM_NO_ACTIVE_SESSION, 'No active session. Call launch first.', { input }, undefined, batchStartTime);
76
+ }
77
+ const { steps: stepInputs, stopOnError = false, includeObservations } = input;
78
+ const observationPolicy = mapIncludeObservationsToPolicy(includeObservations);
79
+ const stepResults = [];
80
+ let succeeded = 0;
81
+ let failed = 0;
82
+ const toolHandlers = getToolRegistry();
83
+ const toolValidator = getToolValidator();
84
+ for (const stepInput of stepInputs) {
85
+ const stepStartTime = Date.now();
86
+ const { tool, args = {} } = stepInput;
87
+ const handler = toolHandlers[tool];
88
+ if (!handler) {
89
+ const result = {
90
+ tool,
91
+ ok: false,
92
+ error: {
93
+ code: ErrorCodes.MM_UNKNOWN_TOOL,
94
+ message: `Unknown tool: ${tool}`,
95
+ },
96
+ meta: {
97
+ durationMs: Date.now() - stepStartTime,
98
+ timestamp: new Date().toISOString(),
99
+ },
100
+ };
101
+ stepResults.push(result);
102
+ failed += 1;
103
+ if (stopOnError) {
104
+ break;
105
+ }
106
+ continue;
107
+ }
108
+ if (toolValidator) {
109
+ const validation = toolValidator(tool, args);
110
+ if (!validation.success) {
111
+ const result = {
112
+ tool,
113
+ ok: false,
114
+ error: {
115
+ code: ErrorCodes.MM_INVALID_INPUT,
116
+ message: `Invalid input: ${validation.error.message}`,
117
+ },
118
+ meta: {
119
+ durationMs: Date.now() - stepStartTime,
120
+ timestamp: new Date().toISOString(),
121
+ },
122
+ };
123
+ stepResults.push(result);
124
+ failed += 1;
125
+ if (stopOnError) {
126
+ break;
127
+ }
128
+ continue;
129
+ }
130
+ }
131
+ try {
132
+ const stepOptions = {
133
+ ...options,
134
+ observationPolicy,
135
+ };
136
+ const response = await handler(args, stepOptions);
137
+ const result = {
138
+ tool,
139
+ ok: response.ok,
140
+ result: response.ok ? response.result : undefined,
141
+ error: response.ok ? undefined : response.error,
142
+ meta: {
143
+ durationMs: Date.now() - stepStartTime,
144
+ timestamp: new Date().toISOString(),
145
+ },
146
+ };
147
+ stepResults.push(result);
148
+ if (response.ok) {
149
+ succeeded += 1;
150
+ }
151
+ else {
152
+ failed += 1;
153
+ if (stopOnError) {
154
+ break;
155
+ }
156
+ }
157
+ }
158
+ catch (error) {
159
+ const message = extractErrorMessage(error);
160
+ const result = {
161
+ tool,
162
+ ok: false,
163
+ error: {
164
+ code: ErrorCodes.MM_INTERNAL_ERROR,
165
+ message: `Unexpected error: ${message}`,
166
+ },
167
+ meta: {
168
+ durationMs: Date.now() - stepStartTime,
169
+ timestamp: new Date().toISOString(),
170
+ },
171
+ };
172
+ stepResults.push(result);
173
+ failed += 1;
174
+ if (stopOnError) {
175
+ break;
176
+ }
177
+ }
178
+ }
179
+ const batchResult = {
180
+ steps: stepResults,
181
+ summary: {
182
+ ok: failed === 0,
183
+ total: stepResults.length,
184
+ succeeded,
185
+ failed,
186
+ durationMs: Date.now() - batchStartTime,
187
+ },
188
+ };
189
+ return createSuccessResponse(batchResult, sessionId, batchStartTime);
190
+ }
191
+ //# sourceMappingURL=batch.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.mjs","sourceRoot":"","sources":["../../../src/mcp-server/tools/batch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,+BAA8B;AAS1D,OAAO,EAAE,UAAU,EAAE,2BAAiB;AACtC,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACpB,2BAAiB;AAElB;;;;;GAKG;AACH,SAAS,8BAA8B,CACrC,KAA8C;IAE9C,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,UAAU;YACb,OAAO,UAAU,CAAC;QACpB,KAAK,KAAK,CAAC;QACX;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAsDD,IAAI,aAAa,GAAiB,EAAE,CAAC;AACrC,IAAI,cAAyC,CAAC;AAE9C;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,QAAsB;IACpD,aAAa,GAAG,QAAQ,CAAC;AAC3B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC/C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAwB;IACvD,cAAc,GAAG,SAAS,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAoB,EACpB,OAAwB;IAExB,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,cAAc,CAAC,YAAY,EAAE,CAAC;IAEhD,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE,EAAE,CAAC;QACvC,OAAO,mBAAmB,CACxB,UAAU,CAAC,oBAAoB,EAC/B,uCAAuC,EACvC,EAAE,KAAK,EAAE,EACT,SAAS,EACT,cAAc,CACf,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,GAAG,KAAK,EAAE,mBAAmB,EAAE,GAAG,KAAK,CAAC;IAC9E,MAAM,iBAAiB,GAAG,8BAA8B,CAAC,mBAAmB,CAAC,CAAC;IAC9E,MAAM,WAAW,GAAiB,EAAE,CAAC;IACrC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IAEzC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACjC,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,SAAS,CAAC;QAEtC,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,MAAM,GAAe;gBACzB,IAAI;gBACJ,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE;oBACL,IAAI,EAAE,UAAU,CAAC,eAAe;oBAChC,OAAO,EAAE,iBAAiB,IAAI,EAAE;iBACjC;gBACD,IAAI,EAAE;oBACJ,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa;oBACtC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC;aACF,CAAC;YACF,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzB,MAAM,IAAI,CAAC,CAAC;YAEZ,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM;YACR,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACxB,MAAM,MAAM,GAAe;oBACzB,IAAI;oBACJ,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE;wBACL,IAAI,EAAE,UAAU,CAAC,gBAAgB;wBACjC,OAAO,EAAE,kBAAkB,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE;qBACtD;oBACD,IAAI,EAAE;wBACJ,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa;wBACtC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;qBACpC;iBACF,CAAC;gBACF,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACzB,MAAM,IAAI,CAAC,CAAC;gBAEZ,IAAI,WAAW,EAAE,CAAC;oBAChB,MAAM;gBACR,CAAC;gBACD,SAAS;YACX,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,WAAW,GAAmB;gBAClC,GAAG,OAAO;gBACV,iBAAiB;aAClB,CAAC;YACF,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAElD,MAAM,MAAM,GAAe;gBACzB,IAAI;gBACJ,EAAE,EAAE,QAAQ,CAAC,EAAE;gBACf,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBACjD,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK;gBAC/C,IAAI,EAAE;oBACJ,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa;oBACtC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC;aACF,CAAC;YAEF,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEzB,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAChB,SAAS,IAAI,CAAC,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,CAAC;gBACZ,IAAI,WAAW,EAAE,CAAC;oBAChB,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAe;gBACzB,IAAI;gBACJ,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE;oBACL,IAAI,EAAE,UAAU,CAAC,iBAAiB;oBAClC,OAAO,EAAE,qBAAqB,OAAO,EAAE;iBACxC;gBACD,IAAI,EAAE;oBACJ,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa;oBACtC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC;aACF,CAAC;YACF,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzB,MAAM,IAAI,CAAC,CAAC;YAEZ,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAmB;QAClC,KAAK,EAAE,WAAW;QAClB,OAAO,EAAE;YACP,EAAE,EAAE,MAAM,KAAK,CAAC;YAChB,KAAK,EAAE,WAAW,CAAC,MAAM;YACzB,SAAS;YACT,MAAM;YACN,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc;SACxC;KACF,CAAC;IAEF,OAAO,qBAAqB,CAAC,WAAW,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;AACvE,CAAC","sourcesContent":["import { getSessionManager } from '../session-manager.js';\nimport type {\n McpResponse,\n HandlerOptions,\n RunStepsInput,\n RunStepsResult,\n StepResult,\n ObservationPolicyOverride,\n} from '../types';\nimport { ErrorCodes } from '../types';\nimport {\n createSuccessResponse,\n createErrorResponse,\n extractErrorMessage,\n} from '../utils';\n\n/**\n * Maps includeObservations string to observation policy override.\n *\n * @param value The observation policy string ('none', 'failures', 'all', or undefined)\n * @returns The mapped observation policy override\n */\nfunction mapIncludeObservationsToPolicy(\n value: 'none' | 'failures' | 'all' | undefined,\n): ObservationPolicyOverride {\n switch (value) {\n case 'none':\n return 'none';\n case 'failures':\n return 'failures';\n case 'all':\n default:\n return 'default';\n }\n}\n\n/**\n * Handler function type for executing MCP tools.\n *\n * @param input Tool arguments as key-value pairs\n * @param options Optional handler configuration\n * @returns Promise resolving to MCP response with tool result\n */\nexport type ToolHandler = (\n input: Record<string, unknown>,\n options?: HandlerOptions,\n) => Promise<McpResponse<unknown>>;\n\n/**\n * Registry mapping tool names to their handler functions.\n *\n * @returns Record of tool name to handler function mappings\n */\nexport type ToolRegistry = Record<string, ToolHandler>;\n\n/**\n * Validator function type for validating tool arguments before execution.\n *\n * @param tool Tool name being validated\n * @param args Tool arguments to validate\n * @returns Validation result with success status and optional error details\n */\nexport type ToolValidator = (\n tool: string,\n args: Record<string, unknown>,\n) =>\n | {\n /**\n * Validation succeeded\n */\n success: true;\n }\n | {\n /**\n * Validation failed\n */\n success: false;\n /**\n * Error details when validation fails\n */\n error: {\n /**\n * Error message describing validation failure\n */\n message: string;\n };\n };\n\nlet _toolRegistry: ToolRegistry = {};\nlet _toolValidator: ToolValidator | undefined;\n\n/**\n * Sets the global tool registry for batch execution.\n *\n * @param registry Tool registry mapping names to handlers\n */\nexport function setToolRegistry(registry: ToolRegistry): void {\n _toolRegistry = registry;\n}\n\n/**\n * Gets the current global tool registry.\n *\n * @returns The current tool registry\n */\nexport function getToolRegistry(): ToolRegistry {\n return _toolRegistry;\n}\n\n/**\n * Checks if the tool registry has any registered handlers.\n *\n * @returns True if registry contains handlers, false otherwise\n */\nexport function hasToolRegistry(): boolean {\n return Object.keys(_toolRegistry).length > 0;\n}\n\n/**\n * Sets the global tool validator for batch execution.\n *\n * @param validator Validator function to validate tool arguments\n */\nexport function setToolValidator(validator: ToolValidator): void {\n _toolValidator = validator;\n}\n\n/**\n * Gets the current global tool validator.\n *\n * @returns The current tool validator or undefined if not set\n */\nexport function getToolValidator(): ToolValidator | undefined {\n return _toolValidator;\n}\n\n/**\n * Executes multiple tool steps in sequence with optional validation and error handling.\n *\n * @param input Steps to execute with optional stop-on-error and observation policy\n * @param options Optional handler configuration and observation policy override\n * @returns Promise resolving to MCP response with step results and summary\n */\nexport async function handleRunSteps(\n input: RunStepsInput,\n options?: HandlerOptions,\n): Promise<McpResponse<RunStepsResult>> {\n const batchStartTime = Date.now();\n const sessionManager = getSessionManager();\n const sessionId = sessionManager.getSessionId();\n\n if (!sessionManager.hasActiveSession()) {\n return createErrorResponse(\n ErrorCodes.MM_NO_ACTIVE_SESSION,\n 'No active session. Call launch first.',\n { input },\n undefined,\n batchStartTime,\n );\n }\n\n const { steps: stepInputs, stopOnError = false, includeObservations } = input;\n const observationPolicy = mapIncludeObservationsToPolicy(includeObservations);\n const stepResults: StepResult[] = [];\n let succeeded = 0;\n let failed = 0;\n\n const toolHandlers = getToolRegistry();\n const toolValidator = getToolValidator();\n\n for (const stepInput of stepInputs) {\n const stepStartTime = Date.now();\n const { tool, args = {} } = stepInput;\n\n const handler = toolHandlers[tool];\n if (!handler) {\n const result: StepResult = {\n tool,\n ok: false,\n error: {\n code: ErrorCodes.MM_UNKNOWN_TOOL,\n message: `Unknown tool: ${tool}`,\n },\n meta: {\n durationMs: Date.now() - stepStartTime,\n timestamp: new Date().toISOString(),\n },\n };\n stepResults.push(result);\n failed += 1;\n\n if (stopOnError) {\n break;\n }\n continue;\n }\n\n if (toolValidator) {\n const validation = toolValidator(tool, args);\n if (!validation.success) {\n const result: StepResult = {\n tool,\n ok: false,\n error: {\n code: ErrorCodes.MM_INVALID_INPUT,\n message: `Invalid input: ${validation.error.message}`,\n },\n meta: {\n durationMs: Date.now() - stepStartTime,\n timestamp: new Date().toISOString(),\n },\n };\n stepResults.push(result);\n failed += 1;\n\n if (stopOnError) {\n break;\n }\n continue;\n }\n }\n\n try {\n const stepOptions: HandlerOptions = {\n ...options,\n observationPolicy,\n };\n const response = await handler(args, stepOptions);\n\n const result: StepResult = {\n tool,\n ok: response.ok,\n result: response.ok ? response.result : undefined,\n error: response.ok ? undefined : response.error,\n meta: {\n durationMs: Date.now() - stepStartTime,\n timestamp: new Date().toISOString(),\n },\n };\n\n stepResults.push(result);\n\n if (response.ok) {\n succeeded += 1;\n } else {\n failed += 1;\n if (stopOnError) {\n break;\n }\n }\n } catch (error) {\n const message = extractErrorMessage(error);\n const result: StepResult = {\n tool,\n ok: false,\n error: {\n code: ErrorCodes.MM_INTERNAL_ERROR,\n message: `Unexpected error: ${message}`,\n },\n meta: {\n durationMs: Date.now() - stepStartTime,\n timestamp: new Date().toISOString(),\n },\n };\n stepResults.push(result);\n failed += 1;\n\n if (stopOnError) {\n break;\n }\n }\n }\n\n const batchResult: RunStepsResult = {\n steps: stepResults,\n summary: {\n ok: failed === 0,\n total: stepResults.length,\n succeeded,\n failed,\n durationMs: Date.now() - batchStartTime,\n },\n };\n\n return createSuccessResponse(batchResult, sessionId, batchStartTime);\n}\n"]}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleBuild = handleBuild;
4
+ const types_1 = require("../types/index.cjs");
5
+ const utils_1 = require("../utils/index.cjs");
6
+ /**
7
+ * Handles the build tool request to build the extension.
8
+ *
9
+ * @param input Build configuration with optional buildType and force flag
10
+ * @param options Optional handler options with build capability
11
+ * @returns Promise resolving to MCP response with build result
12
+ */
13
+ async function handleBuild(input, options) {
14
+ const startTime = Date.now();
15
+ if (options?.buildCapability) {
16
+ return handleBuildWithCapability(input, options.buildCapability, startTime);
17
+ }
18
+ return (0, utils_1.createErrorResponse)(types_1.ErrorCodes.MM_CAPABILITY_NOT_AVAILABLE, 'BuildCapability not available. The mm_build tool requires either: (1) running in e2e mode with the MetaMask extension wrapper, or (2) running directly in the metamask-extension repository with dependencies installed.', { capability: 'BuildCapability' }, undefined, startTime);
19
+ }
20
+ /**
21
+ * Handles build using the provided build capability.
22
+ *
23
+ * @param input Build configuration with optional buildType and force flag
24
+ * @param buildCapability Build capability instance for executing the build
25
+ * @param startTime Timestamp when the operation started
26
+ * @returns Promise resolving to MCP response with build result
27
+ */
28
+ async function handleBuildWithCapability(input, buildCapability, startTime) {
29
+ try {
30
+ const result = await buildCapability.build({
31
+ buildType: input.buildType,
32
+ force: input.force,
33
+ });
34
+ if (!result.success) {
35
+ return (0, utils_1.createErrorResponse)(types_1.ErrorCodes.MM_BUILD_FAILED, `Build failed: ${result.error ?? 'Unknown error'}`, { buildType: input.buildType ?? 'build:test' }, undefined, startTime);
36
+ }
37
+ return (0, utils_1.createSuccessResponse)({
38
+ buildType: input.buildType ?? 'build:test',
39
+ extensionPathResolved: result.extensionPath,
40
+ }, undefined, startTime);
41
+ }
42
+ catch (error) {
43
+ const message = (0, utils_1.extractErrorMessage)(error);
44
+ return (0, utils_1.createErrorResponse)(types_1.ErrorCodes.MM_BUILD_FAILED, `Build failed: ${message}`, { buildType: input.buildType ?? 'build:test' }, undefined, startTime);
45
+ }
46
+ }
47
+ //# sourceMappingURL=build.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.cjs","sourceRoot":"","sources":["../../../src/mcp-server/tools/build.ts"],"names":[],"mappings":";;AAiCA,kCAiBC;AA3CD,8CAAsC;AACtC,8CAIkB;AAclB;;;;;;GAMG;AACI,KAAK,UAAU,WAAW,CAC/B,KAAiB,EACjB,OAA0B;IAE1B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,OAAO,EAAE,eAAe,EAAE,CAAC;QAC7B,OAAO,yBAAyB,CAAC,KAAK,EAAE,OAAO,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,IAAA,2BAAmB,EACxB,kBAAU,CAAC,2BAA2B,EACtC,0NAA0N,EAC1N,EAAE,UAAU,EAAE,iBAAiB,EAAE,EACjC,SAAS,EACT,SAAS,CACV,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,yBAAyB,CACtC,KAAiB,EACjB,eAAgC,EAChC,SAAiB;IAEjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC;YACzC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,IAAA,2BAAmB,EACxB,kBAAU,CAAC,eAAe,EAC1B,iBAAiB,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,EAClD,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,YAAY,EAAE,EAC9C,SAAS,EACT,SAAS,CACV,CAAC;QACJ,CAAC;QAED,OAAO,IAAA,6BAAqB,EAC1B;YACE,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,YAAY;YAC1C,qBAAqB,EAAE,MAAM,CAAC,aAAa;SAC5C,EACD,SAAS,EACT,SAAS,CACV,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,IAAA,2BAAmB,EAAC,KAAK,CAAC,CAAC;QAC3C,OAAO,IAAA,2BAAmB,EACxB,kBAAU,CAAC,eAAe,EAC1B,iBAAiB,OAAO,EAAE,EAC1B,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,YAAY,EAAE,EAC9C,SAAS,EACT,SAAS,CACV,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["import type { BuildCapability } from '../../capabilities/types.js';\nimport type {\n BuildInput,\n BuildToolResult,\n McpResponse,\n HandlerOptions,\n} from '../types';\nimport { ErrorCodes } from '../types';\nimport {\n createSuccessResponse,\n createErrorResponse,\n extractErrorMessage,\n} from '../utils';\n\n/**\n * Options for the build tool handler.\n *\n * @returns Handler options with optional build capability\n */\nexport type BuildToolOptions = HandlerOptions & {\n /**\n * Optional build capability for extension building\n */\n buildCapability?: BuildCapability;\n};\n\n/**\n * Handles the build tool request to build the extension.\n *\n * @param input Build configuration with optional buildType and force flag\n * @param options Optional handler options with build capability\n * @returns Promise resolving to MCP response with build result\n */\nexport async function handleBuild(\n input: BuildInput,\n options?: BuildToolOptions,\n): Promise<McpResponse<BuildToolResult>> {\n const startTime = Date.now();\n\n if (options?.buildCapability) {\n return handleBuildWithCapability(input, options.buildCapability, startTime);\n }\n\n return createErrorResponse(\n ErrorCodes.MM_CAPABILITY_NOT_AVAILABLE,\n 'BuildCapability not available. The mm_build tool requires either: (1) running in e2e mode with the MetaMask extension wrapper, or (2) running directly in the metamask-extension repository with dependencies installed.',\n { capability: 'BuildCapability' },\n undefined,\n startTime,\n );\n}\n\n/**\n * Handles build using the provided build capability.\n *\n * @param input Build configuration with optional buildType and force flag\n * @param buildCapability Build capability instance for executing the build\n * @param startTime Timestamp when the operation started\n * @returns Promise resolving to MCP response with build result\n */\nasync function handleBuildWithCapability(\n input: BuildInput,\n buildCapability: BuildCapability,\n startTime: number,\n): Promise<McpResponse<BuildToolResult>> {\n try {\n const result = await buildCapability.build({\n buildType: input.buildType,\n force: input.force,\n });\n\n if (!result.success) {\n return createErrorResponse(\n ErrorCodes.MM_BUILD_FAILED,\n `Build failed: ${result.error ?? 'Unknown error'}`,\n { buildType: input.buildType ?? 'build:test' },\n undefined,\n startTime,\n );\n }\n\n return createSuccessResponse<BuildToolResult>(\n {\n buildType: input.buildType ?? 'build:test',\n extensionPathResolved: result.extensionPath,\n },\n undefined,\n startTime,\n );\n } catch (error) {\n const message = extractErrorMessage(error);\n return createErrorResponse(\n ErrorCodes.MM_BUILD_FAILED,\n `Build failed: ${message}`,\n { buildType: input.buildType ?? 'build:test' },\n undefined,\n startTime,\n );\n }\n}\n"]}