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