@metamask/device-mcp 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 +34 -0
- package/README.md +266 -0
- package/dist/backends/adb-backend.cjs +442 -0
- package/dist/backends/adb-backend.cjs.map +1 -0
- package/dist/backends/adb-backend.d.cts +35 -0
- package/dist/backends/adb-backend.d.cts.map +1 -0
- package/dist/backends/adb-backend.d.mts +35 -0
- package/dist/backends/adb-backend.d.mts.map +1 -0
- package/dist/backends/adb-backend.mjs +436 -0
- package/dist/backends/adb-backend.mjs.map +1 -0
- package/dist/backends/appium-backend.cjs +518 -0
- package/dist/backends/appium-backend.cjs.map +1 -0
- package/dist/backends/appium-backend.d.cts +36 -0
- package/dist/backends/appium-backend.d.cts.map +1 -0
- package/dist/backends/appium-backend.d.mts +36 -0
- package/dist/backends/appium-backend.d.mts.map +1 -0
- package/dist/backends/appium-backend.mjs +512 -0
- package/dist/backends/appium-backend.mjs.map +1 -0
- package/dist/backends/idb-backend.cjs +442 -0
- package/dist/backends/idb-backend.cjs.map +1 -0
- package/dist/backends/idb-backend.d.cts +35 -0
- package/dist/backends/idb-backend.d.cts.map +1 -0
- package/dist/backends/idb-backend.d.mts +35 -0
- package/dist/backends/idb-backend.d.mts.map +1 -0
- package/dist/backends/idb-backend.mjs +436 -0
- package/dist/backends/idb-backend.mjs.map +1 -0
- package/dist/backends/index.cjs +134 -0
- package/dist/backends/index.cjs.map +1 -0
- package/dist/backends/index.d.cts +16 -0
- package/dist/backends/index.d.cts.map +1 -0
- package/dist/backends/index.d.mts +16 -0
- package/dist/backends/index.d.mts.map +1 -0
- package/dist/backends/index.mjs +126 -0
- package/dist/backends/index.mjs.map +1 -0
- package/dist/backends/session-file.cjs +62 -0
- package/dist/backends/session-file.cjs.map +1 -0
- package/dist/backends/session-file.d.cts +24 -0
- package/dist/backends/session-file.d.cts.map +1 -0
- package/dist/backends/session-file.d.mts +24 -0
- package/dist/backends/session-file.d.mts.map +1 -0
- package/dist/backends/session-file.mjs +59 -0
- package/dist/backends/session-file.mjs.map +1 -0
- package/dist/backends/types.cjs +3 -0
- package/dist/backends/types.cjs.map +1 -0
- package/dist/backends/types.d.cts +93 -0
- package/dist/backends/types.d.cts.map +1 -0
- package/dist/backends/types.d.mts +93 -0
- package/dist/backends/types.d.mts.map +1 -0
- package/dist/backends/types.mjs +2 -0
- package/dist/backends/types.mjs.map +1 -0
- package/dist/backends/webdriver-client.cjs +167 -0
- package/dist/backends/webdriver-client.cjs.map +1 -0
- package/dist/backends/webdriver-client.d.cts +55 -0
- package/dist/backends/webdriver-client.d.cts.map +1 -0
- package/dist/backends/webdriver-client.d.mts +55 -0
- package/dist/backends/webdriver-client.d.mts.map +1 -0
- package/dist/backends/webdriver-client.mjs +162 -0
- package/dist/backends/webdriver-client.mjs.map +1 -0
- package/dist/cli/device-mcp.cjs +20 -0
- package/dist/cli/device-mcp.cjs.map +1 -0
- package/dist/cli/device-mcp.d.cts +3 -0
- package/dist/cli/device-mcp.d.cts.map +1 -0
- package/dist/cli/device-mcp.d.mts +3 -0
- package/dist/cli/device-mcp.d.mts.map +1 -0
- package/dist/cli/device-mcp.mjs +18 -0
- package/dist/cli/device-mcp.mjs.map +1 -0
- package/dist/index.cjs +9 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +5 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.mts +5 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +3 -0
- package/dist/index.mjs.map +1 -0
- package/dist/server.cjs +43 -0
- package/dist/server.cjs.map +1 -0
- package/dist/server.d.cts +4 -0
- package/dist/server.d.cts.map +1 -0
- package/dist/server.d.mts +4 -0
- package/dist/server.d.mts.map +1 -0
- package/dist/server.mjs +40 -0
- package/dist/server.mjs.map +1 -0
- package/dist/tools/alert-text.cjs +25 -0
- package/dist/tools/alert-text.cjs.map +1 -0
- package/dist/tools/alert-text.d.cts +4 -0
- package/dist/tools/alert-text.d.cts.map +1 -0
- package/dist/tools/alert-text.d.mts +4 -0
- package/dist/tools/alert-text.d.mts.map +1 -0
- package/dist/tools/alert-text.mjs +22 -0
- package/dist/tools/alert-text.mjs.map +1 -0
- package/dist/tools/app-state.cjs +40 -0
- package/dist/tools/app-state.cjs.map +1 -0
- package/dist/tools/app-state.d.cts +4 -0
- package/dist/tools/app-state.d.cts.map +1 -0
- package/dist/tools/app-state.d.mts +4 -0
- package/dist/tools/app-state.d.mts.map +1 -0
- package/dist/tools/app-state.mjs +37 -0
- package/dist/tools/app-state.mjs.map +1 -0
- package/dist/tools/clipboard.cjs +42 -0
- package/dist/tools/clipboard.cjs.map +1 -0
- package/dist/tools/clipboard.d.cts +4 -0
- package/dist/tools/clipboard.d.cts.map +1 -0
- package/dist/tools/clipboard.d.mts +4 -0
- package/dist/tools/clipboard.d.mts.map +1 -0
- package/dist/tools/clipboard.mjs +39 -0
- package/dist/tools/clipboard.mjs.map +1 -0
- package/dist/tools/close-app.cjs +25 -0
- package/dist/tools/close-app.cjs.map +1 -0
- package/dist/tools/close-app.d.cts +4 -0
- package/dist/tools/close-app.d.cts.map +1 -0
- package/dist/tools/close-app.d.mts +4 -0
- package/dist/tools/close-app.d.mts.map +1 -0
- package/dist/tools/close-app.mjs +22 -0
- package/dist/tools/close-app.mjs.map +1 -0
- package/dist/tools/context.cjs +52 -0
- package/dist/tools/context.cjs.map +1 -0
- package/dist/tools/context.d.cts +4 -0
- package/dist/tools/context.d.cts.map +1 -0
- package/dist/tools/context.d.mts +4 -0
- package/dist/tools/context.d.mts.map +1 -0
- package/dist/tools/context.mjs +49 -0
- package/dist/tools/context.mjs.map +1 -0
- package/dist/tools/device-info.cjs +34 -0
- package/dist/tools/device-info.cjs.map +1 -0
- package/dist/tools/device-info.d.cts +4 -0
- package/dist/tools/device-info.d.cts.map +1 -0
- package/dist/tools/device-info.d.mts +4 -0
- package/dist/tools/device-info.d.mts.map +1 -0
- package/dist/tools/device-info.mjs +31 -0
- package/dist/tools/device-info.mjs.map +1 -0
- package/dist/tools/dismiss-alert.cjs +34 -0
- package/dist/tools/dismiss-alert.cjs.map +1 -0
- package/dist/tools/dismiss-alert.d.cts +4 -0
- package/dist/tools/dismiss-alert.d.cts.map +1 -0
- package/dist/tools/dismiss-alert.d.mts +4 -0
- package/dist/tools/dismiss-alert.d.mts.map +1 -0
- package/dist/tools/dismiss-alert.mjs +31 -0
- package/dist/tools/dismiss-alert.mjs.map +1 -0
- package/dist/tools/dismiss-keyboard.cjs +23 -0
- package/dist/tools/dismiss-keyboard.cjs.map +1 -0
- package/dist/tools/dismiss-keyboard.d.cts +4 -0
- package/dist/tools/dismiss-keyboard.d.cts.map +1 -0
- package/dist/tools/dismiss-keyboard.d.mts +4 -0
- package/dist/tools/dismiss-keyboard.d.mts.map +1 -0
- package/dist/tools/dismiss-keyboard.mjs +20 -0
- package/dist/tools/dismiss-keyboard.mjs.map +1 -0
- package/dist/tools/generate-locators.cjs +33 -0
- package/dist/tools/generate-locators.cjs.map +1 -0
- package/dist/tools/generate-locators.d.cts +4 -0
- package/dist/tools/generate-locators.d.cts.map +1 -0
- package/dist/tools/generate-locators.d.mts +4 -0
- package/dist/tools/generate-locators.d.mts.map +1 -0
- package/dist/tools/generate-locators.mjs +30 -0
- package/dist/tools/generate-locators.mjs.map +1 -0
- package/dist/tools/index.cjs +50 -0
- package/dist/tools/index.cjs.map +1 -0
- package/dist/tools/index.d.cts +24 -0
- package/dist/tools/index.d.cts.map +1 -0
- package/dist/tools/index.d.mts +24 -0
- package/dist/tools/index.d.mts.map +1 -0
- package/dist/tools/index.mjs +24 -0
- package/dist/tools/index.mjs.map +1 -0
- package/dist/tools/logs.cjs +48 -0
- package/dist/tools/logs.cjs.map +1 -0
- package/dist/tools/logs.d.cts +4 -0
- package/dist/tools/logs.d.cts.map +1 -0
- package/dist/tools/logs.d.mts +4 -0
- package/dist/tools/logs.d.mts.map +1 -0
- package/dist/tools/logs.mjs +45 -0
- package/dist/tools/logs.mjs.map +1 -0
- package/dist/tools/long-press.cjs +38 -0
- package/dist/tools/long-press.cjs.map +1 -0
- package/dist/tools/long-press.d.cts +4 -0
- package/dist/tools/long-press.d.cts.map +1 -0
- package/dist/tools/long-press.d.mts +4 -0
- package/dist/tools/long-press.d.mts.map +1 -0
- package/dist/tools/long-press.mjs +35 -0
- package/dist/tools/long-press.mjs.map +1 -0
- package/dist/tools/open-app.cjs +26 -0
- package/dist/tools/open-app.cjs.map +1 -0
- package/dist/tools/open-app.d.cts +4 -0
- package/dist/tools/open-app.d.cts.map +1 -0
- package/dist/tools/open-app.d.mts +4 -0
- package/dist/tools/open-app.d.mts.map +1 -0
- package/dist/tools/open-app.mjs +23 -0
- package/dist/tools/open-app.mjs.map +1 -0
- package/dist/tools/press-button.cjs +30 -0
- package/dist/tools/press-button.cjs.map +1 -0
- package/dist/tools/press-button.d.cts +4 -0
- package/dist/tools/press-button.d.cts.map +1 -0
- package/dist/tools/press-button.d.mts +4 -0
- package/dist/tools/press-button.d.mts.map +1 -0
- package/dist/tools/press-button.mjs +27 -0
- package/dist/tools/press-button.mjs.map +1 -0
- package/dist/tools/screen-recording.cjs +46 -0
- package/dist/tools/screen-recording.cjs.map +1 -0
- package/dist/tools/screen-recording.d.cts +4 -0
- package/dist/tools/screen-recording.d.cts.map +1 -0
- package/dist/tools/screen-recording.d.mts +4 -0
- package/dist/tools/screen-recording.d.mts.map +1 -0
- package/dist/tools/screen-recording.mjs +43 -0
- package/dist/tools/screen-recording.mjs.map +1 -0
- package/dist/tools/screenshot.cjs +42 -0
- package/dist/tools/screenshot.cjs.map +1 -0
- package/dist/tools/screenshot.d.cts +4 -0
- package/dist/tools/screenshot.d.cts.map +1 -0
- package/dist/tools/screenshot.d.mts +4 -0
- package/dist/tools/screenshot.d.mts.map +1 -0
- package/dist/tools/screenshot.mjs +39 -0
- package/dist/tools/screenshot.mjs.map +1 -0
- package/dist/tools/scroll-to-element.cjs +56 -0
- package/dist/tools/scroll-to-element.cjs.map +1 -0
- package/dist/tools/scroll-to-element.d.cts +4 -0
- package/dist/tools/scroll-to-element.d.cts.map +1 -0
- package/dist/tools/scroll-to-element.d.mts +4 -0
- package/dist/tools/scroll-to-element.d.mts.map +1 -0
- package/dist/tools/scroll-to-element.mjs +53 -0
- package/dist/tools/scroll-to-element.mjs.map +1 -0
- package/dist/tools/shared.cjs +11 -0
- package/dist/tools/shared.cjs.map +1 -0
- package/dist/tools/shared.d.cts +8 -0
- package/dist/tools/shared.d.cts.map +1 -0
- package/dist/tools/shared.d.mts +8 -0
- package/dist/tools/shared.d.mts.map +1 -0
- package/dist/tools/shared.mjs +8 -0
- package/dist/tools/shared.mjs.map +1 -0
- package/dist/tools/snapshot.cjs +37 -0
- package/dist/tools/snapshot.cjs.map +1 -0
- package/dist/tools/snapshot.d.cts +4 -0
- package/dist/tools/snapshot.d.cts.map +1 -0
- package/dist/tools/snapshot.d.mts +4 -0
- package/dist/tools/snapshot.d.mts.map +1 -0
- package/dist/tools/snapshot.mjs +34 -0
- package/dist/tools/snapshot.mjs.map +1 -0
- package/dist/tools/swipe.cjs +39 -0
- package/dist/tools/swipe.cjs.map +1 -0
- package/dist/tools/swipe.d.cts +4 -0
- package/dist/tools/swipe.d.cts.map +1 -0
- package/dist/tools/swipe.d.mts +4 -0
- package/dist/tools/swipe.d.mts.map +1 -0
- package/dist/tools/swipe.mjs +36 -0
- package/dist/tools/swipe.mjs.map +1 -0
- package/dist/tools/tap-coordinates.cjs +27 -0
- package/dist/tools/tap-coordinates.cjs.map +1 -0
- package/dist/tools/tap-coordinates.d.cts +4 -0
- package/dist/tools/tap-coordinates.d.cts.map +1 -0
- package/dist/tools/tap-coordinates.d.mts +4 -0
- package/dist/tools/tap-coordinates.d.mts.map +1 -0
- package/dist/tools/tap-coordinates.mjs +24 -0
- package/dist/tools/tap-coordinates.mjs.map +1 -0
- package/dist/tools/tap-element.cjs +46 -0
- package/dist/tools/tap-element.cjs.map +1 -0
- package/dist/tools/tap-element.d.cts +4 -0
- package/dist/tools/tap-element.d.cts.map +1 -0
- package/dist/tools/tap-element.d.mts +4 -0
- package/dist/tools/tap-element.d.mts.map +1 -0
- package/dist/tools/tap-element.mjs +43 -0
- package/dist/tools/tap-element.mjs.map +1 -0
- package/dist/tools/type-text.cjs +32 -0
- package/dist/tools/type-text.cjs.map +1 -0
- package/dist/tools/type-text.d.cts +4 -0
- package/dist/tools/type-text.d.cts.map +1 -0
- package/dist/tools/type-text.d.mts +4 -0
- package/dist/tools/type-text.d.mts.map +1 -0
- package/dist/tools/type-text.mjs +29 -0
- package/dist/tools/type-text.mjs.map +1 -0
- package/dist/tools/wait-for.cjs +51 -0
- package/dist/tools/wait-for.cjs.map +1 -0
- package/dist/tools/wait-for.d.cts +4 -0
- package/dist/tools/wait-for.d.cts.map +1 -0
- package/dist/tools/wait-for.d.mts +4 -0
- package/dist/tools/wait-for.d.mts.map +1 -0
- package/dist/tools/wait-for.mjs +48 -0
- package/dist/tools/wait-for.mjs.map +1 -0
- package/dist/tools/window-size.cjs +29 -0
- package/dist/tools/window-size.cjs.map +1 -0
- package/dist/tools/window-size.d.cts +4 -0
- package/dist/tools/window-size.d.cts.map +1 -0
- package/dist/tools/window-size.d.mts +4 -0
- package/dist/tools/window-size.d.mts.map +1 -0
- package/dist/tools/window-size.mjs +26 -0
- package/dist/tools/window-size.mjs.map +1 -0
- package/dist/utils/alert-labels.cjs +26 -0
- package/dist/utils/alert-labels.cjs.map +1 -0
- package/dist/utils/alert-labels.d.cts +3 -0
- package/dist/utils/alert-labels.d.cts.map +1 -0
- package/dist/utils/alert-labels.d.mts +3 -0
- package/dist/utils/alert-labels.d.mts.map +1 -0
- package/dist/utils/alert-labels.mjs +23 -0
- package/dist/utils/alert-labels.mjs.map +1 -0
- package/dist/utils/element.cjs +212 -0
- package/dist/utils/element.cjs.map +1 -0
- package/dist/utils/element.d.cts +24 -0
- package/dist/utils/element.d.cts.map +1 -0
- package/dist/utils/element.d.mts +24 -0
- package/dist/utils/element.d.mts.map +1 -0
- package/dist/utils/element.mjs +203 -0
- package/dist/utils/element.mjs.map +1 -0
- package/dist/utils/exec.cjs +57 -0
- package/dist/utils/exec.cjs.map +1 -0
- package/dist/utils/exec.d.cts +23 -0
- package/dist/utils/exec.d.cts.map +1 -0
- package/dist/utils/exec.d.mts +23 -0
- package/dist/utils/exec.d.mts.map +1 -0
- package/dist/utils/exec.mjs +52 -0
- package/dist/utils/exec.mjs.map +1 -0
- package/dist/utils/platform.cjs +93 -0
- package/dist/utils/platform.cjs.map +1 -0
- package/dist/utils/platform.d.cts +8 -0
- package/dist/utils/platform.d.cts.map +1 -0
- package/dist/utils/platform.d.mts +8 -0
- package/dist/utils/platform.d.mts.map +1 -0
- package/dist/utils/platform.mjs +90 -0
- package/dist/utils/platform.mjs.map +1 -0
- package/package.json +106 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerTapElementTool = registerTapElementTool;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const shared_js_1 = require("./shared.cjs");
|
|
6
|
+
function registerTapElementTool(server, backend) {
|
|
7
|
+
server.registerTool('device_tap_element', {
|
|
8
|
+
title: 'Tap Element',
|
|
9
|
+
description: 'Find an element in the UI hierarchy by query and tap its center. ' +
|
|
10
|
+
'Specify at least one of: label, identifier, text, type. ' +
|
|
11
|
+
'Call device_snapshot first to see available elements.',
|
|
12
|
+
inputSchema: {
|
|
13
|
+
label: zod_1.z
|
|
14
|
+
.string()
|
|
15
|
+
.optional()
|
|
16
|
+
.describe('Accessibility label (iOS) or content-description (Android)'),
|
|
17
|
+
identifier: zod_1.z
|
|
18
|
+
.string()
|
|
19
|
+
.optional()
|
|
20
|
+
.describe('Accessibility identifier (iOS) or resource-id (Android)'),
|
|
21
|
+
text: zod_1.z.string().optional().describe('Visible text content'),
|
|
22
|
+
type: zod_1.z.string().optional().describe('Element type/class name'),
|
|
23
|
+
},
|
|
24
|
+
}, async ({ label, identifier, text, type }) => {
|
|
25
|
+
try {
|
|
26
|
+
const result = await backend.tapElement({
|
|
27
|
+
label,
|
|
28
|
+
identifier,
|
|
29
|
+
text,
|
|
30
|
+
type,
|
|
31
|
+
});
|
|
32
|
+
return {
|
|
33
|
+
content: [
|
|
34
|
+
{
|
|
35
|
+
type: 'text',
|
|
36
|
+
text: `Tapped ${result.targetDescription} at (${result.x}, ${result.y})`,
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
return (0, shared_js_1.errorResult)(error);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=tap-element.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tap-element.cjs","sourceRoot":"","sources":["../../src/tools/tap-element.ts"],"names":[],"mappings":";;AAMA,wDAgDC;AArDD,6BAAwB;AAExB,4CAA0C;AAG1C,SAAgB,sBAAsB,CACpC,MAAiB,EACjB,OAAsB;IAEtB,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,mEAAmE;YACnE,0DAA0D;YAC1D,uDAAuD;QACzD,WAAW,EAAE;YACX,KAAK,EAAE,OAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,4DAA4D,CAC7D;YACH,UAAU,EAAE,OAAC;iBACV,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,yDAAyD,CAAC;YACtE,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YAC5D,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;SAChE;KACF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;QAC1C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;gBACtC,KAAK;gBACL,UAAU;gBACV,IAAI;gBACJ,IAAI;aACL,CAAC,CAAC;YACH,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,UAAU,MAAM,CAAC,iBAAiB,QAAQ,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG;qBACzE;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAA,uBAAW,EAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC","sourcesContent":["import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\n\nimport { errorResult } from './shared.js';\nimport type { DeviceBackend } from '../backends/types.js';\n\nexport function registerTapElementTool(\n server: McpServer,\n backend: DeviceBackend,\n): void {\n server.registerTool(\n 'device_tap_element',\n {\n title: 'Tap Element',\n description:\n 'Find an element in the UI hierarchy by query and tap its center. ' +\n 'Specify at least one of: label, identifier, text, type. ' +\n 'Call device_snapshot first to see available elements.',\n inputSchema: {\n label: z\n .string()\n .optional()\n .describe(\n 'Accessibility label (iOS) or content-description (Android)',\n ),\n identifier: z\n .string()\n .optional()\n .describe('Accessibility identifier (iOS) or resource-id (Android)'),\n text: z.string().optional().describe('Visible text content'),\n type: z.string().optional().describe('Element type/class name'),\n },\n },\n async ({ label, identifier, text, type }) => {\n try {\n const result = await backend.tapElement({\n label,\n identifier,\n text,\n type,\n });\n return {\n content: [\n {\n type: 'text' as const,\n text: `Tapped ${result.targetDescription} at (${result.x}, ${result.y})`,\n },\n ],\n };\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n}\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { DeviceBackend } from "../backends/types.cjs";
|
|
3
|
+
export declare function registerTapElementTool(server: McpServer, backend: DeviceBackend): void;
|
|
4
|
+
//# sourceMappingURL=tap-element.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tap-element.d.cts","sourceRoot":"","sources":["../../src/tools/tap-element.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gDAAgD;AAIzE,OAAO,KAAK,EAAE,aAAa,EAAE,8BAA6B;AAE1D,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,aAAa,GACrB,IAAI,CA6CN"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { DeviceBackend } from "../backends/types.mjs";
|
|
3
|
+
export declare function registerTapElementTool(server: McpServer, backend: DeviceBackend): void;
|
|
4
|
+
//# sourceMappingURL=tap-element.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tap-element.d.mts","sourceRoot":"","sources":["../../src/tools/tap-element.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gDAAgD;AAIzE,OAAO,KAAK,EAAE,aAAa,EAAE,8BAA6B;AAE1D,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,aAAa,GACrB,IAAI,CA6CN"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { errorResult } from "./shared.mjs";
|
|
3
|
+
export function registerTapElementTool(server, backend) {
|
|
4
|
+
server.registerTool('device_tap_element', {
|
|
5
|
+
title: 'Tap Element',
|
|
6
|
+
description: 'Find an element in the UI hierarchy by query and tap its center. ' +
|
|
7
|
+
'Specify at least one of: label, identifier, text, type. ' +
|
|
8
|
+
'Call device_snapshot first to see available elements.',
|
|
9
|
+
inputSchema: {
|
|
10
|
+
label: z
|
|
11
|
+
.string()
|
|
12
|
+
.optional()
|
|
13
|
+
.describe('Accessibility label (iOS) or content-description (Android)'),
|
|
14
|
+
identifier: z
|
|
15
|
+
.string()
|
|
16
|
+
.optional()
|
|
17
|
+
.describe('Accessibility identifier (iOS) or resource-id (Android)'),
|
|
18
|
+
text: z.string().optional().describe('Visible text content'),
|
|
19
|
+
type: z.string().optional().describe('Element type/class name'),
|
|
20
|
+
},
|
|
21
|
+
}, async ({ label, identifier, text, type }) => {
|
|
22
|
+
try {
|
|
23
|
+
const result = await backend.tapElement({
|
|
24
|
+
label,
|
|
25
|
+
identifier,
|
|
26
|
+
text,
|
|
27
|
+
type,
|
|
28
|
+
});
|
|
29
|
+
return {
|
|
30
|
+
content: [
|
|
31
|
+
{
|
|
32
|
+
type: 'text',
|
|
33
|
+
text: `Tapped ${result.targetDescription} at (${result.x}, ${result.y})`,
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
return errorResult(error);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=tap-element.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tap-element.mjs","sourceRoot":"","sources":["../../src/tools/tap-element.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,YAAY;AAExB,OAAO,EAAE,WAAW,EAAE,qBAAoB;AAG1C,MAAM,UAAU,sBAAsB,CACpC,MAAiB,EACjB,OAAsB;IAEtB,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,mEAAmE;YACnE,0DAA0D;YAC1D,uDAAuD;QACzD,WAAW,EAAE;YACX,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,4DAA4D,CAC7D;YACH,UAAU,EAAE,CAAC;iBACV,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,yDAAyD,CAAC;YACtE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YAC5D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;SAChE;KACF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;QAC1C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;gBACtC,KAAK;gBACL,UAAU;gBACV,IAAI;gBACJ,IAAI;aACL,CAAC,CAAC;YACH,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,UAAU,MAAM,CAAC,iBAAiB,QAAQ,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG;qBACzE;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC","sourcesContent":["import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\n\nimport { errorResult } from './shared.js';\nimport type { DeviceBackend } from '../backends/types.js';\n\nexport function registerTapElementTool(\n server: McpServer,\n backend: DeviceBackend,\n): void {\n server.registerTool(\n 'device_tap_element',\n {\n title: 'Tap Element',\n description:\n 'Find an element in the UI hierarchy by query and tap its center. ' +\n 'Specify at least one of: label, identifier, text, type. ' +\n 'Call device_snapshot first to see available elements.',\n inputSchema: {\n label: z\n .string()\n .optional()\n .describe(\n 'Accessibility label (iOS) or content-description (Android)',\n ),\n identifier: z\n .string()\n .optional()\n .describe('Accessibility identifier (iOS) or resource-id (Android)'),\n text: z.string().optional().describe('Visible text content'),\n type: z.string().optional().describe('Element type/class name'),\n },\n },\n async ({ label, identifier, text, type }) => {\n try {\n const result = await backend.tapElement({\n label,\n identifier,\n text,\n type,\n });\n return {\n content: [\n {\n type: 'text' as const,\n text: `Tapped ${result.targetDescription} at (${result.x}, ${result.y})`,\n },\n ],\n };\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n}\n"]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerTypeTool = registerTypeTool;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const shared_js_1 = require("./shared.cjs");
|
|
6
|
+
function registerTypeTool(server, backend) {
|
|
7
|
+
server.registerTool('device_type', {
|
|
8
|
+
title: 'Type Text',
|
|
9
|
+
description: 'Type text into the currently focused input field. ' +
|
|
10
|
+
'Tap an input element first to focus it, then call this. ' +
|
|
11
|
+
'The field is cleared before typing on all backends.',
|
|
12
|
+
inputSchema: {
|
|
13
|
+
text: zod_1.z.string().describe('Text to type'),
|
|
14
|
+
},
|
|
15
|
+
}, async ({ text }) => {
|
|
16
|
+
try {
|
|
17
|
+
await backend.typeText(text);
|
|
18
|
+
return {
|
|
19
|
+
content: [
|
|
20
|
+
{
|
|
21
|
+
type: 'text',
|
|
22
|
+
text: `Typed "${text}" (${text.length} characters)`,
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
return (0, shared_js_1.errorResult)(error);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=type-text.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-text.cjs","sourceRoot":"","sources":["../../src/tools/type-text.ts"],"names":[],"mappings":";;AAMA,4CAgCC;AArCD,6BAAwB;AAExB,4CAA0C;AAG1C,SAAgB,gBAAgB,CAC9B,MAAiB,EACjB,OAAsB;IAEtB,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,WAAW;QAClB,WAAW,EACT,oDAAoD;YACpD,0DAA0D;YAC1D,qDAAqD;QACvD,WAAW,EAAE;YACX,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;SAC1C;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC7B,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,UAAU,IAAI,MAAM,IAAI,CAAC,MAAM,cAAc;qBACpD;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAA,uBAAW,EAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC","sourcesContent":["import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\n\nimport { errorResult } from './shared.js';\nimport type { DeviceBackend } from '../backends/types.js';\n\nexport function registerTypeTool(\n server: McpServer,\n backend: DeviceBackend,\n): void {\n server.registerTool(\n 'device_type',\n {\n title: 'Type Text',\n description:\n 'Type text into the currently focused input field. ' +\n 'Tap an input element first to focus it, then call this. ' +\n 'The field is cleared before typing on all backends.',\n inputSchema: {\n text: z.string().describe('Text to type'),\n },\n },\n async ({ text }) => {\n try {\n await backend.typeText(text);\n return {\n content: [\n {\n type: 'text' as const,\n text: `Typed \"${text}\" (${text.length} characters)`,\n },\n ],\n };\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-text.d.cts","sourceRoot":"","sources":["../../src/tools/type-text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gDAAgD;AAIzE,OAAO,KAAK,EAAE,aAAa,EAAE,8BAA6B;AAE1D,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,aAAa,GACrB,IAAI,CA6BN"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-text.d.mts","sourceRoot":"","sources":["../../src/tools/type-text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gDAAgD;AAIzE,OAAO,KAAK,EAAE,aAAa,EAAE,8BAA6B;AAE1D,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,aAAa,GACrB,IAAI,CA6BN"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { errorResult } from "./shared.mjs";
|
|
3
|
+
export function registerTypeTool(server, backend) {
|
|
4
|
+
server.registerTool('device_type', {
|
|
5
|
+
title: 'Type Text',
|
|
6
|
+
description: 'Type text into the currently focused input field. ' +
|
|
7
|
+
'Tap an input element first to focus it, then call this. ' +
|
|
8
|
+
'The field is cleared before typing on all backends.',
|
|
9
|
+
inputSchema: {
|
|
10
|
+
text: z.string().describe('Text to type'),
|
|
11
|
+
},
|
|
12
|
+
}, async ({ text }) => {
|
|
13
|
+
try {
|
|
14
|
+
await backend.typeText(text);
|
|
15
|
+
return {
|
|
16
|
+
content: [
|
|
17
|
+
{
|
|
18
|
+
type: 'text',
|
|
19
|
+
text: `Typed "${text}" (${text.length} characters)`,
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
return errorResult(error);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=type-text.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-text.mjs","sourceRoot":"","sources":["../../src/tools/type-text.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,YAAY;AAExB,OAAO,EAAE,WAAW,EAAE,qBAAoB;AAG1C,MAAM,UAAU,gBAAgB,CAC9B,MAAiB,EACjB,OAAsB;IAEtB,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,WAAW;QAClB,WAAW,EACT,oDAAoD;YACpD,0DAA0D;YAC1D,qDAAqD;QACvD,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;SAC1C;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC7B,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,UAAU,IAAI,MAAM,IAAI,CAAC,MAAM,cAAc;qBACpD;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC","sourcesContent":["import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\n\nimport { errorResult } from './shared.js';\nimport type { DeviceBackend } from '../backends/types.js';\n\nexport function registerTypeTool(\n server: McpServer,\n backend: DeviceBackend,\n): void {\n server.registerTool(\n 'device_type',\n {\n title: 'Type Text',\n description:\n 'Type text into the currently focused input field. ' +\n 'Tap an input element first to focus it, then call this. ' +\n 'The field is cleared before typing on all backends.',\n inputSchema: {\n text: z.string().describe('Text to type'),\n },\n },\n async ({ text }) => {\n try {\n await backend.typeText(text);\n return {\n content: [\n {\n type: 'text' as const,\n text: `Typed \"${text}\" (${text.length} characters)`,\n },\n ],\n };\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n}\n"]}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerWaitForTool = registerWaitForTool;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const shared_js_1 = require("./shared.cjs");
|
|
6
|
+
function registerWaitForTool(server, backend) {
|
|
7
|
+
server.registerTool('device_wait_for', {
|
|
8
|
+
title: 'Wait For Element',
|
|
9
|
+
description: 'Poll the UI hierarchy until an element matching the query appears. ' +
|
|
10
|
+
'Useful for waiting on transitions, loading states, or navigation.',
|
|
11
|
+
inputSchema: {
|
|
12
|
+
label: zod_1.z.string().optional().describe('Accessibility label to match'),
|
|
13
|
+
identifier: zod_1.z
|
|
14
|
+
.string()
|
|
15
|
+
.optional()
|
|
16
|
+
.describe('Identifier/resource-id to match'),
|
|
17
|
+
text: zod_1.z.string().optional().describe('Text content to match'),
|
|
18
|
+
type: zod_1.z.string().optional().describe('Element type to match'),
|
|
19
|
+
timeoutMs: zod_1.z
|
|
20
|
+
.number()
|
|
21
|
+
.optional()
|
|
22
|
+
.describe('Max wait time in ms (default: 10000)'),
|
|
23
|
+
},
|
|
24
|
+
}, async ({ label, identifier, text, type, timeoutMs }) => {
|
|
25
|
+
try {
|
|
26
|
+
const element = await backend.waitForElement({ label, identifier, text, type }, timeoutMs);
|
|
27
|
+
return {
|
|
28
|
+
content: [
|
|
29
|
+
{
|
|
30
|
+
type: 'text',
|
|
31
|
+
text: [
|
|
32
|
+
`Found element:`,
|
|
33
|
+
` type: ${element.type}`,
|
|
34
|
+
element.label ? ` label: "${element.label}"` : null,
|
|
35
|
+
element.identifier ? ` id: "${element.identifier}"` : null,
|
|
36
|
+
element.value ? ` value: "${element.value}"` : null,
|
|
37
|
+
` frame: (${element.frame.x}, ${element.frame.y}) ${element.frame.width}x${element.frame.height}`,
|
|
38
|
+
` enabled: ${element.enabled}`,
|
|
39
|
+
]
|
|
40
|
+
.filter(Boolean)
|
|
41
|
+
.join('\n'),
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
return (0, shared_js_1.errorResult)(error);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=wait-for.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait-for.cjs","sourceRoot":"","sources":["../../src/tools/wait-for.ts"],"names":[],"mappings":";;AAMA,kDAsDC;AA3DD,6BAAwB;AAExB,4CAA0C;AAG1C,SAAgB,mBAAmB,CACjC,MAAiB,EACjB,OAAsB;IAEtB,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,qEAAqE;YACrE,mEAAmE;QACrE,WAAW,EAAE;YACX,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;YACrE,UAAU,EAAE,OAAC;iBACV,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,iCAAiC,CAAC;YAC9C,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YAC7D,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YAC7D,SAAS,EAAE,OAAC;iBACT,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,sCAAsC,CAAC;SACpD;KACF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;QACrD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,cAAc,CAC1C,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,EACjC,SAAS,CACV,CAAC;YACF,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE;4BACJ,gBAAgB;4BAChB,WAAW,OAAO,CAAC,IAAI,EAAE;4BACzB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI;4BACpD,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI;4BAC3D,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI;4BACpD,aAAa,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE;4BAClG,cAAc,OAAO,CAAC,OAAO,EAAE;yBAChC;6BACE,MAAM,CAAC,OAAO,CAAC;6BACf,IAAI,CAAC,IAAI,CAAC;qBACd;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAA,uBAAW,EAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC","sourcesContent":["import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\n\nimport { errorResult } from './shared.js';\nimport type { DeviceBackend } from '../backends/types.js';\n\nexport function registerWaitForTool(\n server: McpServer,\n backend: DeviceBackend,\n): void {\n server.registerTool(\n 'device_wait_for',\n {\n title: 'Wait For Element',\n description:\n 'Poll the UI hierarchy until an element matching the query appears. ' +\n 'Useful for waiting on transitions, loading states, or navigation.',\n inputSchema: {\n label: z.string().optional().describe('Accessibility label to match'),\n identifier: z\n .string()\n .optional()\n .describe('Identifier/resource-id to match'),\n text: z.string().optional().describe('Text content to match'),\n type: z.string().optional().describe('Element type to match'),\n timeoutMs: z\n .number()\n .optional()\n .describe('Max wait time in ms (default: 10000)'),\n },\n },\n async ({ label, identifier, text, type, timeoutMs }) => {\n try {\n const element = await backend.waitForElement(\n { label, identifier, text, type },\n timeoutMs,\n );\n return {\n content: [\n {\n type: 'text' as const,\n text: [\n `Found element:`,\n ` type: ${element.type}`,\n element.label ? ` label: \"${element.label}\"` : null,\n element.identifier ? ` id: \"${element.identifier}\"` : null,\n element.value ? ` value: \"${element.value}\"` : null,\n ` frame: (${element.frame.x}, ${element.frame.y}) ${element.frame.width}x${element.frame.height}`,\n ` enabled: ${element.enabled}`,\n ]\n .filter(Boolean)\n .join('\\n'),\n },\n ],\n };\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait-for.d.cts","sourceRoot":"","sources":["../../src/tools/wait-for.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gDAAgD;AAIzE,OAAO,KAAK,EAAE,aAAa,EAAE,8BAA6B;AAE1D,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,aAAa,GACrB,IAAI,CAmDN"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait-for.d.mts","sourceRoot":"","sources":["../../src/tools/wait-for.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gDAAgD;AAIzE,OAAO,KAAK,EAAE,aAAa,EAAE,8BAA6B;AAE1D,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,aAAa,GACrB,IAAI,CAmDN"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { errorResult } from "./shared.mjs";
|
|
3
|
+
export function registerWaitForTool(server, backend) {
|
|
4
|
+
server.registerTool('device_wait_for', {
|
|
5
|
+
title: 'Wait For Element',
|
|
6
|
+
description: 'Poll the UI hierarchy until an element matching the query appears. ' +
|
|
7
|
+
'Useful for waiting on transitions, loading states, or navigation.',
|
|
8
|
+
inputSchema: {
|
|
9
|
+
label: z.string().optional().describe('Accessibility label to match'),
|
|
10
|
+
identifier: z
|
|
11
|
+
.string()
|
|
12
|
+
.optional()
|
|
13
|
+
.describe('Identifier/resource-id to match'),
|
|
14
|
+
text: z.string().optional().describe('Text content to match'),
|
|
15
|
+
type: z.string().optional().describe('Element type to match'),
|
|
16
|
+
timeoutMs: z
|
|
17
|
+
.number()
|
|
18
|
+
.optional()
|
|
19
|
+
.describe('Max wait time in ms (default: 10000)'),
|
|
20
|
+
},
|
|
21
|
+
}, async ({ label, identifier, text, type, timeoutMs }) => {
|
|
22
|
+
try {
|
|
23
|
+
const element = await backend.waitForElement({ label, identifier, text, type }, timeoutMs);
|
|
24
|
+
return {
|
|
25
|
+
content: [
|
|
26
|
+
{
|
|
27
|
+
type: 'text',
|
|
28
|
+
text: [
|
|
29
|
+
`Found element:`,
|
|
30
|
+
` type: ${element.type}`,
|
|
31
|
+
element.label ? ` label: "${element.label}"` : null,
|
|
32
|
+
element.identifier ? ` id: "${element.identifier}"` : null,
|
|
33
|
+
element.value ? ` value: "${element.value}"` : null,
|
|
34
|
+
` frame: (${element.frame.x}, ${element.frame.y}) ${element.frame.width}x${element.frame.height}`,
|
|
35
|
+
` enabled: ${element.enabled}`,
|
|
36
|
+
]
|
|
37
|
+
.filter(Boolean)
|
|
38
|
+
.join('\n'),
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
return errorResult(error);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=wait-for.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait-for.mjs","sourceRoot":"","sources":["../../src/tools/wait-for.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,YAAY;AAExB,OAAO,EAAE,WAAW,EAAE,qBAAoB;AAG1C,MAAM,UAAU,mBAAmB,CACjC,MAAiB,EACjB,OAAsB;IAEtB,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,qEAAqE;YACrE,mEAAmE;QACrE,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;YACrE,UAAU,EAAE,CAAC;iBACV,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,iCAAiC,CAAC;YAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YAC7D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YAC7D,SAAS,EAAE,CAAC;iBACT,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,sCAAsC,CAAC;SACpD;KACF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;QACrD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,cAAc,CAC1C,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,EACjC,SAAS,CACV,CAAC;YACF,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE;4BACJ,gBAAgB;4BAChB,WAAW,OAAO,CAAC,IAAI,EAAE;4BACzB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI;4BACpD,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI;4BAC3D,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI;4BACpD,aAAa,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE;4BAClG,cAAc,OAAO,CAAC,OAAO,EAAE;yBAChC;6BACE,MAAM,CAAC,OAAO,CAAC;6BACf,IAAI,CAAC,IAAI,CAAC;qBACd;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC","sourcesContent":["import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\n\nimport { errorResult } from './shared.js';\nimport type { DeviceBackend } from '../backends/types.js';\n\nexport function registerWaitForTool(\n server: McpServer,\n backend: DeviceBackend,\n): void {\n server.registerTool(\n 'device_wait_for',\n {\n title: 'Wait For Element',\n description:\n 'Poll the UI hierarchy until an element matching the query appears. ' +\n 'Useful for waiting on transitions, loading states, or navigation.',\n inputSchema: {\n label: z.string().optional().describe('Accessibility label to match'),\n identifier: z\n .string()\n .optional()\n .describe('Identifier/resource-id to match'),\n text: z.string().optional().describe('Text content to match'),\n type: z.string().optional().describe('Element type to match'),\n timeoutMs: z\n .number()\n .optional()\n .describe('Max wait time in ms (default: 10000)'),\n },\n },\n async ({ label, identifier, text, type, timeoutMs }) => {\n try {\n const element = await backend.waitForElement(\n { label, identifier, text, type },\n timeoutMs,\n );\n return {\n content: [\n {\n type: 'text' as const,\n text: [\n `Found element:`,\n ` type: ${element.type}`,\n element.label ? ` label: \"${element.label}\"` : null,\n element.identifier ? ` id: \"${element.identifier}\"` : null,\n element.value ? ` value: \"${element.value}\"` : null,\n ` frame: (${element.frame.x}, ${element.frame.y}) ${element.frame.width}x${element.frame.height}`,\n ` enabled: ${element.enabled}`,\n ]\n .filter(Boolean)\n .join('\\n'),\n },\n ],\n };\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n}\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerWindowSizeTool = registerWindowSizeTool;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const shared_js_1 = require("./shared.cjs");
|
|
6
|
+
function registerWindowSizeTool(server, backend) {
|
|
7
|
+
server.registerTool('device_get_window_size', {
|
|
8
|
+
title: 'Get Window Size',
|
|
9
|
+
description: 'Get the width and height of the device screen in pixels (Android) or points (iOS).',
|
|
10
|
+
inputSchema: zod_1.z.object({}).shape,
|
|
11
|
+
annotations: { readOnlyHint: true },
|
|
12
|
+
}, async () => {
|
|
13
|
+
try {
|
|
14
|
+
const size = await backend.getWindowSize();
|
|
15
|
+
return {
|
|
16
|
+
content: [
|
|
17
|
+
{
|
|
18
|
+
type: 'text',
|
|
19
|
+
text: `Width: ${size.width}, Height: ${size.height}`,
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
return (0, shared_js_1.errorResult)(error);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=window-size.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"window-size.cjs","sourceRoot":"","sources":["../../src/tools/window-size.ts"],"names":[],"mappings":";;AAMA,wDA6BC;AAlCD,6BAAwB;AAExB,4CAA0C;AAG1C,SAAgB,sBAAsB,CACpC,MAAiB,EACjB,OAAsB;IAEtB,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,oFAAoF;QACtF,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK;QAC/B,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;YAC3C,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,UAAU,IAAI,CAAC,KAAK,aAAa,IAAI,CAAC,MAAM,EAAE;qBACrD;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAA,uBAAW,EAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC","sourcesContent":["import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\n\nimport { errorResult } from './shared.js';\nimport type { DeviceBackend } from '../backends/types.js';\n\nexport function registerWindowSizeTool(\n server: McpServer,\n backend: DeviceBackend,\n): void {\n server.registerTool(\n 'device_get_window_size',\n {\n title: 'Get Window Size',\n description:\n 'Get the width and height of the device screen in pixels (Android) or points (iOS).',\n inputSchema: z.object({}).shape,\n annotations: { readOnlyHint: true },\n },\n async () => {\n try {\n const size = await backend.getWindowSize();\n return {\n content: [\n {\n type: 'text' as const,\n text: `Width: ${size.width}, Height: ${size.height}`,\n },\n ],\n };\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n}\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { DeviceBackend } from "../backends/types.cjs";
|
|
3
|
+
export declare function registerWindowSizeTool(server: McpServer, backend: DeviceBackend): void;
|
|
4
|
+
//# sourceMappingURL=window-size.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"window-size.d.cts","sourceRoot":"","sources":["../../src/tools/window-size.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gDAAgD;AAIzE,OAAO,KAAK,EAAE,aAAa,EAAE,8BAA6B;AAE1D,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,aAAa,GACrB,IAAI,CA0BN"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { DeviceBackend } from "../backends/types.mjs";
|
|
3
|
+
export declare function registerWindowSizeTool(server: McpServer, backend: DeviceBackend): void;
|
|
4
|
+
//# sourceMappingURL=window-size.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"window-size.d.mts","sourceRoot":"","sources":["../../src/tools/window-size.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gDAAgD;AAIzE,OAAO,KAAK,EAAE,aAAa,EAAE,8BAA6B;AAE1D,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,aAAa,GACrB,IAAI,CA0BN"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { errorResult } from "./shared.mjs";
|
|
3
|
+
export function registerWindowSizeTool(server, backend) {
|
|
4
|
+
server.registerTool('device_get_window_size', {
|
|
5
|
+
title: 'Get Window Size',
|
|
6
|
+
description: 'Get the width and height of the device screen in pixels (Android) or points (iOS).',
|
|
7
|
+
inputSchema: z.object({}).shape,
|
|
8
|
+
annotations: { readOnlyHint: true },
|
|
9
|
+
}, async () => {
|
|
10
|
+
try {
|
|
11
|
+
const size = await backend.getWindowSize();
|
|
12
|
+
return {
|
|
13
|
+
content: [
|
|
14
|
+
{
|
|
15
|
+
type: 'text',
|
|
16
|
+
text: `Width: ${size.width}, Height: ${size.height}`,
|
|
17
|
+
},
|
|
18
|
+
],
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
return errorResult(error);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=window-size.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"window-size.mjs","sourceRoot":"","sources":["../../src/tools/window-size.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,YAAY;AAExB,OAAO,EAAE,WAAW,EAAE,qBAAoB;AAG1C,MAAM,UAAU,sBAAsB,CACpC,MAAiB,EACjB,OAAsB;IAEtB,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,oFAAoF;QACtF,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK;QAC/B,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;YAC3C,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,UAAU,IAAI,CAAC,KAAK,aAAa,IAAI,CAAC,MAAM,EAAE;qBACrD;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC","sourcesContent":["import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\n\nimport { errorResult } from './shared.js';\nimport type { DeviceBackend } from '../backends/types.js';\n\nexport function registerWindowSizeTool(\n server: McpServer,\n backend: DeviceBackend,\n): void {\n server.registerTool(\n 'device_get_window_size',\n {\n title: 'Get Window Size',\n description:\n 'Get the width and height of the device screen in pixels (Android) or points (iOS).',\n inputSchema: z.object({}).shape,\n annotations: { readOnlyHint: true },\n },\n async () => {\n try {\n const size = await backend.getWindowSize();\n return {\n content: [\n {\n type: 'text' as const,\n text: `Width: ${size.width}, Height: ${size.height}`,\n },\n ],\n };\n } catch (error) {\n return errorResult(error);\n }\n },\n );\n}\n"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DENY_LABELS = exports.ACCEPT_LABELS = void 0;
|
|
4
|
+
exports.ACCEPT_LABELS = [
|
|
5
|
+
'Allow',
|
|
6
|
+
'OK',
|
|
7
|
+
'Yes',
|
|
8
|
+
'Confirm',
|
|
9
|
+
'Accept',
|
|
10
|
+
'Continue',
|
|
11
|
+
'Open',
|
|
12
|
+
'ALLOW',
|
|
13
|
+
];
|
|
14
|
+
exports.DENY_LABELS = [
|
|
15
|
+
'Don\u2019t Allow',
|
|
16
|
+
"Don't Allow",
|
|
17
|
+
'Deny',
|
|
18
|
+
'Cancel',
|
|
19
|
+
'No',
|
|
20
|
+
'Dismiss',
|
|
21
|
+
'Close',
|
|
22
|
+
'Not Now',
|
|
23
|
+
'Maybe Later',
|
|
24
|
+
'DENY',
|
|
25
|
+
];
|
|
26
|
+
//# sourceMappingURL=alert-labels.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert-labels.cjs","sourceRoot":"","sources":["../../src/utils/alert-labels.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG;IAC3B,OAAO;IACP,IAAI;IACJ,KAAK;IACL,SAAS;IACT,QAAQ;IACR,UAAU;IACV,MAAM;IACN,OAAO;CACR,CAAC;AAEW,QAAA,WAAW,GAAG;IACzB,kBAAkB;IAClB,aAAa;IACb,MAAM;IACN,QAAQ;IACR,IAAI;IACJ,SAAS;IACT,OAAO;IACP,SAAS;IACT,aAAa;IACb,MAAM;CACP,CAAC","sourcesContent":["export const ACCEPT_LABELS = [\n 'Allow',\n 'OK',\n 'Yes',\n 'Confirm',\n 'Accept',\n 'Continue',\n 'Open',\n 'ALLOW',\n];\n\nexport const DENY_LABELS = [\n 'Don\\u2019t Allow',\n \"Don't Allow\",\n 'Deny',\n 'Cancel',\n 'No',\n 'Dismiss',\n 'Close',\n 'Not Now',\n 'Maybe Later',\n 'DENY',\n];\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert-labels.d.cts","sourceRoot":"","sources":["../../src/utils/alert-labels.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,UASzB,CAAC;AAEF,eAAO,MAAM,WAAW,UAWvB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert-labels.d.mts","sourceRoot":"","sources":["../../src/utils/alert-labels.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,UASzB,CAAC;AAEF,eAAO,MAAM,WAAW,UAWvB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export const ACCEPT_LABELS = [
|
|
2
|
+
'Allow',
|
|
3
|
+
'OK',
|
|
4
|
+
'Yes',
|
|
5
|
+
'Confirm',
|
|
6
|
+
'Accept',
|
|
7
|
+
'Continue',
|
|
8
|
+
'Open',
|
|
9
|
+
'ALLOW',
|
|
10
|
+
];
|
|
11
|
+
export const DENY_LABELS = [
|
|
12
|
+
'Don\u2019t Allow',
|
|
13
|
+
"Don't Allow",
|
|
14
|
+
'Deny',
|
|
15
|
+
'Cancel',
|
|
16
|
+
'No',
|
|
17
|
+
'Dismiss',
|
|
18
|
+
'Close',
|
|
19
|
+
'Not Now',
|
|
20
|
+
'Maybe Later',
|
|
21
|
+
'DENY',
|
|
22
|
+
];
|
|
23
|
+
//# sourceMappingURL=alert-labels.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert-labels.mjs","sourceRoot":"","sources":["../../src/utils/alert-labels.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,OAAO;IACP,IAAI;IACJ,KAAK;IACL,SAAS;IACT,QAAQ;IACR,UAAU;IACV,MAAM;IACN,OAAO;CACR,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,kBAAkB;IAClB,aAAa;IACb,MAAM;IACN,QAAQ;IACR,IAAI;IACJ,SAAS;IACT,OAAO;IACP,SAAS;IACT,aAAa;IACb,MAAM;CACP,CAAC","sourcesContent":["export const ACCEPT_LABELS = [\n 'Allow',\n 'OK',\n 'Yes',\n 'Confirm',\n 'Accept',\n 'Continue',\n 'Open',\n 'ALLOW',\n];\n\nexport const DENY_LABELS = [\n 'Don\\u2019t Allow',\n \"Don't Allow\",\n 'Deny',\n 'Cancel',\n 'No',\n 'Dismiss',\n 'Close',\n 'Not Now',\n 'Maybe Later',\n 'DENY',\n];\n"]}
|