@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.
- package/CHANGELOG.md +17 -0
- package/LICENSE +6 -0
- package/LICENSE.APACHE2 +201 -0
- package/LICENSE.MIT +21 -0
- package/README.md +1459 -0
- package/dist/capabilities/context.cjs +34 -0
- package/dist/capabilities/context.cjs.map +1 -0
- package/dist/capabilities/context.d.cts +101 -0
- package/dist/capabilities/context.d.cts.map +1 -0
- package/dist/capabilities/context.d.mts +101 -0
- package/dist/capabilities/context.d.mts.map +1 -0
- package/dist/capabilities/context.mjs +29 -0
- package/dist/capabilities/context.mjs.map +1 -0
- package/dist/capabilities/index.cjs +18 -0
- package/dist/capabilities/index.cjs.map +1 -0
- package/dist/capabilities/index.d.cts +3 -0
- package/dist/capabilities/index.d.cts.map +1 -0
- package/dist/capabilities/index.d.mts +3 -0
- package/dist/capabilities/index.d.mts.map +1 -0
- package/dist/capabilities/index.mjs +2 -0
- package/dist/capabilities/index.mjs.map +1 -0
- package/dist/capabilities/types.cjs +3 -0
- package/dist/capabilities/types.cjs.map +1 -0
- package/dist/capabilities/types.d.cts +152 -0
- package/dist/capabilities/types.d.cts.map +1 -0
- package/dist/capabilities/types.d.mts +152 -0
- package/dist/capabilities/types.d.mts.map +1 -0
- package/dist/capabilities/types.mjs +2 -0
- package/dist/capabilities/types.mjs.map +1 -0
- package/dist/index.cjs +59 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +33 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.mts +33 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +43 -0
- package/dist/index.mjs.map +1 -0
- package/dist/launcher/console-error-buffer.cjs +72 -0
- package/dist/launcher/console-error-buffer.cjs.map +1 -0
- package/dist/launcher/console-error-buffer.d.cts +43 -0
- package/dist/launcher/console-error-buffer.d.cts.map +1 -0
- package/dist/launcher/console-error-buffer.d.mts +43 -0
- package/dist/launcher/console-error-buffer.d.mts.map +1 -0
- package/dist/launcher/console-error-buffer.mjs +68 -0
- package/dist/launcher/console-error-buffer.mjs.map +1 -0
- package/dist/launcher/extension-id-resolver.cjs +177 -0
- package/dist/launcher/extension-id-resolver.cjs.map +1 -0
- package/dist/launcher/extension-id-resolver.d.cts +32 -0
- package/dist/launcher/extension-id-resolver.d.cts.map +1 -0
- package/dist/launcher/extension-id-resolver.d.mts +32 -0
- package/dist/launcher/extension-id-resolver.d.mts.map +1 -0
- package/dist/launcher/extension-id-resolver.mjs +173 -0
- package/dist/launcher/extension-id-resolver.mjs.map +1 -0
- package/dist/launcher/extension-readiness.cjs +50 -0
- package/dist/launcher/extension-readiness.cjs.map +1 -0
- package/dist/launcher/extension-readiness.d.cts +37 -0
- package/dist/launcher/extension-readiness.d.cts.map +1 -0
- package/dist/launcher/extension-readiness.d.mts +37 -0
- package/dist/launcher/extension-readiness.d.mts.map +1 -0
- package/dist/launcher/extension-readiness.mjs +43 -0
- package/dist/launcher/extension-readiness.mjs.map +1 -0
- package/dist/launcher/index.cjs +21 -0
- package/dist/launcher/index.cjs.map +1 -0
- package/dist/launcher/index.d.cts +5 -0
- package/dist/launcher/index.d.cts.map +1 -0
- package/dist/launcher/index.d.mts +5 -0
- package/dist/launcher/index.d.mts.map +1 -0
- package/dist/launcher/index.mjs +5 -0
- package/dist/launcher/index.mjs.map +1 -0
- package/dist/launcher/retry.cjs +35 -0
- package/dist/launcher/retry.cjs.map +1 -0
- package/dist/launcher/retry.d.cts +20 -0
- package/dist/launcher/retry.d.cts.map +1 -0
- package/dist/launcher/retry.d.mts +20 -0
- package/dist/launcher/retry.d.mts.map +1 -0
- package/dist/launcher/retry.mjs +31 -0
- package/dist/launcher/retry.mjs.map +1 -0
- package/dist/mcp-server/constants.cjs +22 -0
- package/dist/mcp-server/constants.cjs.map +1 -0
- package/dist/mcp-server/constants.d.cts +13 -0
- package/dist/mcp-server/constants.d.cts.map +1 -0
- package/dist/mcp-server/constants.d.mts +13 -0
- package/dist/mcp-server/constants.d.mts.map +1 -0
- package/dist/mcp-server/constants.mjs +19 -0
- package/dist/mcp-server/constants.mjs.map +1 -0
- package/dist/mcp-server/discovery.cjs +299 -0
- package/dist/mcp-server/discovery.cjs.map +1 -0
- package/dist/mcp-server/discovery.d.cts +56 -0
- package/dist/mcp-server/discovery.d.cts.map +1 -0
- package/dist/mcp-server/discovery.d.mts +56 -0
- package/dist/mcp-server/discovery.d.mts.map +1 -0
- package/dist/mcp-server/discovery.mjs +292 -0
- package/dist/mcp-server/discovery.mjs.map +1 -0
- package/dist/mcp-server/knowledge-store.cjs +1196 -0
- package/dist/mcp-server/knowledge-store.cjs.map +1 -0
- package/dist/mcp-server/knowledge-store.d.cts +249 -0
- package/dist/mcp-server/knowledge-store.d.cts.map +1 -0
- package/dist/mcp-server/knowledge-store.d.mts +249 -0
- package/dist/mcp-server/knowledge-store.d.mts.map +1 -0
- package/dist/mcp-server/knowledge-store.mjs +1154 -0
- package/dist/mcp-server/knowledge-store.mjs.map +1 -0
- package/dist/mcp-server/schemas.cjs +433 -0
- package/dist/mcp-server/schemas.cjs.map +1 -0
- package/dist/mcp-server/schemas.d.cts +557 -0
- package/dist/mcp-server/schemas.d.cts.map +1 -0
- package/dist/mcp-server/schemas.d.mts +557 -0
- package/dist/mcp-server/schemas.d.mts.map +1 -0
- package/dist/mcp-server/schemas.mjs +430 -0
- package/dist/mcp-server/schemas.mjs.map +1 -0
- package/dist/mcp-server/server.cjs +161 -0
- package/dist/mcp-server/server.cjs.map +1 -0
- package/dist/mcp-server/server.d.cts +24 -0
- package/dist/mcp-server/server.d.cts.map +1 -0
- package/dist/mcp-server/server.d.mts +24 -0
- package/dist/mcp-server/server.d.mts.map +1 -0
- package/dist/mcp-server/server.mjs +158 -0
- package/dist/mcp-server/server.mjs.map +1 -0
- package/dist/mcp-server/session-manager.cjs +53 -0
- package/dist/mcp-server/session-manager.cjs.map +1 -0
- package/dist/mcp-server/session-manager.d.cts +240 -0
- package/dist/mcp-server/session-manager.d.cts.map +1 -0
- package/dist/mcp-server/session-manager.d.mts +240 -0
- package/dist/mcp-server/session-manager.d.mts.map +1 -0
- package/dist/mcp-server/session-manager.mjs +48 -0
- package/dist/mcp-server/session-manager.mjs.map +1 -0
- package/dist/mcp-server/test-utils/flush-promises.cjs +10 -0
- package/dist/mcp-server/test-utils/flush-promises.cjs.map +1 -0
- package/dist/mcp-server/test-utils/flush-promises.d.cts +2 -0
- package/dist/mcp-server/test-utils/flush-promises.d.cts.map +1 -0
- package/dist/mcp-server/test-utils/flush-promises.d.mts +2 -0
- package/dist/mcp-server/test-utils/flush-promises.d.mts.map +1 -0
- package/dist/mcp-server/test-utils/flush-promises.mjs +7 -0
- package/dist/mcp-server/test-utils/flush-promises.mjs.map +1 -0
- package/dist/mcp-server/test-utils/index.cjs +13 -0
- package/dist/mcp-server/test-utils/index.cjs.map +1 -0
- package/dist/mcp-server/test-utils/index.d.cts +4 -0
- package/dist/mcp-server/test-utils/index.d.cts.map +1 -0
- package/dist/mcp-server/test-utils/index.d.mts +4 -0
- package/dist/mcp-server/test-utils/index.d.mts.map +1 -0
- package/dist/mcp-server/test-utils/index.mjs +4 -0
- package/dist/mcp-server/test-utils/index.mjs.map +1 -0
- package/dist/mcp-server/test-utils/mock-factories.cjs +129 -0
- package/dist/mcp-server/test-utils/mock-factories.cjs.map +1 -0
- package/dist/mcp-server/test-utils/mock-factories.d.cts +89 -0
- package/dist/mcp-server/test-utils/mock-factories.d.cts.map +1 -0
- package/dist/mcp-server/test-utils/mock-factories.d.mts +89 -0
- package/dist/mcp-server/test-utils/mock-factories.d.mts.map +1 -0
- package/dist/mcp-server/test-utils/mock-factories.mjs +125 -0
- package/dist/mcp-server/test-utils/mock-factories.mjs.map +1 -0
- package/dist/mcp-server/test-utils/mock-playwright.cjs +205 -0
- package/dist/mcp-server/test-utils/mock-playwright.cjs.map +1 -0
- package/dist/mcp-server/test-utils/mock-playwright.d.cts +69 -0
- package/dist/mcp-server/test-utils/mock-playwright.d.cts.map +1 -0
- package/dist/mcp-server/test-utils/mock-playwright.d.mts +69 -0
- package/dist/mcp-server/test-utils/mock-playwright.d.mts.map +1 -0
- package/dist/mcp-server/test-utils/mock-playwright.mjs +200 -0
- package/dist/mcp-server/test-utils/mock-playwright.mjs.map +1 -0
- package/dist/mcp-server/tokenization.cjs +117 -0
- package/dist/mcp-server/tokenization.cjs.map +1 -0
- package/dist/mcp-server/tokenization.d.cts +22 -0
- package/dist/mcp-server/tokenization.d.cts.map +1 -0
- package/dist/mcp-server/tokenization.d.mts +22 -0
- package/dist/mcp-server/tokenization.d.mts.map +1 -0
- package/dist/mcp-server/tokenization.mjs +112 -0
- package/dist/mcp-server/tokenization.mjs.map +1 -0
- package/dist/mcp-server/tools/batch.cjs +199 -0
- package/dist/mcp-server/tools/batch.cjs.map +1 -0
- package/dist/mcp-server/tools/batch.d.cts +81 -0
- package/dist/mcp-server/tools/batch.d.cts.map +1 -0
- package/dist/mcp-server/tools/batch.d.mts +81 -0
- package/dist/mcp-server/tools/batch.d.mts.map +1 -0
- package/dist/mcp-server/tools/batch.mjs +191 -0
- package/dist/mcp-server/tools/batch.mjs.map +1 -0
- package/dist/mcp-server/tools/build.cjs +47 -0
- package/dist/mcp-server/tools/build.cjs.map +1 -0
- package/dist/mcp-server/tools/build.d.cts +22 -0
- package/dist/mcp-server/tools/build.d.cts.map +1 -0
- package/dist/mcp-server/tools/build.d.mts +22 -0
- package/dist/mcp-server/tools/build.d.mts.map +1 -0
- package/dist/mcp-server/tools/build.mjs +44 -0
- package/dist/mcp-server/tools/build.mjs.map +1 -0
- package/dist/mcp-server/tools/cleanup.cjs +20 -0
- package/dist/mcp-server/tools/cleanup.cjs.map +1 -0
- package/dist/mcp-server/tools/cleanup.d.cts +10 -0
- package/dist/mcp-server/tools/cleanup.d.cts.map +1 -0
- package/dist/mcp-server/tools/cleanup.d.mts +10 -0
- package/dist/mcp-server/tools/cleanup.d.mts.map +1 -0
- package/dist/mcp-server/tools/cleanup.mjs +17 -0
- package/dist/mcp-server/tools/cleanup.mjs.map +1 -0
- package/dist/mcp-server/tools/clipboard.cjs +100 -0
- package/dist/mcp-server/tools/clipboard.cjs.map +1 -0
- package/dist/mcp-server/tools/clipboard.d.cts +16 -0
- package/dist/mcp-server/tools/clipboard.d.cts.map +1 -0
- package/dist/mcp-server/tools/clipboard.d.mts +16 -0
- package/dist/mcp-server/tools/clipboard.d.mts.map +1 -0
- package/dist/mcp-server/tools/clipboard.mjs +97 -0
- package/dist/mcp-server/tools/clipboard.mjs.map +1 -0
- package/dist/mcp-server/tools/context.cjs +66 -0
- package/dist/mcp-server/tools/context.cjs.map +1 -0
- package/dist/mcp-server/tools/context.d.cts +35 -0
- package/dist/mcp-server/tools/context.d.cts.map +1 -0
- package/dist/mcp-server/tools/context.d.mts +35 -0
- package/dist/mcp-server/tools/context.d.mts.map +1 -0
- package/dist/mcp-server/tools/context.mjs +62 -0
- package/dist/mcp-server/tools/context.mjs.map +1 -0
- package/dist/mcp-server/tools/definitions.cjs +463 -0
- package/dist/mcp-server/tools/definitions.cjs.map +1 -0
- package/dist/mcp-server/tools/definitions.d.cts +97 -0
- package/dist/mcp-server/tools/definitions.d.cts.map +1 -0
- package/dist/mcp-server/tools/definitions.d.mts +97 -0
- package/dist/mcp-server/tools/definitions.d.mts.map +1 -0
- package/dist/mcp-server/tools/definitions.mjs +451 -0
- package/dist/mcp-server/tools/definitions.mjs.map +1 -0
- package/dist/mcp-server/tools/discovery-tools.cjs +162 -0
- package/dist/mcp-server/tools/discovery-tools.cjs.map +1 -0
- package/dist/mcp-server/tools/discovery-tools.d.cts +26 -0
- package/dist/mcp-server/tools/discovery-tools.d.cts.map +1 -0
- package/dist/mcp-server/tools/discovery-tools.d.mts +26 -0
- package/dist/mcp-server/tools/discovery-tools.d.mts.map +1 -0
- package/dist/mcp-server/tools/discovery-tools.mjs +157 -0
- package/dist/mcp-server/tools/discovery-tools.mjs.map +1 -0
- package/dist/mcp-server/tools/error-classification.cjs +296 -0
- package/dist/mcp-server/tools/error-classification.cjs.map +1 -0
- package/dist/mcp-server/tools/error-classification.d.cts +135 -0
- package/dist/mcp-server/tools/error-classification.d.cts.map +1 -0
- package/dist/mcp-server/tools/error-classification.d.mts +135 -0
- package/dist/mcp-server/tools/error-classification.d.mts.map +1 -0
- package/dist/mcp-server/tools/error-classification.mjs +281 -0
- package/dist/mcp-server/tools/error-classification.mjs.map +1 -0
- package/dist/mcp-server/tools/helpers.cjs +149 -0
- package/dist/mcp-server/tools/helpers.cjs.map +1 -0
- package/dist/mcp-server/tools/helpers.d.cts +149 -0
- package/dist/mcp-server/tools/helpers.d.cts.map +1 -0
- package/dist/mcp-server/tools/helpers.d.mts +149 -0
- package/dist/mcp-server/tools/helpers.d.mts.map +1 -0
- package/dist/mcp-server/tools/helpers.mjs +141 -0
- package/dist/mcp-server/tools/helpers.mjs.map +1 -0
- package/dist/mcp-server/tools/index.cjs +27 -0
- package/dist/mcp-server/tools/index.cjs.map +1 -0
- package/dist/mcp-server/tools/index.d.cts +11 -0
- package/dist/mcp-server/tools/index.d.cts.map +1 -0
- package/dist/mcp-server/tools/index.d.mts +11 -0
- package/dist/mcp-server/tools/index.d.mts.map +1 -0
- package/dist/mcp-server/tools/index.mjs +11 -0
- package/dist/mcp-server/tools/index.mjs.map +1 -0
- package/dist/mcp-server/tools/interaction.cjs +190 -0
- package/dist/mcp-server/tools/interaction.cjs.map +1 -0
- package/dist/mcp-server/tools/interaction.d.cts +26 -0
- package/dist/mcp-server/tools/interaction.d.cts.map +1 -0
- package/dist/mcp-server/tools/interaction.d.mts +26 -0
- package/dist/mcp-server/tools/interaction.d.mts.map +1 -0
- package/dist/mcp-server/tools/interaction.mjs +185 -0
- package/dist/mcp-server/tools/interaction.mjs.map +1 -0
- package/dist/mcp-server/tools/knowledge.cjs +120 -0
- package/dist/mcp-server/tools/knowledge.cjs.map +1 -0
- package/dist/mcp-server/tools/knowledge.d.cts +34 -0
- package/dist/mcp-server/tools/knowledge.d.cts.map +1 -0
- package/dist/mcp-server/tools/knowledge.d.mts +34 -0
- package/dist/mcp-server/tools/knowledge.d.mts.map +1 -0
- package/dist/mcp-server/tools/knowledge.mjs +114 -0
- package/dist/mcp-server/tools/knowledge.mjs.map +1 -0
- package/dist/mcp-server/tools/launch.cjs +51 -0
- package/dist/mcp-server/tools/launch.cjs.map +1 -0
- package/dist/mcp-server/tools/launch.d.cts +10 -0
- package/dist/mcp-server/tools/launch.d.cts.map +1 -0
- package/dist/mcp-server/tools/launch.d.mts +10 -0
- package/dist/mcp-server/tools/launch.d.mts.map +1 -0
- package/dist/mcp-server/tools/launch.mjs +48 -0
- package/dist/mcp-server/tools/launch.mjs.map +1 -0
- package/dist/mcp-server/tools/navigation.cjs +242 -0
- package/dist/mcp-server/tools/navigation.cjs.map +1 -0
- package/dist/mcp-server/tools/navigation.d.cts +34 -0
- package/dist/mcp-server/tools/navigation.d.cts.map +1 -0
- package/dist/mcp-server/tools/navigation.d.mts +34 -0
- package/dist/mcp-server/tools/navigation.d.mts.map +1 -0
- package/dist/mcp-server/tools/navigation.mjs +236 -0
- package/dist/mcp-server/tools/navigation.mjs.map +1 -0
- package/dist/mcp-server/tools/registry.cjs +10 -0
- package/dist/mcp-server/tools/registry.cjs.map +1 -0
- package/dist/mcp-server/tools/registry.d.cts +4 -0
- package/dist/mcp-server/tools/registry.d.cts.map +1 -0
- package/dist/mcp-server/tools/registry.d.mts +4 -0
- package/dist/mcp-server/tools/registry.d.mts.map +1 -0
- package/dist/mcp-server/tools/registry.mjs +4 -0
- package/dist/mcp-server/tools/registry.mjs.map +1 -0
- package/dist/mcp-server/tools/run-tool.cjs +140 -0
- package/dist/mcp-server/tools/run-tool.cjs.map +1 -0
- package/dist/mcp-server/tools/run-tool.d.cts +39 -0
- package/dist/mcp-server/tools/run-tool.d.cts.map +1 -0
- package/dist/mcp-server/tools/run-tool.d.mts +39 -0
- package/dist/mcp-server/tools/run-tool.d.mts.map +1 -0
- package/dist/mcp-server/tools/run-tool.mjs +137 -0
- package/dist/mcp-server/tools/run-tool.mjs.map +1 -0
- package/dist/mcp-server/tools/screenshot.cjs +55 -0
- package/dist/mcp-server/tools/screenshot.cjs.map +1 -0
- package/dist/mcp-server/tools/screenshot.d.cts +10 -0
- package/dist/mcp-server/tools/screenshot.d.cts.map +1 -0
- package/dist/mcp-server/tools/screenshot.d.mts +10 -0
- package/dist/mcp-server/tools/screenshot.d.mts.map +1 -0
- package/dist/mcp-server/tools/screenshot.mjs +52 -0
- package/dist/mcp-server/tools/screenshot.mjs.map +1 -0
- package/dist/mcp-server/tools/seeding.cjs +214 -0
- package/dist/mcp-server/tools/seeding.cjs.map +1 -0
- package/dist/mcp-server/tools/seeding.d.cts +38 -0
- package/dist/mcp-server/tools/seeding.d.cts.map +1 -0
- package/dist/mcp-server/tools/seeding.d.mts +38 -0
- package/dist/mcp-server/tools/seeding.d.mts.map +1 -0
- package/dist/mcp-server/tools/seeding.mjs +208 -0
- package/dist/mcp-server/tools/seeding.mjs.map +1 -0
- package/dist/mcp-server/tools/state.cjs +69 -0
- package/dist/mcp-server/tools/state.cjs.map +1 -0
- package/dist/mcp-server/tools/state.d.cts +19 -0
- package/dist/mcp-server/tools/state.d.cts.map +1 -0
- package/dist/mcp-server/tools/state.d.mts +19 -0
- package/dist/mcp-server/tools/state.d.mts.map +1 -0
- package/dist/mcp-server/tools/state.mjs +66 -0
- package/dist/mcp-server/tools/state.mjs.map +1 -0
- package/dist/mcp-server/types/discovery.cjs +24 -0
- package/dist/mcp-server/types/discovery.cjs.map +1 -0
- package/dist/mcp-server/types/discovery.d.cts +30 -0
- package/dist/mcp-server/types/discovery.d.cts.map +1 -0
- package/dist/mcp-server/types/discovery.d.mts +30 -0
- package/dist/mcp-server/types/discovery.d.mts.map +1 -0
- package/dist/mcp-server/types/discovery.mjs +21 -0
- package/dist/mcp-server/types/discovery.mjs.map +1 -0
- package/dist/mcp-server/types/errors.cjs +33 -0
- package/dist/mcp-server/types/errors.cjs.map +1 -0
- package/dist/mcp-server/types/errors.d.cts +31 -0
- package/dist/mcp-server/types/errors.d.cts.map +1 -0
- package/dist/mcp-server/types/errors.d.mts +31 -0
- package/dist/mcp-server/types/errors.d.mts.map +1 -0
- package/dist/mcp-server/types/errors.mjs +30 -0
- package/dist/mcp-server/types/errors.mjs.map +1 -0
- package/dist/mcp-server/types/index.cjs +21 -0
- package/dist/mcp-server/types/index.cjs.map +1 -0
- package/dist/mcp-server/types/index.d.cts +10 -0
- package/dist/mcp-server/types/index.d.cts.map +1 -0
- package/dist/mcp-server/types/index.d.mts +10 -0
- package/dist/mcp-server/types/index.d.mts.map +1 -0
- package/dist/mcp-server/types/index.mjs +5 -0
- package/dist/mcp-server/types/index.mjs.map +1 -0
- package/dist/mcp-server/types/knowledge.cjs +3 -0
- package/dist/mcp-server/types/knowledge.cjs.map +1 -0
- package/dist/mcp-server/types/knowledge.d.cts +116 -0
- package/dist/mcp-server/types/knowledge.d.cts.map +1 -0
- package/dist/mcp-server/types/knowledge.d.mts +116 -0
- package/dist/mcp-server/types/knowledge.d.mts.map +1 -0
- package/dist/mcp-server/types/knowledge.mjs +2 -0
- package/dist/mcp-server/types/knowledge.mjs.map +1 -0
- package/dist/mcp-server/types/responses.cjs +3 -0
- package/dist/mcp-server/types/responses.cjs.map +1 -0
- package/dist/mcp-server/types/responses.d.cts +22 -0
- package/dist/mcp-server/types/responses.d.cts.map +1 -0
- package/dist/mcp-server/types/responses.d.mts +22 -0
- package/dist/mcp-server/types/responses.d.mts.map +1 -0
- package/dist/mcp-server/types/responses.mjs +2 -0
- package/dist/mcp-server/types/responses.mjs.map +1 -0
- package/dist/mcp-server/types/seeding.cjs +34 -0
- package/dist/mcp-server/types/seeding.cjs.map +1 -0
- package/dist/mcp-server/types/seeding.d.cts +40 -0
- package/dist/mcp-server/types/seeding.d.cts.map +1 -0
- package/dist/mcp-server/types/seeding.d.mts +40 -0
- package/dist/mcp-server/types/seeding.d.mts.map +1 -0
- package/dist/mcp-server/types/seeding.mjs +31 -0
- package/dist/mcp-server/types/seeding.mjs.map +1 -0
- package/dist/mcp-server/types/session.cjs +3 -0
- package/dist/mcp-server/types/session.cjs.map +1 -0
- package/dist/mcp-server/types/session.d.cts +11 -0
- package/dist/mcp-server/types/session.d.cts.map +1 -0
- package/dist/mcp-server/types/session.d.mts +11 -0
- package/dist/mcp-server/types/session.d.mts.map +1 -0
- package/dist/mcp-server/types/session.mjs +2 -0
- package/dist/mcp-server/types/session.mjs.map +1 -0
- package/dist/mcp-server/types/step-record.cjs +20 -0
- package/dist/mcp-server/types/step-record.cjs.map +1 -0
- package/dist/mcp-server/types/step-record.d.cts +86 -0
- package/dist/mcp-server/types/step-record.d.cts.map +1 -0
- package/dist/mcp-server/types/step-record.d.mts +86 -0
- package/dist/mcp-server/types/step-record.d.mts.map +1 -0
- package/dist/mcp-server/types/step-record.mjs +17 -0
- package/dist/mcp-server/types/step-record.mjs.map +1 -0
- package/dist/mcp-server/types/tool-inputs.cjs +3 -0
- package/dist/mcp-server/types/tool-inputs.cjs.map +1 -0
- package/dist/mcp-server/types/tool-inputs.d.cts +118 -0
- package/dist/mcp-server/types/tool-inputs.d.cts.map +1 -0
- package/dist/mcp-server/types/tool-inputs.d.mts +118 -0
- package/dist/mcp-server/types/tool-inputs.d.mts.map +1 -0
- package/dist/mcp-server/types/tool-inputs.mjs +2 -0
- package/dist/mcp-server/types/tool-inputs.mjs.map +1 -0
- package/dist/mcp-server/types/tool-outputs.cjs +3 -0
- package/dist/mcp-server/types/tool-outputs.cjs.map +1 -0
- package/dist/mcp-server/types/tool-outputs.d.cts +121 -0
- package/dist/mcp-server/types/tool-outputs.d.cts.map +1 -0
- package/dist/mcp-server/types/tool-outputs.d.mts +121 -0
- package/dist/mcp-server/types/tool-outputs.d.mts.map +1 -0
- package/dist/mcp-server/types/tool-outputs.mjs +2 -0
- package/dist/mcp-server/types/tool-outputs.mjs.map +1 -0
- package/dist/mcp-server/utils/errors.cjs +14 -0
- package/dist/mcp-server/utils/errors.cjs.map +1 -0
- package/dist/mcp-server/utils/errors.d.cts +9 -0
- package/dist/mcp-server/utils/errors.d.cts.map +1 -0
- package/dist/mcp-server/utils/errors.d.mts +9 -0
- package/dist/mcp-server/utils/errors.d.mts.map +1 -0
- package/dist/mcp-server/utils/errors.mjs +11 -0
- package/dist/mcp-server/utils/errors.mjs.map +1 -0
- package/dist/mcp-server/utils/index.cjs +22 -0
- package/dist/mcp-server/utils/index.cjs.map +1 -0
- package/dist/mcp-server/utils/index.d.cts +8 -0
- package/dist/mcp-server/utils/index.d.cts.map +1 -0
- package/dist/mcp-server/utils/index.d.mts +8 -0
- package/dist/mcp-server/utils/index.d.mts.map +1 -0
- package/dist/mcp-server/utils/index.mjs +8 -0
- package/dist/mcp-server/utils/index.mjs.map +1 -0
- package/dist/mcp-server/utils/logger.cjs +25 -0
- package/dist/mcp-server/utils/logger.cjs.map +1 -0
- package/dist/mcp-server/utils/logger.d.cts +9 -0
- package/dist/mcp-server/utils/logger.d.cts.map +1 -0
- package/dist/mcp-server/utils/logger.d.mts +9 -0
- package/dist/mcp-server/utils/logger.d.mts.map +1 -0
- package/dist/mcp-server/utils/logger.mjs +22 -0
- package/dist/mcp-server/utils/logger.mjs.map +1 -0
- package/dist/mcp-server/utils/redaction.cjs +24 -0
- package/dist/mcp-server/utils/redaction.cjs.map +1 -0
- package/dist/mcp-server/utils/redaction.d.cts +9 -0
- package/dist/mcp-server/utils/redaction.d.cts.map +1 -0
- package/dist/mcp-server/utils/redaction.d.mts +9 -0
- package/dist/mcp-server/utils/redaction.d.mts.map +1 -0
- package/dist/mcp-server/utils/redaction.mjs +20 -0
- package/dist/mcp-server/utils/redaction.mjs.map +1 -0
- package/dist/mcp-server/utils/response.cjs +49 -0
- package/dist/mcp-server/utils/response.cjs.map +1 -0
- package/dist/mcp-server/utils/response.d.cts +22 -0
- package/dist/mcp-server/utils/response.d.cts.map +1 -0
- package/dist/mcp-server/utils/response.d.mts +22 -0
- package/dist/mcp-server/utils/response.d.mts.map +1 -0
- package/dist/mcp-server/utils/response.mjs +45 -0
- package/dist/mcp-server/utils/response.mjs.map +1 -0
- package/dist/mcp-server/utils/targets.cjs +32 -0
- package/dist/mcp-server/utils/targets.cjs.map +1 -0
- package/dist/mcp-server/utils/targets.d.cts +25 -0
- package/dist/mcp-server/utils/targets.d.cts.map +1 -0
- package/dist/mcp-server/utils/targets.d.mts +25 -0
- package/dist/mcp-server/utils/targets.d.mts.map +1 -0
- package/dist/mcp-server/utils/targets.mjs +29 -0
- package/dist/mcp-server/utils/targets.mjs.map +1 -0
- package/dist/mcp-server/utils/time.cjs +39 -0
- package/dist/mcp-server/utils/time.cjs.map +1 -0
- package/dist/mcp-server/utils/time.d.cts +15 -0
- package/dist/mcp-server/utils/time.d.cts.map +1 -0
- package/dist/mcp-server/utils/time.d.mts +15 -0
- package/dist/mcp-server/utils/time.d.mts.map +1 -0
- package/dist/mcp-server/utils/time.mjs +35 -0
- package/dist/mcp-server/utils/time.mjs.map +1 -0
- package/dist/mcp-server/utils/type-guards.cjs +42 -0
- package/dist/mcp-server/utils/type-guards.cjs.map +1 -0
- package/dist/mcp-server/utils/type-guards.d.cts +30 -0
- package/dist/mcp-server/utils/type-guards.d.cts.map +1 -0
- package/dist/mcp-server/utils/type-guards.d.mts +30 -0
- package/dist/mcp-server/utils/type-guards.d.mts.map +1 -0
- package/dist/mcp-server/utils/type-guards.mjs +38 -0
- package/dist/mcp-server/utils/type-guards.mjs.map +1 -0
- package/dist/utils/fetch.cjs +36 -0
- package/dist/utils/fetch.cjs.map +1 -0
- package/dist/utils/fetch.d.cts +20 -0
- package/dist/utils/fetch.d.cts.map +1 -0
- package/dist/utils/fetch.d.mts +20 -0
- package/dist/utils/fetch.d.mts.map +1 -0
- package/dist/utils/fetch.mjs +33 -0
- package/dist/utils/fetch.mjs.map +1 -0
- package/dist/utils/index.cjs +11 -0
- package/dist/utils/index.cjs.map +1 -0
- package/dist/utils/index.d.cts +6 -0
- package/dist/utils/index.d.cts.map +1 -0
- package/dist/utils/index.d.mts +6 -0
- package/dist/utils/index.d.mts.map +1 -0
- package/dist/utils/index.mjs +6 -0
- package/dist/utils/index.mjs.map +1 -0
- package/dist/utils/service-readiness.cjs +75 -0
- package/dist/utils/service-readiness.cjs.map +1 -0
- package/dist/utils/service-readiness.d.cts +61 -0
- package/dist/utils/service-readiness.d.cts.map +1 -0
- package/dist/utils/service-readiness.d.mts +61 -0
- package/dist/utils/service-readiness.d.mts.map +1 -0
- package/dist/utils/service-readiness.mjs +72 -0
- package/dist/utils/service-readiness.mjs.map +1 -0
- package/package.json +119 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { runTool } from "./run-tool.mjs";
|
|
2
|
+
import { getSessionManager } from "../session-manager.mjs";
|
|
3
|
+
import { classifyContextError } from "./error-classification.mjs";
|
|
4
|
+
/**
|
|
5
|
+
* Handle setting the workflow context (e2e or prod).
|
|
6
|
+
*
|
|
7
|
+
* @param input The context input containing the desired context mode
|
|
8
|
+
* @param options Optional handler options for the operation
|
|
9
|
+
* @returns Promise resolving to the context change result with previous and new context
|
|
10
|
+
*/
|
|
11
|
+
export async function handleSetContext(input, options) {
|
|
12
|
+
return runTool({
|
|
13
|
+
toolName: 'mm_set_context',
|
|
14
|
+
input,
|
|
15
|
+
options,
|
|
16
|
+
requiresSession: false,
|
|
17
|
+
observationPolicy: 'none',
|
|
18
|
+
/**
|
|
19
|
+
* Execute the context switch operation.
|
|
20
|
+
*
|
|
21
|
+
* @returns The result containing previous context, new context, and available capabilities
|
|
22
|
+
*/
|
|
23
|
+
execute: async () => {
|
|
24
|
+
const sessionManager = getSessionManager();
|
|
25
|
+
const previousContext = sessionManager.getEnvironmentMode();
|
|
26
|
+
sessionManager.setContext(input.context);
|
|
27
|
+
const info = sessionManager.getContextInfo();
|
|
28
|
+
return {
|
|
29
|
+
previousContext,
|
|
30
|
+
newContext: input.context,
|
|
31
|
+
availableCapabilities: info.capabilities.available,
|
|
32
|
+
};
|
|
33
|
+
},
|
|
34
|
+
classifyError: classifyContextError,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Handle getting the current workflow context and capabilities.
|
|
39
|
+
*
|
|
40
|
+
* @param input Empty input object for this operation
|
|
41
|
+
* @param options Optional handler options for the operation
|
|
42
|
+
* @returns Promise resolving to the current context, session state, and available capabilities
|
|
43
|
+
*/
|
|
44
|
+
export async function handleGetContext(input, options) {
|
|
45
|
+
return runTool({
|
|
46
|
+
toolName: 'mm_get_context',
|
|
47
|
+
input,
|
|
48
|
+
options,
|
|
49
|
+
requiresSession: false,
|
|
50
|
+
observationPolicy: 'none',
|
|
51
|
+
/**
|
|
52
|
+
* Execute the get context operation.
|
|
53
|
+
*
|
|
54
|
+
* @returns The result containing current context, session state, and capabilities
|
|
55
|
+
*/
|
|
56
|
+
execute: async () => {
|
|
57
|
+
const sessionManager = getSessionManager();
|
|
58
|
+
return sessionManager.getContextInfo();
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=context.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.mjs","sourceRoot":"","sources":["../../../src/mcp-server/tools/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,uBAAsB;AACxC,OAAO,EAAE,iBAAiB,EAAE,+BAA8B;AAC1D,OAAO,EAAE,oBAAoB,EAAE,mCAAkC;AAYjE;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAsB,EACtB,OAAwB;IAExB,OAAO,OAAO,CAAoC;QAChD,QAAQ,EAAE,gBAAgB;QAC1B,KAAK;QACL,OAAO;QACP,eAAe,EAAE,KAAK;QACtB,iBAAiB,EAAE,MAAM;QAEzB;;;;WAIG;QACH,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;YAC3C,MAAM,eAAe,GAAG,cAAc,CAAC,kBAAkB,EAAE,CAAC;YAC5D,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACzC,MAAM,IAAI,GAAG,cAAc,CAAC,cAAc,EAAE,CAAC;YAE7C,OAAO;gBACL,eAAe;gBACf,UAAU,EAAE,KAAK,CAAC,OAAO;gBACzB,qBAAqB,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS;aACnD,CAAC;QACJ,CAAC;QAED,aAAa,EAAE,oBAAoB;KACpC,CAAC,CAAC;AACL,CAAC;AAYD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAA4B,EAC5B,OAAwB;IAExB,OAAO,OAAO,CAA0C;QACtD,QAAQ,EAAE,gBAAgB;QAC1B,KAAK;QACL,OAAO;QACP,eAAe,EAAE,KAAK;QACtB,iBAAiB,EAAE,MAAM;QAEzB;;;;WAIG;QACH,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;YAC3C,OAAO,cAAc,CAAC,cAAc,EAAE,CAAC;QACzC,CAAC;KACF,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { runTool } from './run-tool.js';\nimport { getSessionManager } from '../session-manager.js';\nimport { classifyContextError } from './error-classification.js';\nimport type { McpResponse, HandlerOptions } from '../types';\n\nexport type SetContextInput = {\n context: 'e2e' | 'prod';\n};\nexport type SetContextResult = {\n previousContext: 'e2e' | 'prod';\n newContext: 'e2e' | 'prod';\n availableCapabilities: string[];\n};\n\n/**\n * Handle setting the workflow context (e2e or prod).\n *\n * @param input The context input containing the desired context mode\n * @param options Optional handler options for the operation\n * @returns Promise resolving to the context change result with previous and new context\n */\nexport async function handleSetContext(\n input: SetContextInput,\n options?: HandlerOptions,\n): Promise<McpResponse<SetContextResult>> {\n return runTool<SetContextInput, SetContextResult>({\n toolName: 'mm_set_context',\n input,\n options,\n requiresSession: false,\n observationPolicy: 'none',\n\n /**\n * Execute the context switch operation.\n *\n * @returns The result containing previous context, new context, and available capabilities\n */\n execute: async () => {\n const sessionManager = getSessionManager();\n const previousContext = sessionManager.getEnvironmentMode();\n sessionManager.setContext(input.context);\n const info = sessionManager.getContextInfo();\n\n return {\n previousContext,\n newContext: input.context,\n availableCapabilities: info.capabilities.available,\n };\n },\n\n classifyError: classifyContextError,\n });\n}\n\nexport type GetContextResult = {\n currentContext: 'e2e' | 'prod';\n hasActiveSession: boolean;\n sessionId: string | null;\n capabilities: {\n available: string[];\n };\n canSwitchContext: boolean;\n};\n\n/**\n * Handle getting the current workflow context and capabilities.\n *\n * @param input Empty input object for this operation\n * @param options Optional handler options for the operation\n * @returns Promise resolving to the current context, session state, and available capabilities\n */\nexport async function handleGetContext(\n input: Record<string, never>,\n options?: HandlerOptions,\n): Promise<McpResponse<GetContextResult>> {\n return runTool<Record<string, never>, GetContextResult>({\n toolName: 'mm_get_context',\n input,\n options,\n requiresSession: false,\n observationPolicy: 'none',\n\n /**\n * Execute the get context operation.\n *\n * @returns The result containing current context, session state, and capabilities\n */\n execute: async () => {\n const sessionManager = getSessionManager();\n return sessionManager.getContextInfo();\n },\n });\n}\n"]}
|
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TOOL_PREFIX = void 0;
|
|
4
|
+
exports.getToolDefinitions = getToolDefinitions;
|
|
5
|
+
exports.getToolHandler = getToolHandler;
|
|
6
|
+
exports.hasToolHandler = hasToolHandler;
|
|
7
|
+
exports.extractBaseName = extractBaseName;
|
|
8
|
+
exports.validateToolInput = validateToolInput;
|
|
9
|
+
exports.safeValidateToolInput = safeValidateToolInput;
|
|
10
|
+
exports.getToolNames = getToolNames;
|
|
11
|
+
exports.getPrefixedToolNames = getPrefixedToolNames;
|
|
12
|
+
exports.buildToolHandlersRecord = buildToolHandlersRecord;
|
|
13
|
+
const schemas_js_1 = require("../schemas.cjs");
|
|
14
|
+
const session_manager_js_1 = require("../session-manager.cjs");
|
|
15
|
+
const batch_js_1 = require("./batch.cjs");
|
|
16
|
+
const build_js_1 = require("./build.cjs");
|
|
17
|
+
const cleanup_js_1 = require("./cleanup.cjs");
|
|
18
|
+
const clipboard_js_1 = require("./clipboard.cjs");
|
|
19
|
+
const context_js_1 = require("./context.cjs");
|
|
20
|
+
const discovery_tools_js_1 = require("./discovery-tools.cjs");
|
|
21
|
+
const interaction_js_1 = require("./interaction.cjs");
|
|
22
|
+
const knowledge_js_1 = require("./knowledge.cjs");
|
|
23
|
+
const launch_js_1 = require("./launch.cjs");
|
|
24
|
+
const navigation_js_1 = require("./navigation.cjs");
|
|
25
|
+
const screenshot_js_1 = require("./screenshot.cjs");
|
|
26
|
+
const seeding_js_1 = require("./seeding.cjs");
|
|
27
|
+
const state_js_1 = require("./state.cjs");
|
|
28
|
+
exports.TOOL_PREFIX = 'mm';
|
|
29
|
+
/**
|
|
30
|
+
* Create a handler for the build tool that injects build capability.
|
|
31
|
+
*
|
|
32
|
+
* @returns A tool handler function for building the extension
|
|
33
|
+
*/
|
|
34
|
+
function createBuildHandler() {
|
|
35
|
+
return async (input, options) => {
|
|
36
|
+
const sessionManager = (0, session_manager_js_1.getSessionManager)();
|
|
37
|
+
const buildOptions = {
|
|
38
|
+
...options,
|
|
39
|
+
buildCapability: sessionManager.getBuildCapability?.(),
|
|
40
|
+
};
|
|
41
|
+
return (0, build_js_1.handleBuild)(input, buildOptions);
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Create a handler for the state tool that injects state snapshot capability.
|
|
46
|
+
*
|
|
47
|
+
* @returns A tool handler function for getting extension state
|
|
48
|
+
*/
|
|
49
|
+
function createStateHandler() {
|
|
50
|
+
return async (_, options) => {
|
|
51
|
+
const sessionManager = (0, session_manager_js_1.getSessionManager)();
|
|
52
|
+
const stateOptions = {
|
|
53
|
+
...options,
|
|
54
|
+
stateSnapshotCapability: sessionManager.getStateSnapshotCapability?.(),
|
|
55
|
+
};
|
|
56
|
+
return (0, state_js_1.handleGetState)(stateOptions);
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Create a handler for the seed contract tool that injects seeding capability.
|
|
61
|
+
*
|
|
62
|
+
* @returns A tool handler function for deploying a single contract
|
|
63
|
+
*/
|
|
64
|
+
function createSeedContractHandler() {
|
|
65
|
+
return async (input, options) => {
|
|
66
|
+
const sessionManager = (0, session_manager_js_1.getSessionManager)();
|
|
67
|
+
const seedingOptions = {
|
|
68
|
+
...options,
|
|
69
|
+
seedingCapability: sessionManager.getContractSeedingCapability?.(),
|
|
70
|
+
};
|
|
71
|
+
return (0, seeding_js_1.handleSeedContract)(input, seedingOptions);
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Create a handler for the seed contracts tool that injects seeding capability.
|
|
76
|
+
*
|
|
77
|
+
* @returns A tool handler function for deploying multiple contracts
|
|
78
|
+
*/
|
|
79
|
+
function createSeedContractsHandler() {
|
|
80
|
+
return async (input, options) => {
|
|
81
|
+
const sessionManager = (0, session_manager_js_1.getSessionManager)();
|
|
82
|
+
const seedingOptions = {
|
|
83
|
+
...options,
|
|
84
|
+
seedingCapability: sessionManager.getContractSeedingCapability?.(),
|
|
85
|
+
};
|
|
86
|
+
return (0, seeding_js_1.handleSeedContracts)(input, seedingOptions);
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Create a handler for the get contract address tool that injects seeding capability.
|
|
91
|
+
*
|
|
92
|
+
* @returns A tool handler function for retrieving a deployed contract address
|
|
93
|
+
*/
|
|
94
|
+
function createGetContractAddressHandler() {
|
|
95
|
+
return async (input, options) => {
|
|
96
|
+
const sessionManager = (0, session_manager_js_1.getSessionManager)();
|
|
97
|
+
const seedingOptions = {
|
|
98
|
+
...options,
|
|
99
|
+
seedingCapability: sessionManager.getContractSeedingCapability?.(),
|
|
100
|
+
};
|
|
101
|
+
return (0, seeding_js_1.handleGetContractAddress)(input, seedingOptions);
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Create a handler for the list contracts tool that injects seeding capability.
|
|
106
|
+
*
|
|
107
|
+
* @returns A tool handler function for listing deployed contracts
|
|
108
|
+
*/
|
|
109
|
+
function createListDeployedContractsHandler() {
|
|
110
|
+
return async (input, options) => {
|
|
111
|
+
const sessionManager = (0, session_manager_js_1.getSessionManager)();
|
|
112
|
+
const seedingOptions = {
|
|
113
|
+
...options,
|
|
114
|
+
seedingCapability: sessionManager.getContractSeedingCapability?.(),
|
|
115
|
+
};
|
|
116
|
+
return (0, seeding_js_1.handleListDeployedContracts)(input, seedingOptions);
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
const tools = {
|
|
120
|
+
build: {
|
|
121
|
+
schema: schemas_js_1.buildInputSchema,
|
|
122
|
+
description: `Build the extension using yarn build:test. Call before ${exports.TOOL_PREFIX}_launch if extension is not built.`,
|
|
123
|
+
handler: createBuildHandler(),
|
|
124
|
+
},
|
|
125
|
+
launch: {
|
|
126
|
+
schema: schemas_js_1.launchInputSchema,
|
|
127
|
+
description: 'Launch extension in a headed Chrome browser with Playwright. Returns session info and initial state.',
|
|
128
|
+
handler: launch_js_1.handleLaunch,
|
|
129
|
+
},
|
|
130
|
+
cleanup: {
|
|
131
|
+
schema: schemas_js_1.cleanupInputSchema,
|
|
132
|
+
description: 'Stop the browser, Anvil, and all services. Always call when done.',
|
|
133
|
+
handler: cleanup_js_1.handleCleanup,
|
|
134
|
+
},
|
|
135
|
+
get_state: {
|
|
136
|
+
schema: schemas_js_1.getStateInputSchema,
|
|
137
|
+
description: 'Get current extension state including screen, URL, balance, network, and account address.',
|
|
138
|
+
handler: createStateHandler(),
|
|
139
|
+
},
|
|
140
|
+
navigate: {
|
|
141
|
+
schema: schemas_js_1.navigateInputSchema,
|
|
142
|
+
description: 'Navigate to a specific screen in the extension.',
|
|
143
|
+
handler: navigation_js_1.handleNavigate,
|
|
144
|
+
},
|
|
145
|
+
wait_for_notification: {
|
|
146
|
+
schema: schemas_js_1.waitForNotificationInputSchema,
|
|
147
|
+
description: 'Wait for notification popup to appear (e.g., after dapp interaction). Sets the notification page as the active page for subsequent interactions.',
|
|
148
|
+
handler: navigation_js_1.handleWaitForNotification,
|
|
149
|
+
},
|
|
150
|
+
switch_to_tab: {
|
|
151
|
+
schema: schemas_js_1.switchToTabInputSchema,
|
|
152
|
+
description: `Switch the active page to a different tracked tab. Use this to direct ${exports.TOOL_PREFIX}_click, ${exports.TOOL_PREFIX}_type, and other interaction tools to a specific page.`,
|
|
153
|
+
handler: navigation_js_1.handleSwitchToTab,
|
|
154
|
+
},
|
|
155
|
+
close_tab: {
|
|
156
|
+
schema: schemas_js_1.closeTabInputSchema,
|
|
157
|
+
description: 'Close a specific tab by role or URL. Cannot close the extension home page. If closing the active tab, automatically switches to extension home.',
|
|
158
|
+
handler: navigation_js_1.handleCloseTab,
|
|
159
|
+
},
|
|
160
|
+
list_testids: {
|
|
161
|
+
schema: schemas_js_1.listTestIdsInputSchema,
|
|
162
|
+
description: 'List all visible data-testid attributes on the current page. Use to discover available interaction targets.',
|
|
163
|
+
handler: discovery_tools_js_1.handleListTestIds,
|
|
164
|
+
},
|
|
165
|
+
accessibility_snapshot: {
|
|
166
|
+
schema: schemas_js_1.accessibilitySnapshotInputSchema,
|
|
167
|
+
description: `Get trimmed accessibility tree with deterministic refs (e1, e2, ...). Use refs with ${exports.TOOL_PREFIX}_click/${exports.TOOL_PREFIX}_type.`,
|
|
168
|
+
handler: discovery_tools_js_1.handleAccessibilitySnapshot,
|
|
169
|
+
},
|
|
170
|
+
describe_screen: {
|
|
171
|
+
schema: schemas_js_1.describeScreenInputSchema,
|
|
172
|
+
description: 'Get comprehensive screen state: extension state + testIds + accessibility snapshot. Optional screenshot.',
|
|
173
|
+
handler: discovery_tools_js_1.handleDescribeScreen,
|
|
174
|
+
},
|
|
175
|
+
screenshot: {
|
|
176
|
+
schema: schemas_js_1.screenshotInputSchema,
|
|
177
|
+
description: 'Take a screenshot and save to test-artifacts/screenshots/',
|
|
178
|
+
handler: screenshot_js_1.handleScreenshot,
|
|
179
|
+
},
|
|
180
|
+
click: {
|
|
181
|
+
schema: schemas_js_1.clickInputSchema,
|
|
182
|
+
description: 'Click an element. Specify exactly one of: a11yRef, testId, or selector.',
|
|
183
|
+
handler: interaction_js_1.handleClick,
|
|
184
|
+
},
|
|
185
|
+
type: {
|
|
186
|
+
schema: schemas_js_1.typeInputSchema,
|
|
187
|
+
description: 'Type text into an element. Specify exactly one of: a11yRef, testId, or selector.',
|
|
188
|
+
handler: interaction_js_1.handleType,
|
|
189
|
+
},
|
|
190
|
+
wait_for: {
|
|
191
|
+
schema: schemas_js_1.waitForInputSchema,
|
|
192
|
+
description: 'Wait for an element to become visible. Specify exactly one of: a11yRef, testId, or selector.',
|
|
193
|
+
handler: interaction_js_1.handleWaitFor,
|
|
194
|
+
},
|
|
195
|
+
knowledge_last: {
|
|
196
|
+
schema: schemas_js_1.knowledgeLastInputSchema,
|
|
197
|
+
description: 'Get the last N step records from the knowledge store for the current session.',
|
|
198
|
+
handler: knowledge_js_1.handleKnowledgeLast,
|
|
199
|
+
},
|
|
200
|
+
knowledge_search: {
|
|
201
|
+
schema: schemas_js_1.knowledgeSearchInputSchema,
|
|
202
|
+
description: 'Search step records by tool name, screen, testId, or accessibility names. Default searches all sessions.',
|
|
203
|
+
handler: knowledge_js_1.handleKnowledgeSearch,
|
|
204
|
+
},
|
|
205
|
+
knowledge_summarize: {
|
|
206
|
+
schema: schemas_js_1.knowledgeSummarizeInputSchema,
|
|
207
|
+
description: 'Generate a recipe-like summary of steps taken in a session.',
|
|
208
|
+
handler: knowledge_js_1.handleKnowledgeSummarize,
|
|
209
|
+
},
|
|
210
|
+
knowledge_sessions: {
|
|
211
|
+
schema: schemas_js_1.knowledgeSessionsInputSchema,
|
|
212
|
+
description: 'List recent sessions with metadata for cross-session knowledge retrieval.',
|
|
213
|
+
handler: knowledge_js_1.handleKnowledgeSessions,
|
|
214
|
+
},
|
|
215
|
+
seed_contract: {
|
|
216
|
+
schema: schemas_js_1.seedContractInputSchema,
|
|
217
|
+
description: 'Deploy a smart contract to the local Anvil node. Available: hst (ERC20 TST token), nfts (ERC721), erc1155, piggybank, failing (reverts), multisig, entrypoint (ERC-4337), simpleAccountFactory, verifyingPaymaster.',
|
|
218
|
+
handler: createSeedContractHandler(),
|
|
219
|
+
},
|
|
220
|
+
seed_contracts: {
|
|
221
|
+
schema: schemas_js_1.seedContractsInputSchema,
|
|
222
|
+
description: 'Deploy multiple smart contracts in sequence.',
|
|
223
|
+
handler: createSeedContractsHandler(),
|
|
224
|
+
},
|
|
225
|
+
get_contract_address: {
|
|
226
|
+
schema: schemas_js_1.getContractAddressInputSchema,
|
|
227
|
+
description: 'Get the deployed address of a smart contract.',
|
|
228
|
+
handler: createGetContractAddressHandler(),
|
|
229
|
+
},
|
|
230
|
+
list_contracts: {
|
|
231
|
+
schema: schemas_js_1.listDeployedContractsInputSchema,
|
|
232
|
+
description: 'List all smart contracts deployed in this session.',
|
|
233
|
+
handler: createListDeployedContractsHandler(),
|
|
234
|
+
},
|
|
235
|
+
run_steps: {
|
|
236
|
+
schema: schemas_js_1.runStepsInputSchema,
|
|
237
|
+
description: 'Execute multiple tools in sequence. Reduces round trips for multi-step flows.',
|
|
238
|
+
handler: batch_js_1.handleRunSteps,
|
|
239
|
+
},
|
|
240
|
+
set_context: {
|
|
241
|
+
schema: schemas_js_1.setContextInputSchema,
|
|
242
|
+
description: 'Switch workflow context (e2e or prod). Cannot switch during active session.',
|
|
243
|
+
handler: context_js_1.handleSetContext,
|
|
244
|
+
},
|
|
245
|
+
get_context: {
|
|
246
|
+
schema: schemas_js_1.getContextInputSchema,
|
|
247
|
+
description: 'Get current context, available capabilities, and whether context can be switched.',
|
|
248
|
+
handler: context_js_1.handleGetContext,
|
|
249
|
+
},
|
|
250
|
+
clipboard: {
|
|
251
|
+
schema: schemas_js_1.clipboardInputSchema,
|
|
252
|
+
description: "Write text to or read text from the browser clipboard. Use action='write' with text parameter to write, or action='read' to read current clipboard content. Useful for pasting SRP or other data into components that have paste handlers.",
|
|
253
|
+
handler: clipboard_js_1.handleClipboard,
|
|
254
|
+
},
|
|
255
|
+
};
|
|
256
|
+
/**
|
|
257
|
+
* Zod v4's toJSONSchema() marks properties with defaults as required.
|
|
258
|
+
* This is incorrect for MCP tool input schemas where LLM clients shouldn't
|
|
259
|
+
* be required to provide values that have defaults. This function recursively
|
|
260
|
+
* removes those properties from the required array.
|
|
261
|
+
*
|
|
262
|
+
* @param schema The JSON schema to process
|
|
263
|
+
* @returns The modified schema with defaults removed from required array
|
|
264
|
+
*/
|
|
265
|
+
function removeDefaultsFromRequired(schema) {
|
|
266
|
+
const result = { ...schema };
|
|
267
|
+
if (Array.isArray(result.allOf)) {
|
|
268
|
+
result.allOf = result.allOf.map((item) => removeDefaultsFromRequired(item));
|
|
269
|
+
}
|
|
270
|
+
if (Array.isArray(result.anyOf)) {
|
|
271
|
+
result.anyOf = result.anyOf.map((item) => removeDefaultsFromRequired(item));
|
|
272
|
+
}
|
|
273
|
+
if (Array.isArray(result.oneOf)) {
|
|
274
|
+
result.oneOf = result.oneOf.map((item) => removeDefaultsFromRequired(item));
|
|
275
|
+
}
|
|
276
|
+
if (result.properties &&
|
|
277
|
+
typeof result.properties === 'object' &&
|
|
278
|
+
result.properties !== null) {
|
|
279
|
+
const newProperties = {};
|
|
280
|
+
for (const [key, value] of Object.entries(result.properties)) {
|
|
281
|
+
if (value && typeof value === 'object') {
|
|
282
|
+
newProperties[key] = removeDefaultsFromRequired(value);
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
newProperties[key] = value;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
result.properties = newProperties;
|
|
289
|
+
}
|
|
290
|
+
if (Array.isArray(result.required) &&
|
|
291
|
+
result.properties &&
|
|
292
|
+
typeof result.properties === 'object') {
|
|
293
|
+
const properties = result.properties;
|
|
294
|
+
result.required = result.required.filter((propName) => {
|
|
295
|
+
const prop = properties[propName];
|
|
296
|
+
return prop && !('default' in prop);
|
|
297
|
+
});
|
|
298
|
+
if (result.required.length === 0) {
|
|
299
|
+
delete result.required;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
return result;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* MCP protocol doesn't support allOf/oneOf/anyOf at the top level of input schemas.
|
|
306
|
+
* This flattens allOf into a single merged object schema.
|
|
307
|
+
*
|
|
308
|
+
* @param schema The JSON schema to flatten
|
|
309
|
+
* @returns The flattened schema with allOf merged into properties
|
|
310
|
+
*/
|
|
311
|
+
function flattenTopLevelAllOf(schema) {
|
|
312
|
+
if (!Array.isArray(schema.allOf)) {
|
|
313
|
+
return schema;
|
|
314
|
+
}
|
|
315
|
+
const mergedProperties = {};
|
|
316
|
+
const mergedRequired = [];
|
|
317
|
+
for (const subSchema of schema.allOf) {
|
|
318
|
+
if (subSchema.properties && typeof subSchema.properties === 'object') {
|
|
319
|
+
Object.assign(mergedProperties, subSchema.properties);
|
|
320
|
+
}
|
|
321
|
+
if (Array.isArray(subSchema.required)) {
|
|
322
|
+
mergedRequired.push(...subSchema.required);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
const result = {
|
|
326
|
+
type: 'object',
|
|
327
|
+
properties: mergedProperties,
|
|
328
|
+
additionalProperties: false,
|
|
329
|
+
};
|
|
330
|
+
if (mergedRequired.length > 0) {
|
|
331
|
+
result.required = [...new Set(mergedRequired)];
|
|
332
|
+
}
|
|
333
|
+
return result;
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Convert a Zod schema to a JSON schema suitable for MCP tool definitions.
|
|
337
|
+
*
|
|
338
|
+
* @param schema The Zod schema to convert
|
|
339
|
+
* @returns The converted JSON schema with defaults removed and allOf flattened
|
|
340
|
+
*/
|
|
341
|
+
function zodSchemaToJsonSchema(schema) {
|
|
342
|
+
const jsonSchema = schema.toJSONSchema();
|
|
343
|
+
const { $schema: _, ...rest } = jsonSchema;
|
|
344
|
+
const flattened = flattenTopLevelAllOf(rest);
|
|
345
|
+
if (flattened.type === 'object' && !('additionalProperties' in flattened)) {
|
|
346
|
+
flattened.additionalProperties = false;
|
|
347
|
+
}
|
|
348
|
+
return removeDefaultsFromRequired(flattened);
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Get all tool definitions with their schemas and descriptions.
|
|
352
|
+
*
|
|
353
|
+
* @returns Array of tool definitions for all available MCP tools
|
|
354
|
+
*/
|
|
355
|
+
function getToolDefinitions() {
|
|
356
|
+
return Object.entries(tools).map(([baseName, tool]) => ({
|
|
357
|
+
name: `${exports.TOOL_PREFIX}_${baseName}`,
|
|
358
|
+
description: tool.description,
|
|
359
|
+
inputSchema: zodSchemaToJsonSchema(tool.schema),
|
|
360
|
+
}));
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Get the handler function for a specific tool by name.
|
|
364
|
+
*
|
|
365
|
+
* @param name The tool name (with or without mm_ prefix)
|
|
366
|
+
* @returns The tool handler function or undefined if tool not found
|
|
367
|
+
*/
|
|
368
|
+
function getToolHandler(name) {
|
|
369
|
+
const prefixedMatch = Object.entries(tools).find(([baseName]) => `${exports.TOOL_PREFIX}_${baseName}` === name);
|
|
370
|
+
if (prefixedMatch) {
|
|
371
|
+
return prefixedMatch[1].handler;
|
|
372
|
+
}
|
|
373
|
+
const tool = tools[name];
|
|
374
|
+
return tool?.handler;
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Check if a tool handler exists for the given tool name.
|
|
378
|
+
*
|
|
379
|
+
* @param name The tool name to check
|
|
380
|
+
* @returns True if a handler exists for the tool, false otherwise
|
|
381
|
+
*/
|
|
382
|
+
function hasToolHandler(name) {
|
|
383
|
+
return getToolHandler(name) !== undefined;
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Extract the base name from a tool name by removing the mm_ prefix.
|
|
387
|
+
*
|
|
388
|
+
* @param toolName The tool name (with or without mm_ prefix)
|
|
389
|
+
* @returns The base name without the prefix
|
|
390
|
+
*/
|
|
391
|
+
function extractBaseName(toolName) {
|
|
392
|
+
const prefixWithUnderscore = `${exports.TOOL_PREFIX}_`;
|
|
393
|
+
if (toolName.startsWith(prefixWithUnderscore)) {
|
|
394
|
+
return toolName.slice(prefixWithUnderscore.length);
|
|
395
|
+
}
|
|
396
|
+
return toolName;
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Validate tool input against the tool's schema and return parsed data.
|
|
400
|
+
*
|
|
401
|
+
* @param toolName The tool name to validate input for
|
|
402
|
+
* @param input The input data to validate
|
|
403
|
+
* @returns The validated and parsed input data
|
|
404
|
+
*/
|
|
405
|
+
function validateToolInput(toolName, input) {
|
|
406
|
+
const baseName = extractBaseName(toolName);
|
|
407
|
+
const tool = tools[baseName];
|
|
408
|
+
if (!tool) {
|
|
409
|
+
throw new Error(`Unknown tool: ${toolName}`);
|
|
410
|
+
}
|
|
411
|
+
return tool.schema.parse(input ?? {});
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Safely validate tool input without throwing errors.
|
|
415
|
+
*
|
|
416
|
+
* @param toolName The tool name to validate input for
|
|
417
|
+
* @param input The input data to validate
|
|
418
|
+
* @returns Object with success flag and either parsed data or error message
|
|
419
|
+
*/
|
|
420
|
+
function safeValidateToolInput(toolName, input) {
|
|
421
|
+
const baseName = extractBaseName(toolName);
|
|
422
|
+
const tool = tools[baseName];
|
|
423
|
+
if (!tool) {
|
|
424
|
+
return { success: false, error: `Unknown tool: ${toolName}` };
|
|
425
|
+
}
|
|
426
|
+
const result = tool.schema.safeParse(input ?? {});
|
|
427
|
+
if (!result.success) {
|
|
428
|
+
const errorMessage = result.error.issues
|
|
429
|
+
.map((issue) => `${issue.path.join('.')}: ${issue.message}`)
|
|
430
|
+
.join('; ');
|
|
431
|
+
return { success: false, error: errorMessage };
|
|
432
|
+
}
|
|
433
|
+
return { success: true, data: result.data };
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Get all available tool base names (without mm_ prefix).
|
|
437
|
+
*
|
|
438
|
+
* @returns Array of tool base names
|
|
439
|
+
*/
|
|
440
|
+
function getToolNames() {
|
|
441
|
+
return Object.keys(tools);
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Get all available tool names with mm_ prefix.
|
|
445
|
+
*
|
|
446
|
+
* @returns Array of prefixed tool names
|
|
447
|
+
*/
|
|
448
|
+
function getPrefixedToolNames() {
|
|
449
|
+
return Object.keys(tools).map((name) => `${exports.TOOL_PREFIX}_${name}`);
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Build a record mapping prefixed tool names to their handler functions.
|
|
453
|
+
*
|
|
454
|
+
* @returns Record of tool name to handler function mappings
|
|
455
|
+
*/
|
|
456
|
+
function buildToolHandlersRecord() {
|
|
457
|
+
const handlers = {};
|
|
458
|
+
for (const [baseName, tool] of Object.entries(tools)) {
|
|
459
|
+
handlers[`${exports.TOOL_PREFIX}_${baseName}`] = tool.handler;
|
|
460
|
+
}
|
|
461
|
+
return handlers;
|
|
462
|
+
}
|
|
463
|
+
//# sourceMappingURL=definitions.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definitions.cjs","sourceRoot":"","sources":["../../../src/mcp-server/tools/definitions.ts"],"names":[],"mappings":";;;AAseA,gDAMC;AAQD,wCAUC;AAQD,wCAEC;AAQD,0CAMC;AASD,8CAYC;AASD,sDAwCC;AAOD,oCAEC;AAOD,oDAEC;AAOD,0DAMC;AAznBD,+CA4BuB;AACvB,+DAA0D;AAC1D,0CAA4C;AAG5C,0CAAyC;AACzC,8CAA6C;AAC7C,kDAAiD;AACjD,8CAAkE;AAClE,8DAI8B;AAC9B,sDAA0E;AAC1E,kDAKwB;AACxB,4CAA2C;AAC3C,oDAKyB;AACzB,oDAAmD;AACnD,8CAKsB;AAEtB,0CAA4C;AAS/B,QAAA,WAAW,GAAG,IAAI,CAAC;AAgBhC;;;;GAIG;AACH,SAAS,kBAAkB;IACzB,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAC9B,MAAM,cAAc,GAAG,IAAA,sCAAiB,GAAE,CAAC;QAC3C,MAAM,YAAY,GAAqB;YACrC,GAAG,OAAO;YACV,eAAe,EAAE,cAAc,CAAC,kBAAkB,EAAE,EAAE;SACvD,CAAC;QACF,OAAO,IAAA,sBAAW,EAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAC1C,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,kBAAkB;IACzB,OAAO,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE;QAC1B,MAAM,cAAc,GAAG,IAAA,sCAAiB,GAAE,CAAC;QAC3C,MAAM,YAAY,GAAqB;YACrC,GAAG,OAAO;YACV,uBAAuB,EAAE,cAAc,CAAC,0BAA0B,EAAE,EAAE;SACvE,CAAC;QACF,OAAO,IAAA,yBAAc,EAAC,YAAY,CAAC,CAAC;IACtC,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,yBAAyB;IAChC,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAC9B,MAAM,cAAc,GAAG,IAAA,sCAAiB,GAAE,CAAC;QAC3C,MAAM,cAAc,GAAuB;YACzC,GAAG,OAAO;YACV,iBAAiB,EAAE,cAAc,CAAC,4BAA4B,EAAE,EAAE;SACnE,CAAC;QACF,OAAO,IAAA,+BAAkB,EAAC,KAA0B,EAAE,cAAc,CAAC,CAAC;IACxE,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,0BAA0B;IACjC,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAC9B,MAAM,cAAc,GAAG,IAAA,sCAAiB,GAAE,CAAC;QAC3C,MAAM,cAAc,GAAuB;YACzC,GAAG,OAAO;YACV,iBAAiB,EAAE,cAAc,CAAC,4BAA4B,EAAE,EAAE;SACnE,CAAC;QACF,OAAO,IAAA,gCAAmB,EAAC,KAA2B,EAAE,cAAc,CAAC,CAAC;IAC1E,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,+BAA+B;IACtC,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAC9B,MAAM,cAAc,GAAG,IAAA,sCAAiB,GAAE,CAAC;QAC3C,MAAM,cAAc,GAAuB;YACzC,GAAG,OAAO;YACV,iBAAiB,EAAE,cAAc,CAAC,4BAA4B,EAAE,EAAE;SACnE,CAAC;QACF,OAAO,IAAA,qCAAwB,EAC7B,KAAgC,EAChC,cAAc,CACf,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,kCAAkC;IACzC,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAC9B,MAAM,cAAc,GAAG,IAAA,sCAAiB,GAAE,CAAC;QAC3C,MAAM,cAAc,GAAuB;YACzC,GAAG,OAAO;YACV,iBAAiB,EAAE,cAAc,CAAC,4BAA4B,EAAE,EAAE;SACnE,CAAC;QACF,OAAO,IAAA,wCAA2B,EAChC,KAAmC,EACnC,cAAc,CACf,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,KAAK,GAA8B;IACvC,KAAK,EAAE;QACL,MAAM,EAAE,6BAAgB;QACxB,WAAW,EAAE,0DAA0D,mBAAW,oCAAoC;QACtH,OAAO,EAAE,kBAAkB,EAAE;KAC9B;IACD,MAAM,EAAE;QACN,MAAM,EAAE,8BAAiB;QACzB,WAAW,EACT,sGAAsG;QACxG,OAAO,EAAE,wBAA2B;KACrC;IACD,OAAO,EAAE;QACP,MAAM,EAAE,+BAAkB;QAC1B,WAAW,EACT,mEAAmE;QACrE,OAAO,EAAE,0BAA4B;KACtC;IACD,SAAS,EAAE;QACT,MAAM,EAAE,gCAAmB;QAC3B,WAAW,EACT,2FAA2F;QAC7F,OAAO,EAAE,kBAAkB,EAAE;KAC9B;IACD,QAAQ,EAAE;QACR,MAAM,EAAE,gCAAmB;QAC3B,WAAW,EAAE,iDAAiD;QAC9D,OAAO,EAAE,8BAA6B;KACvC;IACD,qBAAqB,EAAE;QACrB,MAAM,EAAE,2CAA8B;QACtC,WAAW,EACT,kJAAkJ;QACpJ,OAAO,EAAE,yCAAwC;KAClD;IACD,aAAa,EAAE;QACb,MAAM,EAAE,mCAAsB;QAC9B,WAAW,EAAE,yEAAyE,mBAAW,WAAW,mBAAW,wDAAwD;QAC/K,OAAO,EAAE,iCAAgC;KAC1C;IACD,SAAS,EAAE;QACT,MAAM,EAAE,gCAAmB;QAC3B,WAAW,EACT,iJAAiJ;QACnJ,OAAO,EAAE,8BAA6B;KACvC;IACD,YAAY,EAAE;QACZ,MAAM,EAAE,mCAAsB;QAC9B,WAAW,EACT,6GAA6G;QAC/G,OAAO,EAAE,sCAAgC;KAC1C;IACD,sBAAsB,EAAE;QACtB,MAAM,EAAE,6CAAgC;QACxC,WAAW,EAAE,uFAAuF,mBAAW,UAAU,mBAAW,QAAQ;QAC5I,OAAO,EAAE,gDAA0C;KACpD;IACD,eAAe,EAAE;QACf,MAAM,EAAE,sCAAyB;QACjC,WAAW,EACT,0GAA0G;QAC5G,OAAO,EAAE,yCAAmC;KAC7C;IACD,UAAU,EAAE;QACV,MAAM,EAAE,kCAAqB;QAC7B,WAAW,EAAE,2DAA2D;QACxE,OAAO,EAAE,gCAA+B;KACzC;IACD,KAAK,EAAE;QACL,MAAM,EAAE,6BAAgB;QACxB,WAAW,EACT,yEAAyE;QAC3E,OAAO,EAAE,4BAA0B;KACpC;IACD,IAAI,EAAE;QACJ,MAAM,EAAE,4BAAe;QACvB,WAAW,EACT,kFAAkF;QACpF,OAAO,EAAE,2BAAyB;KACnC;IACD,QAAQ,EAAE;QACR,MAAM,EAAE,+BAAkB;QAC1B,WAAW,EACT,8FAA8F;QAChG,OAAO,EAAE,8BAA4B;KACtC;IACD,cAAc,EAAE;QACd,MAAM,EAAE,qCAAwB;QAChC,WAAW,EACT,+EAA+E;QACjF,OAAO,EAAE,kCAAkC;KAC5C;IACD,gBAAgB,EAAE;QAChB,MAAM,EAAE,uCAA0B;QAClC,WAAW,EACT,0GAA0G;QAC5G,OAAO,EAAE,oCAAoC;KAC9C;IACD,mBAAmB,EAAE;QACnB,MAAM,EAAE,0CAA6B;QACrC,WAAW,EAAE,6DAA6D;QAC1E,OAAO,EAAE,uCAAuC;KACjD;IACD,kBAAkB,EAAE;QAClB,MAAM,EAAE,yCAA4B;QACpC,WAAW,EACT,2EAA2E;QAC7E,OAAO,EAAE,sCAAsC;KAChD;IACD,aAAa,EAAE;QACb,MAAM,EAAE,oCAAuB;QAC/B,WAAW,EACT,qNAAqN;QACvN,OAAO,EAAE,yBAAyB,EAAE;KACrC;IACD,cAAc,EAAE;QACd,MAAM,EAAE,qCAAwB;QAChC,WAAW,EAAE,8CAA8C;QAC3D,OAAO,EAAE,0BAA0B,EAAE;KACtC;IACD,oBAAoB,EAAE;QACpB,MAAM,EAAE,0CAA6B;QACrC,WAAW,EAAE,+CAA+C;QAC5D,OAAO,EAAE,+BAA+B,EAAE;KAC3C;IACD,cAAc,EAAE;QACd,MAAM,EAAE,6CAAgC;QACxC,WAAW,EAAE,oDAAoD;QACjE,OAAO,EAAE,kCAAkC,EAAE;KAC9C;IACD,SAAS,EAAE;QACT,MAAM,EAAE,gCAAmB;QAC3B,WAAW,EACT,+EAA+E;QACjF,OAAO,EAAE,yBAA6B;KACvC;IACD,WAAW,EAAE;QACX,MAAM,EAAE,kCAAqB;QAC7B,WAAW,EACT,6EAA6E;QAC/E,OAAO,EAAE,6BAA+B;KACzC;IACD,WAAW,EAAE;QACX,MAAM,EAAE,kCAAqB;QAC7B,WAAW,EACT,mFAAmF;QACrF,OAAO,EAAE,6BAA+B;KACzC;IACD,SAAS,EAAE;QACT,MAAM,EAAE,iCAAoB;QAC5B,WAAW,EACT,4OAA4O;QAC9O,OAAO,EAAE,8BAA8B;KACxC;CACF,CAAC;AAEF;;;;;;;;GAQG;AACH,SAAS,0BAA0B,CACjC,MAA+B;IAE/B,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAE7B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAA6B,EAAE,EAAE,CAChE,0BAA0B,CAAC,IAAI,CAAC,CACjC,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAA6B,EAAE,EAAE,CAChE,0BAA0B,CAAC,IAAI,CAAC,CACjC,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAA6B,EAAE,EAAE,CAChE,0BAA0B,CAAC,IAAI,CAAC,CACjC,CAAC;IACJ,CAAC;IAED,IACE,MAAM,CAAC,UAAU;QACjB,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;QACrC,MAAM,CAAC,UAAU,KAAK,IAAI,EAC1B,CAAC;QACD,MAAM,aAAa,GAA4B,EAAE,CAAC;QAClD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CACvC,MAAM,CAAC,UAAqC,CAC7C,EAAE,CAAC;YACF,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACvC,aAAa,CAAC,GAAG,CAAC,GAAG,0BAA0B,CAC7C,KAAgC,CACjC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,MAAM,CAAC,UAAU,GAAG,aAAa,CAAC;IACpC,CAAC;IAED,IACE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC9B,MAAM,CAAC,UAAU;QACjB,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,EACrC,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,CAAC,UAGzB,CAAC;QACF,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,QAAgB,EAAE,EAAE;YAC5D,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;YAClC,OAAO,IAAI,IAAI,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,IAAK,MAAM,CAAC,QAAqB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/C,OAAO,MAAM,CAAC,QAAQ,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,oBAAoB,CAC3B,MAA+B;IAE/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,gBAAgB,GAA4B,EAAE,CAAC;IACrD,MAAM,cAAc,GAAa,EAAE,CAAC;IAEpC,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,KAAkC,EAAE,CAAC;QAClE,IAAI,SAAS,CAAC,UAAU,IAAI,OAAO,SAAS,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YACrE,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtC,cAAc,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAA4B;QACtC,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,gBAAgB;QAC5B,oBAAoB,EAAE,KAAK;KAC5B,CAAC;IAEF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,MAAiB;IAC9C,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;IACzC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,UAAU,CAAC;IAE3C,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAE7C,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,sBAAsB,IAAI,SAAS,CAAC,EAAE,CAAC;QAC1E,SAAS,CAAC,oBAAoB,GAAG,KAAK,CAAC;IACzC,CAAC;IAED,OAAO,0BAA0B,CAAC,SAAS,CAAC,CAAC;AAC/C,CAAC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB;IAChC,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACtD,IAAI,EAAE,GAAG,mBAAW,IAAI,QAAQ,EAAE;QAClC,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,WAAW,EAAE,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC;KAChD,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,IAAY;IACzC,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAC9C,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,GAAG,mBAAW,IAAI,QAAQ,EAAE,KAAK,IAAI,CACtD,CAAC;IACF,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAClC,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,IAAI,EAAE,OAAO,CAAC;AACvB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,IAAY;IACzC,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;AAC5C,CAAC;AAED;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,QAAgB;IAC9C,MAAM,oBAAoB,GAAG,GAAG,mBAAW,GAAG,CAAC;IAC/C,IAAI,QAAQ,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC9C,OAAO,QAAQ,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,iBAAiB,CAC/B,QAAgB,EAChB,KAAc;IAEd,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAE7B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAS,CAAC;AAChD,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,qBAAqB,CACnC,QAAgB,EAChB,KAAc;IAsBd,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAE7B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,QAAQ,EAAE,EAAE,CAAC;IAChE,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM;aACrC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;aAC3D,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IACjD,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED;;;;GAIG;AACH,SAAgB,YAAY;IAC1B,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED;;;;GAIG;AACH,SAAgB,oBAAoB;IAClC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,mBAAW,IAAI,IAAI,EAAE,CAAC,CAAC;AACpE,CAAC;AAED;;;;GAIG;AACH,SAAgB,uBAAuB;IACrC,MAAM,QAAQ,GAAgC,EAAE,CAAC;IACjD,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACrD,QAAQ,CAAC,GAAG,mBAAW,IAAI,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;IACxD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["import type { ZodType } from 'zod';\n\nimport {\n buildInputSchema,\n launchInputSchema,\n cleanupInputSchema,\n getStateInputSchema,\n navigateInputSchema,\n waitForNotificationInputSchema,\n switchToTabInputSchema,\n closeTabInputSchema,\n listTestIdsInputSchema,\n accessibilitySnapshotInputSchema,\n describeScreenInputSchema,\n screenshotInputSchema,\n clickInputSchema,\n typeInputSchema,\n waitForInputSchema,\n knowledgeLastInputSchema,\n knowledgeSearchInputSchema,\n knowledgeSummarizeInputSchema,\n knowledgeSessionsInputSchema,\n seedContractInputSchema,\n seedContractsInputSchema,\n getContractAddressInputSchema,\n listDeployedContractsInputSchema,\n runStepsInputSchema,\n setContextInputSchema,\n getContextInputSchema,\n clipboardInputSchema,\n} from '../schemas.js';\nimport { getSessionManager } from '../session-manager.js';\nimport { handleRunSteps } from './batch.js';\nimport type { ToolHandler } from './batch.js';\nimport type { BuildToolOptions } from './build.js';\nimport { handleBuild } from './build.js';\nimport { handleCleanup } from './cleanup.js';\nimport { handleClipboard } from './clipboard.js';\nimport { handleSetContext, handleGetContext } from './context.js';\nimport {\n handleListTestIds,\n handleAccessibilitySnapshot,\n handleDescribeScreen,\n} from './discovery-tools.js';\nimport { handleClick, handleType, handleWaitFor } from './interaction.js';\nimport {\n handleKnowledgeLast,\n handleKnowledgeSearch,\n handleKnowledgeSummarize,\n handleKnowledgeSessions,\n} from './knowledge.js';\nimport { handleLaunch } from './launch.js';\nimport {\n handleNavigate,\n handleWaitForNotification,\n handleSwitchToTab,\n handleCloseTab,\n} from './navigation.js';\nimport { handleScreenshot } from './screenshot.js';\nimport {\n handleSeedContract,\n handleSeedContracts,\n handleGetContractAddress,\n handleListDeployedContracts,\n} from './seeding.js';\nimport type { SeedingToolOptions } from './seeding.js';\nimport { handleGetState } from './state.js';\nimport type { StateToolOptions } from './state.js';\nimport type {\n SeedContractInput,\n SeedContractsInput,\n GetContractAddressInput,\n ListDeployedContractsInput,\n} from '../types';\n\nexport const TOOL_PREFIX = 'mm';\n\nexport type ToolDefinition = {\n name: string;\n description: string;\n inputSchema: Record<string, unknown>;\n};\n\ntype ZodSchema = ZodType<unknown> & { toJSONSchema(): Record<string, unknown> };\n\ntype ToolEntry = {\n schema: ZodSchema;\n description: string;\n handler: ToolHandler;\n};\n\n/**\n * Create a handler for the build tool that injects build capability.\n *\n * @returns A tool handler function for building the extension\n */\nfunction createBuildHandler(): ToolHandler {\n return async (input, options) => {\n const sessionManager = getSessionManager();\n const buildOptions: BuildToolOptions = {\n ...options,\n buildCapability: sessionManager.getBuildCapability?.(),\n };\n return handleBuild(input, buildOptions);\n };\n}\n\n/**\n * Create a handler for the state tool that injects state snapshot capability.\n *\n * @returns A tool handler function for getting extension state\n */\nfunction createStateHandler(): ToolHandler {\n return async (_, options) => {\n const sessionManager = getSessionManager();\n const stateOptions: StateToolOptions = {\n ...options,\n stateSnapshotCapability: sessionManager.getStateSnapshotCapability?.(),\n };\n return handleGetState(stateOptions);\n };\n}\n\n/**\n * Create a handler for the seed contract tool that injects seeding capability.\n *\n * @returns A tool handler function for deploying a single contract\n */\nfunction createSeedContractHandler(): ToolHandler {\n return async (input, options) => {\n const sessionManager = getSessionManager();\n const seedingOptions: SeedingToolOptions = {\n ...options,\n seedingCapability: sessionManager.getContractSeedingCapability?.(),\n };\n return handleSeedContract(input as SeedContractInput, seedingOptions);\n };\n}\n\n/**\n * Create a handler for the seed contracts tool that injects seeding capability.\n *\n * @returns A tool handler function for deploying multiple contracts\n */\nfunction createSeedContractsHandler(): ToolHandler {\n return async (input, options) => {\n const sessionManager = getSessionManager();\n const seedingOptions: SeedingToolOptions = {\n ...options,\n seedingCapability: sessionManager.getContractSeedingCapability?.(),\n };\n return handleSeedContracts(input as SeedContractsInput, seedingOptions);\n };\n}\n\n/**\n * Create a handler for the get contract address tool that injects seeding capability.\n *\n * @returns A tool handler function for retrieving a deployed contract address\n */\nfunction createGetContractAddressHandler(): ToolHandler {\n return async (input, options) => {\n const sessionManager = getSessionManager();\n const seedingOptions: SeedingToolOptions = {\n ...options,\n seedingCapability: sessionManager.getContractSeedingCapability?.(),\n };\n return handleGetContractAddress(\n input as GetContractAddressInput,\n seedingOptions,\n );\n };\n}\n\n/**\n * Create a handler for the list contracts tool that injects seeding capability.\n *\n * @returns A tool handler function for listing deployed contracts\n */\nfunction createListDeployedContractsHandler(): ToolHandler {\n return async (input, options) => {\n const sessionManager = getSessionManager();\n const seedingOptions: SeedingToolOptions = {\n ...options,\n seedingCapability: sessionManager.getContractSeedingCapability?.(),\n };\n return handleListDeployedContracts(\n input as ListDeployedContractsInput,\n seedingOptions,\n );\n };\n}\n\nconst tools: Record<string, ToolEntry> = {\n build: {\n schema: buildInputSchema,\n description: `Build the extension using yarn build:test. Call before ${TOOL_PREFIX}_launch if extension is not built.`,\n handler: createBuildHandler(),\n },\n launch: {\n schema: launchInputSchema,\n description:\n 'Launch extension in a headed Chrome browser with Playwright. Returns session info and initial state.',\n handler: handleLaunch as ToolHandler,\n },\n cleanup: {\n schema: cleanupInputSchema,\n description:\n 'Stop the browser, Anvil, and all services. Always call when done.',\n handler: handleCleanup as ToolHandler,\n },\n get_state: {\n schema: getStateInputSchema,\n description:\n 'Get current extension state including screen, URL, balance, network, and account address.',\n handler: createStateHandler(),\n },\n navigate: {\n schema: navigateInputSchema,\n description: 'Navigate to a specific screen in the extension.',\n handler: handleNavigate as ToolHandler,\n },\n wait_for_notification: {\n schema: waitForNotificationInputSchema,\n description:\n 'Wait for notification popup to appear (e.g., after dapp interaction). Sets the notification page as the active page for subsequent interactions.',\n handler: handleWaitForNotification as ToolHandler,\n },\n switch_to_tab: {\n schema: switchToTabInputSchema,\n description: `Switch the active page to a different tracked tab. Use this to direct ${TOOL_PREFIX}_click, ${TOOL_PREFIX}_type, and other interaction tools to a specific page.`,\n handler: handleSwitchToTab as ToolHandler,\n },\n close_tab: {\n schema: closeTabInputSchema,\n description:\n 'Close a specific tab by role or URL. Cannot close the extension home page. If closing the active tab, automatically switches to extension home.',\n handler: handleCloseTab as ToolHandler,\n },\n list_testids: {\n schema: listTestIdsInputSchema,\n description:\n 'List all visible data-testid attributes on the current page. Use to discover available interaction targets.',\n handler: handleListTestIds as ToolHandler,\n },\n accessibility_snapshot: {\n schema: accessibilitySnapshotInputSchema,\n description: `Get trimmed accessibility tree with deterministic refs (e1, e2, ...). Use refs with ${TOOL_PREFIX}_click/${TOOL_PREFIX}_type.`,\n handler: handleAccessibilitySnapshot as ToolHandler,\n },\n describe_screen: {\n schema: describeScreenInputSchema,\n description:\n 'Get comprehensive screen state: extension state + testIds + accessibility snapshot. Optional screenshot.',\n handler: handleDescribeScreen as ToolHandler,\n },\n screenshot: {\n schema: screenshotInputSchema,\n description: 'Take a screenshot and save to test-artifacts/screenshots/',\n handler: handleScreenshot as ToolHandler,\n },\n click: {\n schema: clickInputSchema,\n description:\n 'Click an element. Specify exactly one of: a11yRef, testId, or selector.',\n handler: handleClick as ToolHandler,\n },\n type: {\n schema: typeInputSchema,\n description:\n 'Type text into an element. Specify exactly one of: a11yRef, testId, or selector.',\n handler: handleType as ToolHandler,\n },\n wait_for: {\n schema: waitForInputSchema,\n description:\n 'Wait for an element to become visible. Specify exactly one of: a11yRef, testId, or selector.',\n handler: handleWaitFor as ToolHandler,\n },\n knowledge_last: {\n schema: knowledgeLastInputSchema,\n description:\n 'Get the last N step records from the knowledge store for the current session.',\n handler: handleKnowledgeLast as ToolHandler,\n },\n knowledge_search: {\n schema: knowledgeSearchInputSchema,\n description:\n 'Search step records by tool name, screen, testId, or accessibility names. Default searches all sessions.',\n handler: handleKnowledgeSearch as ToolHandler,\n },\n knowledge_summarize: {\n schema: knowledgeSummarizeInputSchema,\n description: 'Generate a recipe-like summary of steps taken in a session.',\n handler: handleKnowledgeSummarize as ToolHandler,\n },\n knowledge_sessions: {\n schema: knowledgeSessionsInputSchema,\n description:\n 'List recent sessions with metadata for cross-session knowledge retrieval.',\n handler: handleKnowledgeSessions as ToolHandler,\n },\n seed_contract: {\n schema: seedContractInputSchema,\n description:\n 'Deploy a smart contract to the local Anvil node. Available: hst (ERC20 TST token), nfts (ERC721), erc1155, piggybank, failing (reverts), multisig, entrypoint (ERC-4337), simpleAccountFactory, verifyingPaymaster.',\n handler: createSeedContractHandler(),\n },\n seed_contracts: {\n schema: seedContractsInputSchema,\n description: 'Deploy multiple smart contracts in sequence.',\n handler: createSeedContractsHandler(),\n },\n get_contract_address: {\n schema: getContractAddressInputSchema,\n description: 'Get the deployed address of a smart contract.',\n handler: createGetContractAddressHandler(),\n },\n list_contracts: {\n schema: listDeployedContractsInputSchema,\n description: 'List all smart contracts deployed in this session.',\n handler: createListDeployedContractsHandler(),\n },\n run_steps: {\n schema: runStepsInputSchema,\n description:\n 'Execute multiple tools in sequence. Reduces round trips for multi-step flows.',\n handler: handleRunSteps as ToolHandler,\n },\n set_context: {\n schema: setContextInputSchema,\n description:\n 'Switch workflow context (e2e or prod). Cannot switch during active session.',\n handler: handleSetContext as ToolHandler,\n },\n get_context: {\n schema: getContextInputSchema,\n description:\n 'Get current context, available capabilities, and whether context can be switched.',\n handler: handleGetContext as ToolHandler,\n },\n clipboard: {\n schema: clipboardInputSchema,\n description:\n \"Write text to or read text from the browser clipboard. Use action='write' with text parameter to write, or action='read' to read current clipboard content. Useful for pasting SRP or other data into components that have paste handlers.\",\n handler: handleClipboard as ToolHandler,\n },\n};\n\n/**\n * Zod v4's toJSONSchema() marks properties with defaults as required.\n * This is incorrect for MCP tool input schemas where LLM clients shouldn't\n * be required to provide values that have defaults. This function recursively\n * removes those properties from the required array.\n *\n * @param schema The JSON schema to process\n * @returns The modified schema with defaults removed from required array\n */\nfunction removeDefaultsFromRequired(\n schema: Record<string, unknown>,\n): Record<string, unknown> {\n const result = { ...schema };\n\n if (Array.isArray(result.allOf)) {\n result.allOf = result.allOf.map((item: Record<string, unknown>) =>\n removeDefaultsFromRequired(item),\n );\n }\n\n if (Array.isArray(result.anyOf)) {\n result.anyOf = result.anyOf.map((item: Record<string, unknown>) =>\n removeDefaultsFromRequired(item),\n );\n }\n\n if (Array.isArray(result.oneOf)) {\n result.oneOf = result.oneOf.map((item: Record<string, unknown>) =>\n removeDefaultsFromRequired(item),\n );\n }\n\n if (\n result.properties &&\n typeof result.properties === 'object' &&\n result.properties !== null\n ) {\n const newProperties: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(\n result.properties as Record<string, unknown>,\n )) {\n if (value && typeof value === 'object') {\n newProperties[key] = removeDefaultsFromRequired(\n value as Record<string, unknown>,\n );\n } else {\n newProperties[key] = value;\n }\n }\n result.properties = newProperties;\n }\n\n if (\n Array.isArray(result.required) &&\n result.properties &&\n typeof result.properties === 'object'\n ) {\n const properties = result.properties as Record<\n string,\n Record<string, unknown>\n >;\n result.required = result.required.filter((propName: string) => {\n const prop = properties[propName];\n return prop && !('default' in prop);\n });\n\n if ((result.required as string[]).length === 0) {\n delete result.required;\n }\n }\n\n return result;\n}\n\n/**\n * MCP protocol doesn't support allOf/oneOf/anyOf at the top level of input schemas.\n * This flattens allOf into a single merged object schema.\n *\n * @param schema The JSON schema to flatten\n * @returns The flattened schema with allOf merged into properties\n */\nfunction flattenTopLevelAllOf(\n schema: Record<string, unknown>,\n): Record<string, unknown> {\n if (!Array.isArray(schema.allOf)) {\n return schema;\n }\n\n const mergedProperties: Record<string, unknown> = {};\n const mergedRequired: string[] = [];\n\n for (const subSchema of schema.allOf as Record<string, unknown>[]) {\n if (subSchema.properties && typeof subSchema.properties === 'object') {\n Object.assign(mergedProperties, subSchema.properties);\n }\n if (Array.isArray(subSchema.required)) {\n mergedRequired.push(...subSchema.required);\n }\n }\n\n const result: Record<string, unknown> = {\n type: 'object',\n properties: mergedProperties,\n additionalProperties: false,\n };\n\n if (mergedRequired.length > 0) {\n result.required = [...new Set(mergedRequired)];\n }\n\n return result;\n}\n\n/**\n * Convert a Zod schema to a JSON schema suitable for MCP tool definitions.\n *\n * @param schema The Zod schema to convert\n * @returns The converted JSON schema with defaults removed and allOf flattened\n */\nfunction zodSchemaToJsonSchema(schema: ZodSchema): Record<string, unknown> {\n const jsonSchema = schema.toJSONSchema();\n const { $schema: _, ...rest } = jsonSchema;\n\n const flattened = flattenTopLevelAllOf(rest);\n\n if (flattened.type === 'object' && !('additionalProperties' in flattened)) {\n flattened.additionalProperties = false;\n }\n\n return removeDefaultsFromRequired(flattened);\n}\n\n/**\n * Get all tool definitions with their schemas and descriptions.\n *\n * @returns Array of tool definitions for all available MCP tools\n */\nexport function getToolDefinitions(): ToolDefinition[] {\n return Object.entries(tools).map(([baseName, tool]) => ({\n name: `${TOOL_PREFIX}_${baseName}`,\n description: tool.description,\n inputSchema: zodSchemaToJsonSchema(tool.schema),\n }));\n}\n\n/**\n * Get the handler function for a specific tool by name.\n *\n * @param name The tool name (with or without mm_ prefix)\n * @returns The tool handler function or undefined if tool not found\n */\nexport function getToolHandler(name: string): ToolHandler | undefined {\n const prefixedMatch = Object.entries(tools).find(\n ([baseName]) => `${TOOL_PREFIX}_${baseName}` === name,\n );\n if (prefixedMatch) {\n return prefixedMatch[1].handler;\n }\n\n const tool = tools[name];\n return tool?.handler;\n}\n\n/**\n * Check if a tool handler exists for the given tool name.\n *\n * @param name The tool name to check\n * @returns True if a handler exists for the tool, false otherwise\n */\nexport function hasToolHandler(name: string): boolean {\n return getToolHandler(name) !== undefined;\n}\n\n/**\n * Extract the base name from a tool name by removing the mm_ prefix.\n *\n * @param toolName The tool name (with or without mm_ prefix)\n * @returns The base name without the prefix\n */\nexport function extractBaseName(toolName: string): string {\n const prefixWithUnderscore = `${TOOL_PREFIX}_`;\n if (toolName.startsWith(prefixWithUnderscore)) {\n return toolName.slice(prefixWithUnderscore.length);\n }\n return toolName;\n}\n\n/**\n * Validate tool input against the tool's schema and return parsed data.\n *\n * @param toolName The tool name to validate input for\n * @param input The input data to validate\n * @returns The validated and parsed input data\n */\nexport function validateToolInput<Type = unknown>(\n toolName: string,\n input: unknown,\n): Type {\n const baseName = extractBaseName(toolName);\n const tool = tools[baseName];\n\n if (!tool) {\n throw new Error(`Unknown tool: ${toolName}`);\n }\n\n return tool.schema.parse(input ?? {}) as Type;\n}\n\n/**\n * Safely validate tool input without throwing errors.\n *\n * @param toolName The tool name to validate input for\n * @param input The input data to validate\n * @returns Object with success flag and either parsed data or error message\n */\nexport function safeValidateToolInput(\n toolName: string,\n input: unknown,\n):\n | {\n /**\n * Indicates validation succeeded\n */\n success: true;\n /**\n * The validated and parsed input data\n */\n data: unknown;\n }\n | {\n /**\n * Indicates validation failed\n */\n success: false;\n /**\n * Error message describing validation failure\n */\n error: string;\n } {\n const baseName = extractBaseName(toolName);\n const tool = tools[baseName];\n\n if (!tool) {\n return { success: false, error: `Unknown tool: ${toolName}` };\n }\n\n const result = tool.schema.safeParse(input ?? {});\n if (!result.success) {\n const errorMessage = result.error.issues\n .map((issue) => `${issue.path.join('.')}: ${issue.message}`)\n .join('; ');\n return { success: false, error: errorMessage };\n }\n\n return { success: true, data: result.data };\n}\n\n/**\n * Get all available tool base names (without mm_ prefix).\n *\n * @returns Array of tool base names\n */\nexport function getToolNames(): string[] {\n return Object.keys(tools);\n}\n\n/**\n * Get all available tool names with mm_ prefix.\n *\n * @returns Array of prefixed tool names\n */\nexport function getPrefixedToolNames(): string[] {\n return Object.keys(tools).map((name) => `${TOOL_PREFIX}_${name}`);\n}\n\n/**\n * Build a record mapping prefixed tool names to their handler functions.\n *\n * @returns Record of tool name to handler function mappings\n */\nexport function buildToolHandlersRecord(): Record<string, ToolHandler> {\n const handlers: Record<string, ToolHandler> = {};\n for (const [baseName, tool] of Object.entries(tools)) {\n handlers[`${TOOL_PREFIX}_${baseName}`] = tool.handler;\n }\n return handlers;\n}\n\nexport type { ToolEntry };\n"]}
|