@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,149 @@
|
|
|
1
|
+
import type { Page } from "@playwright/test";
|
|
2
|
+
import type { ExtensionState } from "../../capabilities/types.mjs";
|
|
3
|
+
import type { McpResponse, ErrorCode, StepRecordObservation } from "../types/index.mjs";
|
|
4
|
+
/**
|
|
5
|
+
* Level of detail to collect for observation data.
|
|
6
|
+
* - "full": Collect state, testIds, and a11y tree
|
|
7
|
+
* - "minimal": Collect state only (no testIds or a11y)
|
|
8
|
+
* - "none": Return empty observation
|
|
9
|
+
*/
|
|
10
|
+
export type ObservationLevel = 'full' | 'minimal' | 'none';
|
|
11
|
+
/**
|
|
12
|
+
* Parameters for recording a tool step in the knowledge store.
|
|
13
|
+
*/
|
|
14
|
+
export type RecordStepParams = {
|
|
15
|
+
/**
|
|
16
|
+
* Name of the tool that was executed
|
|
17
|
+
*/
|
|
18
|
+
toolName: string;
|
|
19
|
+
/**
|
|
20
|
+
* Input parameters passed to the tool
|
|
21
|
+
*/
|
|
22
|
+
input: Record<string, unknown>;
|
|
23
|
+
/**
|
|
24
|
+
* Timestamp when the tool execution started
|
|
25
|
+
*/
|
|
26
|
+
startTime: number;
|
|
27
|
+
/**
|
|
28
|
+
* Observation data collected after tool execution
|
|
29
|
+
*/
|
|
30
|
+
observation: StepRecordObservation;
|
|
31
|
+
/**
|
|
32
|
+
* Target element information (selector, testId, etc.)
|
|
33
|
+
*/
|
|
34
|
+
target?: Record<string, string>;
|
|
35
|
+
/**
|
|
36
|
+
* Path to screenshot file if captured
|
|
37
|
+
*/
|
|
38
|
+
screenshotPath?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Screenshot dimensions if captured
|
|
41
|
+
*/
|
|
42
|
+
screenshotDimensions?: {
|
|
43
|
+
/**
|
|
44
|
+
* Screenshot width in pixels
|
|
45
|
+
*/
|
|
46
|
+
width: number;
|
|
47
|
+
/**
|
|
48
|
+
* Screenshot height in pixels
|
|
49
|
+
*/
|
|
50
|
+
height: number;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Context information for an active session.
|
|
55
|
+
*/
|
|
56
|
+
export type ActiveSessionContext = {
|
|
57
|
+
/**
|
|
58
|
+
* Unique session identifier
|
|
59
|
+
*/
|
|
60
|
+
sessionId: string;
|
|
61
|
+
/**
|
|
62
|
+
* Current active page instance
|
|
63
|
+
*/
|
|
64
|
+
page: Page;
|
|
65
|
+
/**
|
|
66
|
+
* Map of accessibility references to selectors
|
|
67
|
+
*/
|
|
68
|
+
refMap: Map<string, string>;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Check if an active session exists and return error if not.
|
|
72
|
+
*
|
|
73
|
+
* @param startTime - Timestamp when the operation started
|
|
74
|
+
* @returns Error response if no active session, undefined otherwise
|
|
75
|
+
*/
|
|
76
|
+
export declare function requireActiveSession<Result>(startTime: number): McpResponse<Result> | undefined;
|
|
77
|
+
/**
|
|
78
|
+
* Collect observation data from the current page state.
|
|
79
|
+
*
|
|
80
|
+
* @param page - The page to collect observation from
|
|
81
|
+
* @param level - Level of detail to collect (full, minimal, or none)
|
|
82
|
+
* @param presetState - Optional pre-fetched extension state to use instead of querying
|
|
83
|
+
* @returns Observation data with state, testIds, and accessibility tree
|
|
84
|
+
*/
|
|
85
|
+
export declare function collectObservation(page: Page | undefined, level: ObservationLevel, presetState?: ExtensionState): Promise<StepRecordObservation>;
|
|
86
|
+
/**
|
|
87
|
+
* Wrapper that ensures an active session exists before executing a handler.
|
|
88
|
+
*
|
|
89
|
+
* @param handler - Function to execute with active session context
|
|
90
|
+
* @returns Wrapped function that validates session before calling handler
|
|
91
|
+
*/
|
|
92
|
+
export declare function withActiveSession<TInput, TResult>(handler: (input: TInput, ctx: ActiveSessionContext, startTime: number) => Promise<McpResponse<TResult>>): (input: TInput) => Promise<McpResponse<TResult>>;
|
|
93
|
+
/**
|
|
94
|
+
* Record a tool execution step in the knowledge store.
|
|
95
|
+
*
|
|
96
|
+
* @param params - Parameters containing tool name, input, observation, and metadata
|
|
97
|
+
*/
|
|
98
|
+
export declare function recordToolStep(params: RecordStepParams): Promise<void>;
|
|
99
|
+
/**
|
|
100
|
+
* Collect observation data and record the tool step in the knowledge store.
|
|
101
|
+
*
|
|
102
|
+
* @param page - The page to collect observation from
|
|
103
|
+
* @param toolName - Name of the tool that was executed
|
|
104
|
+
* @param input - Input parameters passed to the tool
|
|
105
|
+
* @param startTime - Timestamp when the tool execution started
|
|
106
|
+
* @param options - Optional metadata for the step record
|
|
107
|
+
* @param options.target - Target element information
|
|
108
|
+
* @param options.screenshotPath - Path to screenshot file if captured
|
|
109
|
+
* @param options.screenshotDimensions - Screenshot dimensions
|
|
110
|
+
* @param options.screenshotDimensions.width - Screenshot width in pixels
|
|
111
|
+
* @param options.screenshotDimensions.height - Screenshot height in pixels
|
|
112
|
+
* @returns Observation data collected after tool execution
|
|
113
|
+
*/
|
|
114
|
+
export declare function collectObservationAndRecord(page: Page, toolName: string, input: Record<string, unknown>, startTime: number, options?: {
|
|
115
|
+
/**
|
|
116
|
+
* Target element information (selector, testId, etc.)
|
|
117
|
+
*/
|
|
118
|
+
target?: Record<string, string>;
|
|
119
|
+
/**
|
|
120
|
+
* Path to screenshot file if captured
|
|
121
|
+
*/
|
|
122
|
+
screenshotPath?: string;
|
|
123
|
+
/**
|
|
124
|
+
* Screenshot dimensions if captured
|
|
125
|
+
*/
|
|
126
|
+
screenshotDimensions?: {
|
|
127
|
+
/**
|
|
128
|
+
* Screenshot width in pixels
|
|
129
|
+
*/
|
|
130
|
+
width: number;
|
|
131
|
+
/**
|
|
132
|
+
* Screenshot height in pixels
|
|
133
|
+
*/
|
|
134
|
+
height: number;
|
|
135
|
+
};
|
|
136
|
+
}): Promise<StepRecordObservation>;
|
|
137
|
+
/**
|
|
138
|
+
* Handle tool execution errors and return appropriate error response.
|
|
139
|
+
*
|
|
140
|
+
* @param error - The error that occurred during tool execution
|
|
141
|
+
* @param defaultCode - Default error code to use if no specific match found
|
|
142
|
+
* @param defaultMessage - Default error message to use
|
|
143
|
+
* @param input - Input parameters that were passed to the tool
|
|
144
|
+
* @param sessionId - Current session ID for error context
|
|
145
|
+
* @param startTime - Timestamp when the tool execution started
|
|
146
|
+
* @returns Error response with appropriate code and message
|
|
147
|
+
*/
|
|
148
|
+
export declare function handleToolError<Result>(error: unknown, defaultCode: ErrorCode, defaultMessage: string, input: unknown, sessionId: string | undefined, startTime: number): McpResponse<Result>;
|
|
149
|
+
//# sourceMappingURL=helpers.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.mts","sourceRoot":"","sources":["../../../src/mcp-server/tools/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { OBSERVATION_TESTID_LIMIT } from "../constants.mjs";
|
|
2
|
+
import { collectTestIds, collectTrimmedA11ySnapshot } from "../discovery.mjs";
|
|
3
|
+
import { knowledgeStore, createDefaultObservation } from "../knowledge-store.mjs";
|
|
4
|
+
import { getSessionManager } from "../session-manager.mjs";
|
|
5
|
+
import { ErrorCodes } from "../types/index.mjs";
|
|
6
|
+
import { createErrorResponse, extractErrorMessage, debugWarn } from "../utils/index.mjs";
|
|
7
|
+
/**
|
|
8
|
+
* Check if an active session exists and return error if not.
|
|
9
|
+
*
|
|
10
|
+
* @param startTime - Timestamp when the operation started
|
|
11
|
+
* @returns Error response if no active session, undefined otherwise
|
|
12
|
+
*/
|
|
13
|
+
export function requireActiveSession(startTime) {
|
|
14
|
+
const sessionManager = getSessionManager();
|
|
15
|
+
if (!sessionManager.hasActiveSession()) {
|
|
16
|
+
return createErrorResponse(ErrorCodes.MM_NO_ACTIVE_SESSION, 'No active session. Call launch first.', undefined, undefined, startTime);
|
|
17
|
+
}
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Collect observation data from the current page state.
|
|
22
|
+
*
|
|
23
|
+
* @param page - The page to collect observation from
|
|
24
|
+
* @param level - Level of detail to collect (full, minimal, or none)
|
|
25
|
+
* @param presetState - Optional pre-fetched extension state to use instead of querying
|
|
26
|
+
* @returns Observation data with state, testIds, and accessibility tree
|
|
27
|
+
*/
|
|
28
|
+
export async function collectObservation(page, level, presetState) {
|
|
29
|
+
const sessionManager = getSessionManager();
|
|
30
|
+
if (level === 'none') {
|
|
31
|
+
return createDefaultObservation({}, [], []);
|
|
32
|
+
}
|
|
33
|
+
const state = presetState ?? (await sessionManager.getExtensionState());
|
|
34
|
+
if (level === 'minimal') {
|
|
35
|
+
return createDefaultObservation(state, [], []);
|
|
36
|
+
}
|
|
37
|
+
if (!page) {
|
|
38
|
+
debugWarn('collectObservation', 'Page not provided for full observation');
|
|
39
|
+
return createDefaultObservation(state, [], []);
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
const testIds = await collectTestIds(page, OBSERVATION_TESTID_LIMIT);
|
|
43
|
+
const { nodes, refMap } = await collectTrimmedA11ySnapshot(page);
|
|
44
|
+
sessionManager.setRefMap(refMap);
|
|
45
|
+
return createDefaultObservation(state, testIds, nodes);
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
debugWarn('collectObservation', error);
|
|
49
|
+
return createDefaultObservation(state, [], []);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Wrapper that ensures an active session exists before executing a handler.
|
|
54
|
+
*
|
|
55
|
+
* @param handler - Function to execute with active session context
|
|
56
|
+
* @returns Wrapped function that validates session before calling handler
|
|
57
|
+
*/
|
|
58
|
+
export function withActiveSession(handler) {
|
|
59
|
+
return async (input) => {
|
|
60
|
+
const startTime = Date.now();
|
|
61
|
+
const sessionManager = getSessionManager();
|
|
62
|
+
const sessionError = requireActiveSession(startTime);
|
|
63
|
+
if (sessionError) {
|
|
64
|
+
return sessionError;
|
|
65
|
+
}
|
|
66
|
+
const sessionId = sessionManager.getSessionId();
|
|
67
|
+
if (!sessionId) {
|
|
68
|
+
return createErrorResponse(ErrorCodes.MM_NO_ACTIVE_SESSION, 'Session ID not found', undefined, undefined, startTime);
|
|
69
|
+
}
|
|
70
|
+
const page = sessionManager.getPage();
|
|
71
|
+
const refMap = sessionManager.getRefMap();
|
|
72
|
+
return handler(input, { sessionId, page, refMap }, startTime);
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Record a tool execution step in the knowledge store.
|
|
77
|
+
*
|
|
78
|
+
* @param params - Parameters containing tool name, input, observation, and metadata
|
|
79
|
+
*/
|
|
80
|
+
export async function recordToolStep(params) {
|
|
81
|
+
const sessionManager = getSessionManager();
|
|
82
|
+
const sessionId = sessionManager.getSessionId() ?? '';
|
|
83
|
+
await knowledgeStore.recordStep({
|
|
84
|
+
sessionId,
|
|
85
|
+
toolName: params.toolName,
|
|
86
|
+
input: params.input,
|
|
87
|
+
target: params.target,
|
|
88
|
+
outcome: { ok: true },
|
|
89
|
+
observation: params.observation,
|
|
90
|
+
durationMs: Date.now() - params.startTime,
|
|
91
|
+
screenshotPath: params.screenshotPath,
|
|
92
|
+
screenshotDimensions: params.screenshotDimensions,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Collect observation data and record the tool step in the knowledge store.
|
|
97
|
+
*
|
|
98
|
+
* @param page - The page to collect observation from
|
|
99
|
+
* @param toolName - Name of the tool that was executed
|
|
100
|
+
* @param input - Input parameters passed to the tool
|
|
101
|
+
* @param startTime - Timestamp when the tool execution started
|
|
102
|
+
* @param options - Optional metadata for the step record
|
|
103
|
+
* @param options.target - Target element information
|
|
104
|
+
* @param options.screenshotPath - Path to screenshot file if captured
|
|
105
|
+
* @param options.screenshotDimensions - Screenshot dimensions
|
|
106
|
+
* @param options.screenshotDimensions.width - Screenshot width in pixels
|
|
107
|
+
* @param options.screenshotDimensions.height - Screenshot height in pixels
|
|
108
|
+
* @returns Observation data collected after tool execution
|
|
109
|
+
*/
|
|
110
|
+
export async function collectObservationAndRecord(page, toolName, input, startTime, options = {}) {
|
|
111
|
+
const observation = await collectObservation(page, 'full');
|
|
112
|
+
await recordToolStep({
|
|
113
|
+
toolName,
|
|
114
|
+
input,
|
|
115
|
+
startTime,
|
|
116
|
+
observation,
|
|
117
|
+
target: options.target,
|
|
118
|
+
screenshotPath: options.screenshotPath,
|
|
119
|
+
screenshotDimensions: options.screenshotDimensions,
|
|
120
|
+
});
|
|
121
|
+
return observation;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Handle tool execution errors and return appropriate error response.
|
|
125
|
+
*
|
|
126
|
+
* @param error - The error that occurred during tool execution
|
|
127
|
+
* @param defaultCode - Default error code to use if no specific match found
|
|
128
|
+
* @param defaultMessage - Default error message to use
|
|
129
|
+
* @param input - Input parameters that were passed to the tool
|
|
130
|
+
* @param sessionId - Current session ID for error context
|
|
131
|
+
* @param startTime - Timestamp when the tool execution started
|
|
132
|
+
* @returns Error response with appropriate code and message
|
|
133
|
+
*/
|
|
134
|
+
export function handleToolError(error, defaultCode, defaultMessage, input, sessionId, startTime) {
|
|
135
|
+
const message = extractErrorMessage(error);
|
|
136
|
+
if (message.includes('Unknown a11yRef') || message.includes('not found')) {
|
|
137
|
+
return createErrorResponse(ErrorCodes.MM_TARGET_NOT_FOUND, message, { input }, sessionId, startTime);
|
|
138
|
+
}
|
|
139
|
+
return createErrorResponse(defaultCode, `${defaultMessage}: ${message}`, { input }, sessionId, startTime);
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=helpers.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.mjs","sourceRoot":"","sources":["../../../src/mcp-server/tools/helpers.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,wBAAwB,EAAE,yBAAwB;AAC3D,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,yBAAwB;AAC7E,OAAO,EACL,cAAc,EACd,wBAAwB,EACzB,+BAA8B;AAC/B,OAAO,EAAE,iBAAiB,EAAE,+BAA8B;AAO1D,OAAO,EAAE,UAAU,EAAE,2BAAiB;AACtC,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,SAAS,EAAE,2BAAiB;AAuE/E;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAAiB;IAEjB,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAC3C,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE,EAAE,CAAC;QACvC,OAAO,mBAAmB,CACxB,UAAU,CAAC,oBAAoB,EAC/B,uCAAuC,EACvC,SAAS,EACT,SAAS,EACT,SAAS,CACa,CAAC;IAC3B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAsB,EACtB,KAAuB,EACvB,WAA4B;IAE5B,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAE3C,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,OAAO,wBAAwB,CAAC,EAAoB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,IAAI,CAAC,MAAM,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAExE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,wBAAwB,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,SAAS,CAAC,oBAAoB,EAAE,wCAAwC,CAAC,CAAC;QAC1E,OAAO,wBAAwB,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAiB,MAAM,cAAc,CAChD,IAAI,EACJ,wBAAwB,CACzB,CAAC;QACF,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,0BAA0B,CAAC,IAAI,CAAC,CAAC;QACjE,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACjC,OAAO,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,SAAS,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;QACvC,OAAO,wBAAwB,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAIkC;IAElC,OAAO,KAAK,EAAE,KAAa,EAAiC,EAAE;QAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;QAE3C,MAAM,YAAY,GAAG,oBAAoB,CAAU,SAAS,CAAC,CAAC;QAC9D,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,MAAM,SAAS,GAAG,cAAc,CAAC,YAAY,EAAE,CAAC;QAChD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,mBAAmB,CACxB,UAAU,CAAC,oBAAoB,EAC/B,sBAAsB,EACtB,SAAS,EACT,SAAS,EACT,SAAS,CACc,CAAC;QAC5B,CAAC;QACD,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,EAAE,CAAC;QAE1C,OAAO,OAAO,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAwB;IAC3D,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,cAAc,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;IAEtD,MAAM,cAAc,CAAC,UAAU,CAAC;QAC9B,SAAS;QACT,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;QACrB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS;QACzC,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;KAClD,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,IAAU,EACV,QAAgB,EAChB,KAA8B,EAC9B,SAAiB,EACjB,UAsBI,EAAE;IAEN,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAE3D,MAAM,cAAc,CAAC;QACnB,QAAQ;QACR,KAAK;QACL,SAAS;QACT,WAAW;QACX,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;KACnD,CAAC,CAAC;IAEH,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAc,EACd,WAAsB,EACtB,cAAsB,EACtB,KAAc,EACd,SAA6B,EAC7B,SAAiB;IAEjB,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAE3C,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACzE,OAAO,mBAAmB,CACxB,UAAU,CAAC,mBAAmB,EAC9B,OAAO,EACP,EAAE,KAAK,EAAE,EACT,SAAS,EACT,SAAS,CACa,CAAC;IAC3B,CAAC;IAED,OAAO,mBAAmB,CACxB,WAAW,EACX,GAAG,cAAc,KAAK,OAAO,EAAE,EAC/B,EAAE,KAAK,EAAE,EACT,SAAS,EACT,SAAS,CACa,CAAC;AAC3B,CAAC","sourcesContent":["import type { Page } from '@playwright/test';\n\nimport type { ExtensionState } from '../../capabilities/types.js';\nimport { OBSERVATION_TESTID_LIMIT } from '../constants.js';\nimport { collectTestIds, collectTrimmedA11ySnapshot } from '../discovery.js';\nimport {\n knowledgeStore,\n createDefaultObservation,\n} from '../knowledge-store.js';\nimport { getSessionManager } from '../session-manager.js';\nimport type {\n McpResponse,\n ErrorCode,\n TestIdItem,\n StepRecordObservation,\n} from '../types';\nimport { ErrorCodes } from '../types';\nimport { createErrorResponse, extractErrorMessage, debugWarn } from '../utils';\n\n/**\n * Level of detail to collect for observation data.\n * - \"full\": Collect state, testIds, and a11y tree\n * - \"minimal\": Collect state only (no testIds or a11y)\n * - \"none\": Return empty observation\n */\nexport type ObservationLevel = 'full' | 'minimal' | 'none';\n\n/**\n * Parameters for recording a tool step in the knowledge store.\n */\nexport type RecordStepParams = {\n /**\n * Name of the tool that was executed\n */\n toolName: string;\n /**\n * Input parameters passed to the tool\n */\n input: Record<string, unknown>;\n /**\n * Timestamp when the tool execution started\n */\n startTime: number;\n /**\n * Observation data collected after tool execution\n */\n observation: StepRecordObservation;\n /**\n * Target element information (selector, testId, etc.)\n */\n target?: Record<string, string>;\n /**\n * Path to screenshot file if captured\n */\n screenshotPath?: string;\n /**\n * Screenshot dimensions if captured\n */\n screenshotDimensions?: {\n /**\n * Screenshot width in pixels\n */\n width: number;\n /**\n * Screenshot height in pixels\n */\n height: number;\n };\n};\n\n/**\n * Context information for an active session.\n */\nexport type ActiveSessionContext = {\n /**\n * Unique session identifier\n */\n sessionId: string;\n /**\n * Current active page instance\n */\n page: Page;\n /**\n * Map of accessibility references to selectors\n */\n refMap: Map<string, string>;\n};\n\n/**\n * Check if an active session exists and return error if not.\n *\n * @param startTime - Timestamp when the operation started\n * @returns Error response if no active session, undefined otherwise\n */\nexport function requireActiveSession<Result>(\n startTime: number,\n): McpResponse<Result> | undefined {\n const sessionManager = getSessionManager();\n if (!sessionManager.hasActiveSession()) {\n return createErrorResponse(\n ErrorCodes.MM_NO_ACTIVE_SESSION,\n 'No active session. Call launch first.',\n undefined,\n undefined,\n startTime,\n ) as McpResponse<Result>;\n }\n return undefined;\n}\n\n/**\n * Collect observation data from the current page state.\n *\n * @param page - The page to collect observation from\n * @param level - Level of detail to collect (full, minimal, or none)\n * @param presetState - Optional pre-fetched extension state to use instead of querying\n * @returns Observation data with state, testIds, and accessibility tree\n */\nexport async function collectObservation(\n page: Page | undefined,\n level: ObservationLevel,\n presetState?: ExtensionState,\n): Promise<StepRecordObservation> {\n const sessionManager = getSessionManager();\n\n if (level === 'none') {\n return createDefaultObservation({} as ExtensionState, [], []);\n }\n\n const state = presetState ?? (await sessionManager.getExtensionState());\n\n if (level === 'minimal') {\n return createDefaultObservation(state, [], []);\n }\n\n if (!page) {\n debugWarn('collectObservation', 'Page not provided for full observation');\n return createDefaultObservation(state, [], []);\n }\n\n try {\n const testIds: TestIdItem[] = await collectTestIds(\n page,\n OBSERVATION_TESTID_LIMIT,\n );\n const { nodes, refMap } = await collectTrimmedA11ySnapshot(page);\n sessionManager.setRefMap(refMap);\n return createDefaultObservation(state, testIds, nodes);\n } catch (error) {\n debugWarn('collectObservation', error);\n return createDefaultObservation(state, [], []);\n }\n}\n\n/**\n * Wrapper that ensures an active session exists before executing a handler.\n *\n * @param handler - Function to execute with active session context\n * @returns Wrapped function that validates session before calling handler\n */\nexport function withActiveSession<TInput, TResult>(\n handler: (\n input: TInput,\n ctx: ActiveSessionContext,\n startTime: number,\n ) => Promise<McpResponse<TResult>>,\n): (input: TInput) => Promise<McpResponse<TResult>> {\n return async (input: TInput): Promise<McpResponse<TResult>> => {\n const startTime = Date.now();\n const sessionManager = getSessionManager();\n\n const sessionError = requireActiveSession<TResult>(startTime);\n if (sessionError) {\n return sessionError;\n }\n\n const sessionId = sessionManager.getSessionId();\n if (!sessionId) {\n return createErrorResponse(\n ErrorCodes.MM_NO_ACTIVE_SESSION,\n 'Session ID not found',\n undefined,\n undefined,\n startTime,\n ) as McpResponse<TResult>;\n }\n const page = sessionManager.getPage();\n const refMap = sessionManager.getRefMap();\n\n return handler(input, { sessionId, page, refMap }, startTime);\n };\n}\n\n/**\n * Record a tool execution step in the knowledge store.\n *\n * @param params - Parameters containing tool name, input, observation, and metadata\n */\nexport async function recordToolStep(params: RecordStepParams): Promise<void> {\n const sessionManager = getSessionManager();\n const sessionId = sessionManager.getSessionId() ?? '';\n\n await knowledgeStore.recordStep({\n sessionId,\n toolName: params.toolName,\n input: params.input,\n target: params.target,\n outcome: { ok: true },\n observation: params.observation,\n durationMs: Date.now() - params.startTime,\n screenshotPath: params.screenshotPath,\n screenshotDimensions: params.screenshotDimensions,\n });\n}\n\n/**\n * Collect observation data and record the tool step in the knowledge store.\n *\n * @param page - The page to collect observation from\n * @param toolName - Name of the tool that was executed\n * @param input - Input parameters passed to the tool\n * @param startTime - Timestamp when the tool execution started\n * @param options - Optional metadata for the step record\n * @param options.target - Target element information\n * @param options.screenshotPath - Path to screenshot file if captured\n * @param options.screenshotDimensions - Screenshot dimensions\n * @param options.screenshotDimensions.width - Screenshot width in pixels\n * @param options.screenshotDimensions.height - Screenshot height in pixels\n * @returns Observation data collected after tool execution\n */\nexport async function collectObservationAndRecord(\n page: Page,\n toolName: string,\n input: Record<string, unknown>,\n startTime: number,\n options: {\n /**\n * Target element information (selector, testId, etc.)\n */\n target?: Record<string, string>;\n /**\n * Path to screenshot file if captured\n */\n screenshotPath?: string;\n /**\n * Screenshot dimensions if captured\n */\n screenshotDimensions?: {\n /**\n * Screenshot width in pixels\n */\n width: number;\n /**\n * Screenshot height in pixels\n */\n height: number;\n };\n } = {},\n): Promise<StepRecordObservation> {\n const observation = await collectObservation(page, 'full');\n\n await recordToolStep({\n toolName,\n input,\n startTime,\n observation,\n target: options.target,\n screenshotPath: options.screenshotPath,\n screenshotDimensions: options.screenshotDimensions,\n });\n\n return observation;\n}\n\n/**\n * Handle tool execution errors and return appropriate error response.\n *\n * @param error - The error that occurred during tool execution\n * @param defaultCode - Default error code to use if no specific match found\n * @param defaultMessage - Default error message to use\n * @param input - Input parameters that were passed to the tool\n * @param sessionId - Current session ID for error context\n * @param startTime - Timestamp when the tool execution started\n * @returns Error response with appropriate code and message\n */\nexport function handleToolError<Result>(\n error: unknown,\n defaultCode: ErrorCode,\n defaultMessage: string,\n input: unknown,\n sessionId: string | undefined,\n startTime: number,\n): McpResponse<Result> {\n const message = extractErrorMessage(error);\n\n if (message.includes('Unknown a11yRef') || message.includes('not found')) {\n return createErrorResponse(\n ErrorCodes.MM_TARGET_NOT_FOUND,\n message,\n { input },\n sessionId,\n startTime,\n ) as McpResponse<Result>;\n }\n\n return createErrorResponse(\n defaultCode,\n `${defaultMessage}: ${message}`,\n { input },\n sessionId,\n startTime,\n ) as McpResponse<Result>;\n}\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./error-classification.cjs"), exports);
|
|
18
|
+
__exportStar(require("./run-tool.cjs"), exports);
|
|
19
|
+
__exportStar(require("./helpers.cjs"), exports);
|
|
20
|
+
__exportStar(require("./interaction.cjs"), exports);
|
|
21
|
+
__exportStar(require("./navigation.cjs"), exports);
|
|
22
|
+
__exportStar(require("./discovery-tools.cjs"), exports);
|
|
23
|
+
__exportStar(require("./screenshot.cjs"), exports);
|
|
24
|
+
__exportStar(require("./knowledge.cjs"), exports);
|
|
25
|
+
__exportStar(require("./batch.cjs"), exports);
|
|
26
|
+
__exportStar(require("./clipboard.cjs"), exports);
|
|
27
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../../src/mcp-server/tools/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6DAA0C;AAC1C,iDAA8B;AAC9B,gDAA6B;AAC7B,oDAAiC;AACjC,mDAAgC;AAChC,wDAAqC;AACrC,mDAAgC;AAChC,kDAA+B;AAC/B,8CAA2B;AAC3B,kDAA+B","sourcesContent":["export * from './error-classification.js';\nexport * from './run-tool.js';\nexport * from './helpers.js';\nexport * from './interaction.js';\nexport * from './navigation.js';\nexport * from './discovery-tools.js';\nexport * from './screenshot.js';\nexport * from './knowledge.js';\nexport * from './batch.js';\nexport * from './clipboard.js';\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from "./error-classification.cjs";
|
|
2
|
+
export * from "./run-tool.cjs";
|
|
3
|
+
export * from "./helpers.cjs";
|
|
4
|
+
export * from "./interaction.cjs";
|
|
5
|
+
export * from "./navigation.cjs";
|
|
6
|
+
export * from "./discovery-tools.cjs";
|
|
7
|
+
export * from "./screenshot.cjs";
|
|
8
|
+
export * from "./knowledge.cjs";
|
|
9
|
+
export * from "./batch.cjs";
|
|
10
|
+
export * from "./clipboard.cjs";
|
|
11
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../../src/mcp-server/tools/index.ts"],"names":[],"mappings":"AAAA,2CAA0C;AAC1C,+BAA8B;AAC9B,8BAA6B;AAC7B,kCAAiC;AACjC,iCAAgC;AAChC,sCAAqC;AACrC,iCAAgC;AAChC,gCAA+B;AAC/B,4BAA2B;AAC3B,gCAA+B"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from "./error-classification.mjs";
|
|
2
|
+
export * from "./run-tool.mjs";
|
|
3
|
+
export * from "./helpers.mjs";
|
|
4
|
+
export * from "./interaction.mjs";
|
|
5
|
+
export * from "./navigation.mjs";
|
|
6
|
+
export * from "./discovery-tools.mjs";
|
|
7
|
+
export * from "./screenshot.mjs";
|
|
8
|
+
export * from "./knowledge.mjs";
|
|
9
|
+
export * from "./batch.mjs";
|
|
10
|
+
export * from "./clipboard.mjs";
|
|
11
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../src/mcp-server/tools/index.ts"],"names":[],"mappings":"AAAA,2CAA0C;AAC1C,+BAA8B;AAC9B,8BAA6B;AAC7B,kCAAiC;AACjC,iCAAgC;AAChC,sCAAqC;AACrC,iCAAgC;AAChC,gCAA+B;AAC/B,4BAA2B;AAC3B,gCAA+B"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from "./error-classification.mjs";
|
|
2
|
+
export * from "./run-tool.mjs";
|
|
3
|
+
export * from "./helpers.mjs";
|
|
4
|
+
export * from "./interaction.mjs";
|
|
5
|
+
export * from "./navigation.mjs";
|
|
6
|
+
export * from "./discovery-tools.mjs";
|
|
7
|
+
export * from "./screenshot.mjs";
|
|
8
|
+
export * from "./knowledge.mjs";
|
|
9
|
+
export * from "./batch.mjs";
|
|
10
|
+
export * from "./clipboard.mjs";
|
|
11
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../../src/mcp-server/tools/index.ts"],"names":[],"mappings":"AAAA,2CAA0C;AAC1C,+BAA8B;AAC9B,8BAA6B;AAC7B,kCAAiC;AACjC,iCAAgC;AAChC,sCAAqC;AACrC,iCAAgC;AAChC,gCAA+B;AAC/B,4BAA2B;AAC3B,gCAA+B","sourcesContent":["export * from './error-classification.js';\nexport * from './run-tool.js';\nexport * from './helpers.js';\nexport * from './interaction.js';\nexport * from './navigation.js';\nexport * from './discovery-tools.js';\nexport * from './screenshot.js';\nexport * from './knowledge.js';\nexport * from './batch.js';\nexport * from './clipboard.js';\n"]}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleClick = handleClick;
|
|
4
|
+
exports.handleType = handleType;
|
|
5
|
+
exports.handleWaitFor = handleWaitFor;
|
|
6
|
+
const constants_js_1 = require("../constants.cjs");
|
|
7
|
+
const discovery_js_1 = require("../discovery.cjs");
|
|
8
|
+
const session_manager_js_1 = require("../session-manager.cjs");
|
|
9
|
+
const error_classification_js_1 = require("./error-classification.cjs");
|
|
10
|
+
const run_tool_js_1 = require("./run-tool.cjs");
|
|
11
|
+
const types_1 = require("../types/index.cjs");
|
|
12
|
+
const utils_1 = require("../utils/index.cjs");
|
|
13
|
+
/**
|
|
14
|
+
* Handles clicking on an element specified by testId, selector, or accessibility reference.
|
|
15
|
+
*
|
|
16
|
+
* @param input The click input containing target selection and timeout options
|
|
17
|
+
* @param options Optional handler configuration
|
|
18
|
+
* @returns Promise resolving to click result with target information
|
|
19
|
+
*/
|
|
20
|
+
async function handleClick(input, options) {
|
|
21
|
+
const startTime = Date.now();
|
|
22
|
+
const sessionManager = (0, session_manager_js_1.getSessionManager)();
|
|
23
|
+
const sessionId = sessionManager.getSessionId();
|
|
24
|
+
const timeoutMs = input.timeoutMs ?? constants_js_1.DEFAULT_INTERACTION_TIMEOUT_MS;
|
|
25
|
+
const validation = (0, utils_1.validateTargetSelection)(input);
|
|
26
|
+
if ((0, utils_1.isInvalidTargetSelection)(validation)) {
|
|
27
|
+
return (0, utils_1.createErrorResponse)(types_1.ErrorCodes.MM_INVALID_INPUT, validation.error, { input }, sessionId, startTime);
|
|
28
|
+
}
|
|
29
|
+
if (!(0, utils_1.isValidTargetSelection)(validation)) {
|
|
30
|
+
return (0, utils_1.createErrorResponse)(types_1.ErrorCodes.MM_INVALID_INPUT, 'Invalid target selection', { input }, sessionId, startTime);
|
|
31
|
+
}
|
|
32
|
+
const { type: targetType, value: targetValue } = validation;
|
|
33
|
+
return (0, run_tool_js_1.runTool)({
|
|
34
|
+
toolName: 'mm_click',
|
|
35
|
+
input,
|
|
36
|
+
options,
|
|
37
|
+
/**
|
|
38
|
+
* Executes the click action on the target element.
|
|
39
|
+
*
|
|
40
|
+
* @param context The tool execution context containing page and reference map
|
|
41
|
+
* @returns Promise resolving to click result with success status and target info
|
|
42
|
+
*/
|
|
43
|
+
execute: async (context) => {
|
|
44
|
+
const locator = await (0, discovery_js_1.waitForTarget)(context.page, targetType, targetValue, context.refMap, timeoutMs);
|
|
45
|
+
try {
|
|
46
|
+
await locator.click();
|
|
47
|
+
return {
|
|
48
|
+
clicked: true,
|
|
49
|
+
target: `${targetType}:${targetValue}`,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
catch (clickError) {
|
|
53
|
+
if ((0, error_classification_js_1.isPageClosedError)(clickError)) {
|
|
54
|
+
return {
|
|
55
|
+
clicked: true,
|
|
56
|
+
target: `${targetType}:${targetValue}`,
|
|
57
|
+
pageClosedAfterClick: true,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
throw clickError;
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
/**
|
|
64
|
+
* Returns the target element information for recording.
|
|
65
|
+
*
|
|
66
|
+
* @returns Object containing the target type and value
|
|
67
|
+
*/
|
|
68
|
+
getTarget: () => ({ [targetType]: targetValue }),
|
|
69
|
+
classifyError: error_classification_js_1.classifyClickError,
|
|
70
|
+
/**
|
|
71
|
+
* Sanitizes input for knowledge store recording.
|
|
72
|
+
*
|
|
73
|
+
* @returns Sanitized input object with timeout information
|
|
74
|
+
*/
|
|
75
|
+
sanitizeInputForRecording: () => ({ timeoutMs }),
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Handles typing text into an element specified by testId, selector, or accessibility reference.
|
|
80
|
+
*
|
|
81
|
+
* @param input The type input containing target selection, text, and timeout options
|
|
82
|
+
* @param options Optional handler configuration
|
|
83
|
+
* @returns Promise resolving to type result with target and text length information
|
|
84
|
+
*/
|
|
85
|
+
async function handleType(input, options) {
|
|
86
|
+
const startTime = Date.now();
|
|
87
|
+
const sessionManager = (0, session_manager_js_1.getSessionManager)();
|
|
88
|
+
const sessionId = sessionManager.getSessionId();
|
|
89
|
+
const timeoutMs = input.timeoutMs ?? constants_js_1.DEFAULT_INTERACTION_TIMEOUT_MS;
|
|
90
|
+
const validation = (0, utils_1.validateTargetSelection)(input);
|
|
91
|
+
if ((0, utils_1.isInvalidTargetSelection)(validation)) {
|
|
92
|
+
return (0, utils_1.createErrorResponse)(types_1.ErrorCodes.MM_INVALID_INPUT, validation.error, { input }, sessionId, startTime);
|
|
93
|
+
}
|
|
94
|
+
if (!(0, utils_1.isValidTargetSelection)(validation)) {
|
|
95
|
+
return (0, utils_1.createErrorResponse)(types_1.ErrorCodes.MM_INVALID_INPUT, 'Invalid target selection', { input }, sessionId, startTime);
|
|
96
|
+
}
|
|
97
|
+
const { type: targetType, value: targetValue } = validation;
|
|
98
|
+
return (0, run_tool_js_1.runTool)({
|
|
99
|
+
toolName: 'mm_type',
|
|
100
|
+
input,
|
|
101
|
+
options,
|
|
102
|
+
/**
|
|
103
|
+
* Executes the type action on the target element.
|
|
104
|
+
*
|
|
105
|
+
* @param context The tool execution context containing page and reference map
|
|
106
|
+
* @returns Promise resolving to type result with success status and text length
|
|
107
|
+
*/
|
|
108
|
+
execute: async (context) => {
|
|
109
|
+
const locator = await (0, discovery_js_1.waitForTarget)(context.page, targetType, targetValue, context.refMap, timeoutMs);
|
|
110
|
+
await locator.fill(input.text);
|
|
111
|
+
return {
|
|
112
|
+
typed: true,
|
|
113
|
+
target: `${targetType}:${targetValue}`,
|
|
114
|
+
textLength: input.text.length,
|
|
115
|
+
};
|
|
116
|
+
},
|
|
117
|
+
/**
|
|
118
|
+
* Returns the target element information for recording.
|
|
119
|
+
*
|
|
120
|
+
* @returns Object containing the target type and value
|
|
121
|
+
*/
|
|
122
|
+
getTarget: () => ({ [targetType]: targetValue }),
|
|
123
|
+
classifyError: error_classification_js_1.classifyTypeError,
|
|
124
|
+
/**
|
|
125
|
+
* Sanitizes input for knowledge store recording.
|
|
126
|
+
*
|
|
127
|
+
* @returns Sanitized input object with timeout and text information
|
|
128
|
+
*/
|
|
129
|
+
sanitizeInputForRecording: () => ({
|
|
130
|
+
timeoutMs,
|
|
131
|
+
text: input.text,
|
|
132
|
+
testId: input.testId,
|
|
133
|
+
selector: input.selector,
|
|
134
|
+
a11yRef: input.a11yRef,
|
|
135
|
+
}),
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Handles waiting for an element to become visible.
|
|
140
|
+
*
|
|
141
|
+
* @param input The wait input containing target selection and timeout options
|
|
142
|
+
* @param options Optional handler configuration
|
|
143
|
+
* @returns Promise resolving to wait result with target information
|
|
144
|
+
*/
|
|
145
|
+
async function handleWaitFor(input, options) {
|
|
146
|
+
const startTime = Date.now();
|
|
147
|
+
const sessionManager = (0, session_manager_js_1.getSessionManager)();
|
|
148
|
+
const sessionId = sessionManager.getSessionId();
|
|
149
|
+
const timeoutMs = input.timeoutMs ?? constants_js_1.DEFAULT_INTERACTION_TIMEOUT_MS;
|
|
150
|
+
const validation = (0, utils_1.validateTargetSelection)(input);
|
|
151
|
+
if ((0, utils_1.isInvalidTargetSelection)(validation)) {
|
|
152
|
+
return (0, utils_1.createErrorResponse)(types_1.ErrorCodes.MM_INVALID_INPUT, validation.error, { input }, sessionId, startTime);
|
|
153
|
+
}
|
|
154
|
+
if (!(0, utils_1.isValidTargetSelection)(validation)) {
|
|
155
|
+
return (0, utils_1.createErrorResponse)(types_1.ErrorCodes.MM_INVALID_INPUT, 'Invalid target selection', { input }, sessionId, startTime);
|
|
156
|
+
}
|
|
157
|
+
const { type: targetType, value: targetValue } = validation;
|
|
158
|
+
return (0, run_tool_js_1.runTool)({
|
|
159
|
+
toolName: 'mm_wait_for',
|
|
160
|
+
input,
|
|
161
|
+
options,
|
|
162
|
+
/**
|
|
163
|
+
* Executes the wait action for the target element.
|
|
164
|
+
*
|
|
165
|
+
* @param context The tool execution context containing page and reference map
|
|
166
|
+
* @returns Promise resolving to wait result with success status and target info
|
|
167
|
+
*/
|
|
168
|
+
execute: async (context) => {
|
|
169
|
+
await (0, discovery_js_1.waitForTarget)(context.page, targetType, targetValue, context.refMap, timeoutMs);
|
|
170
|
+
return {
|
|
171
|
+
found: true,
|
|
172
|
+
target: `${targetType}:${targetValue}`,
|
|
173
|
+
};
|
|
174
|
+
},
|
|
175
|
+
/**
|
|
176
|
+
* Returns the target element information for recording.
|
|
177
|
+
*
|
|
178
|
+
* @returns Object containing the target type and value
|
|
179
|
+
*/
|
|
180
|
+
getTarget: () => ({ [targetType]: targetValue }),
|
|
181
|
+
classifyError: error_classification_js_1.classifyWaitError,
|
|
182
|
+
/**
|
|
183
|
+
* Sanitizes input for knowledge store recording.
|
|
184
|
+
*
|
|
185
|
+
* @returns Sanitized input object with timeout information
|
|
186
|
+
*/
|
|
187
|
+
sanitizeInputForRecording: () => ({ timeoutMs }),
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=interaction.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interaction.cjs","sourceRoot":"","sources":["../../../src/mcp-server/tools/interaction.ts"],"names":[],"mappings":"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","sourcesContent":["import { DEFAULT_INTERACTION_TIMEOUT_MS } from '../constants.js';\nimport { waitForTarget } from '../discovery.js';\nimport { getSessionManager } from '../session-manager.js';\nimport {\n classifyClickError,\n classifyTypeError,\n classifyWaitError,\n isPageClosedError,\n} from './error-classification.js';\nimport { runTool } from './run-tool.js';\nimport type {\n ClickInput,\n ClickResult,\n TypeInput,\n TypeResult,\n WaitForInput,\n WaitForResult,\n McpResponse,\n HandlerOptions,\n} from '../types';\nimport { ErrorCodes } from '../types';\nimport {\n createErrorResponse,\n validateTargetSelection,\n isValidTargetSelection,\n isInvalidTargetSelection,\n} from '../utils';\n\n/**\n * Handles clicking on an element specified by testId, selector, or accessibility reference.\n *\n * @param input The click input containing target selection and timeout options\n * @param options Optional handler configuration\n * @returns Promise resolving to click result with target information\n */\nexport async function handleClick(\n input: ClickInput,\n options?: HandlerOptions,\n): Promise<McpResponse<ClickResult>> {\n const startTime = Date.now();\n const sessionManager = getSessionManager();\n const sessionId = sessionManager.getSessionId();\n const timeoutMs = input.timeoutMs ?? DEFAULT_INTERACTION_TIMEOUT_MS;\n\n const validation = validateTargetSelection(input);\n if (isInvalidTargetSelection(validation)) {\n return createErrorResponse(\n ErrorCodes.MM_INVALID_INPUT,\n validation.error,\n { input },\n sessionId,\n startTime,\n );\n }\n\n if (!isValidTargetSelection(validation)) {\n return createErrorResponse(\n ErrorCodes.MM_INVALID_INPUT,\n 'Invalid target selection',\n { input },\n sessionId,\n startTime,\n );\n }\n\n const { type: targetType, value: targetValue } = validation;\n\n return runTool<ClickInput, ClickResult>({\n toolName: 'mm_click',\n input,\n options,\n\n /**\n * Executes the click action on the target element.\n *\n * @param context The tool execution context containing page and reference map\n * @returns Promise resolving to click result with success status and target info\n */\n execute: async (context) => {\n const locator = await waitForTarget(\n context.page,\n targetType,\n targetValue,\n context.refMap,\n timeoutMs,\n );\n\n try {\n await locator.click();\n return {\n clicked: true,\n target: `${targetType}:${targetValue}`,\n };\n } catch (clickError) {\n if (isPageClosedError(clickError)) {\n return {\n clicked: true,\n target: `${targetType}:${targetValue}`,\n pageClosedAfterClick: true,\n };\n }\n throw clickError;\n }\n },\n\n /**\n * Returns the target element information for recording.\n *\n * @returns Object containing the target type and value\n */\n getTarget: () => ({ [targetType]: targetValue }),\n\n classifyError: classifyClickError,\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 typing text into an element specified by testId, selector, or accessibility reference.\n *\n * @param input The type input containing target selection, text, and timeout options\n * @param options Optional handler configuration\n * @returns Promise resolving to type result with target and text length information\n */\nexport async function handleType(\n input: TypeInput,\n options?: HandlerOptions,\n): Promise<McpResponse<TypeResult>> {\n const startTime = Date.now();\n const sessionManager = getSessionManager();\n const sessionId = sessionManager.getSessionId();\n const timeoutMs = input.timeoutMs ?? DEFAULT_INTERACTION_TIMEOUT_MS;\n\n const validation = validateTargetSelection(input);\n if (isInvalidTargetSelection(validation)) {\n return createErrorResponse(\n ErrorCodes.MM_INVALID_INPUT,\n validation.error,\n { input },\n sessionId,\n startTime,\n );\n }\n\n if (!isValidTargetSelection(validation)) {\n return createErrorResponse(\n ErrorCodes.MM_INVALID_INPUT,\n 'Invalid target selection',\n { input },\n sessionId,\n startTime,\n );\n }\n\n const { type: targetType, value: targetValue } = validation;\n\n return runTool<TypeInput, TypeResult>({\n toolName: 'mm_type',\n input,\n options,\n\n /**\n * Executes the type action on the target element.\n *\n * @param context The tool execution context containing page and reference map\n * @returns Promise resolving to type result with success status and text length\n */\n execute: async (context) => {\n const locator = await waitForTarget(\n context.page,\n targetType,\n targetValue,\n context.refMap,\n timeoutMs,\n );\n await locator.fill(input.text);\n\n return {\n typed: true,\n target: `${targetType}:${targetValue}`,\n textLength: input.text.length,\n };\n },\n\n /**\n * Returns the target element information for recording.\n *\n * @returns Object containing the target type and value\n */\n getTarget: () => ({ [targetType]: targetValue }),\n\n classifyError: classifyTypeError,\n\n /**\n * Sanitizes input for knowledge store recording.\n *\n * @returns Sanitized input object with timeout and text information\n */\n sanitizeInputForRecording: () => ({\n timeoutMs,\n text: input.text,\n testId: input.testId,\n selector: input.selector,\n a11yRef: input.a11yRef,\n }),\n });\n}\n\n/**\n * Handles waiting for an element to become visible.\n *\n * @param input The wait input containing target selection and timeout options\n * @param options Optional handler configuration\n * @returns Promise resolving to wait result with target information\n */\nexport async function handleWaitFor(\n input: WaitForInput,\n options?: HandlerOptions,\n): Promise<McpResponse<WaitForResult>> {\n const startTime = Date.now();\n const sessionManager = getSessionManager();\n const sessionId = sessionManager.getSessionId();\n const timeoutMs = input.timeoutMs ?? DEFAULT_INTERACTION_TIMEOUT_MS;\n\n const validation = validateTargetSelection(input);\n if (isInvalidTargetSelection(validation)) {\n return createErrorResponse(\n ErrorCodes.MM_INVALID_INPUT,\n validation.error,\n { input },\n sessionId,\n startTime,\n );\n }\n\n if (!isValidTargetSelection(validation)) {\n return createErrorResponse(\n ErrorCodes.MM_INVALID_INPUT,\n 'Invalid target selection',\n { input },\n sessionId,\n startTime,\n );\n }\n\n const { type: targetType, value: targetValue } = validation;\n\n return runTool<WaitForInput, WaitForResult>({\n toolName: 'mm_wait_for',\n input,\n options,\n\n /**\n * Executes the wait action for the target element.\n *\n * @param context The tool execution context containing page and reference map\n * @returns Promise resolving to wait result with success status and target info\n */\n execute: async (context) => {\n await waitForTarget(\n context.page,\n targetType,\n targetValue,\n context.refMap,\n timeoutMs,\n );\n\n return {\n found: true,\n target: `${targetType}:${targetValue}`,\n };\n },\n\n /**\n * Returns the target element information for recording.\n *\n * @returns Object containing the target type and value\n */\n getTarget: () => ({ [targetType]: targetValue }),\n\n classifyError: classifyWaitError,\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"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ClickInput, ClickResult, TypeInput, TypeResult, WaitForInput, WaitForResult, McpResponse, HandlerOptions } from "../types/index.cjs";
|
|
2
|
+
/**
|
|
3
|
+
* Handles clicking on an element specified by testId, selector, or accessibility reference.
|
|
4
|
+
*
|
|
5
|
+
* @param input The click input containing target selection and timeout options
|
|
6
|
+
* @param options Optional handler configuration
|
|
7
|
+
* @returns Promise resolving to click result with target information
|
|
8
|
+
*/
|
|
9
|
+
export declare function handleClick(input: ClickInput, options?: HandlerOptions): Promise<McpResponse<ClickResult>>;
|
|
10
|
+
/**
|
|
11
|
+
* Handles typing text into an element specified by testId, selector, or accessibility reference.
|
|
12
|
+
*
|
|
13
|
+
* @param input The type input containing target selection, text, and timeout options
|
|
14
|
+
* @param options Optional handler configuration
|
|
15
|
+
* @returns Promise resolving to type result with target and text length information
|
|
16
|
+
*/
|
|
17
|
+
export declare function handleType(input: TypeInput, options?: HandlerOptions): Promise<McpResponse<TypeResult>>;
|
|
18
|
+
/**
|
|
19
|
+
* Handles waiting for an element to become visible.
|
|
20
|
+
*
|
|
21
|
+
* @param input The wait input containing target selection and timeout options
|
|
22
|
+
* @param options Optional handler configuration
|
|
23
|
+
* @returns Promise resolving to wait result with target information
|
|
24
|
+
*/
|
|
25
|
+
export declare function handleWaitFor(input: WaitForInput, options?: HandlerOptions): Promise<McpResponse<WaitForResult>>;
|
|
26
|
+
//# sourceMappingURL=interaction.d.cts.map
|