claude-in-mobile 3.14.0 → 4.0.0-dev
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/README.md +61 -574
- package/dist/a11y/types.d.ts +1 -1
- package/dist/a11y/types.d.ts.map +1 -1
- package/dist/adapters/contracts.d.ts +66 -0
- package/dist/adapters/contracts.d.ts.map +1 -0
- package/dist/adapters/contracts.js +15 -0
- package/dist/adapters/contracts.js.map +1 -0
- package/dist/adapters/index.d.ts +0 -5
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +1 -5
- package/dist/adapters/index.js.map +1 -1
- package/dist/autopilot/explorer.js +1 -1
- package/dist/autopilot/explorer.js.map +1 -1
- package/dist/autopilot/healer.d.ts +1 -1
- package/dist/autopilot/healer.d.ts.map +1 -1
- package/dist/autopilot/screen-fingerprint.d.ts +1 -1
- package/dist/autopilot/screen-fingerprint.d.ts.map +1 -1
- package/dist/autopilot/types.d.ts +1 -1
- package/dist/autopilot/types.d.ts.map +1 -1
- package/dist/device/client-cache.d.ts +1 -1
- package/dist/device/client-cache.d.ts.map +1 -1
- package/dist/device/client-cache.js +4 -24
- package/dist/device/client-cache.js.map +1 -1
- package/dist/device/proxies/desktop-facade.d.ts +5 -8
- package/dist/device/proxies/desktop-facade.d.ts.map +1 -1
- package/dist/device/proxies/desktop-facade.js +12 -14
- package/dist/device/proxies/desktop-facade.js.map +1 -1
- package/dist/device-manager.d.ts +16 -16
- package/dist/device-manager.d.ts.map +1 -1
- package/dist/device-manager.js +23 -17
- package/dist/device-manager.js.map +1 -1
- package/dist/index.js +21 -6
- package/dist/index.js.map +1 -1
- package/dist/perf/collector.d.ts +5 -5
- package/dist/perf/collector.d.ts.map +1 -1
- package/dist/perf/collector.js.map +1 -1
- package/dist/runtime/bootstrap.d.ts +7 -0
- package/dist/runtime/bootstrap.d.ts.map +1 -1
- package/dist/runtime/bootstrap.js +87 -15
- package/dist/runtime/bootstrap.js.map +1 -1
- package/dist/runtime/cli.d.ts.map +1 -1
- package/dist/runtime/cli.js +14 -0
- package/dist/runtime/cli.js.map +1 -1
- package/dist/runtime/platform-cli.d.ts +24 -0
- package/dist/runtime/platform-cli.d.ts.map +1 -0
- package/dist/runtime/platform-cli.js +116 -0
- package/dist/runtime/platform-cli.js.map +1 -0
- package/dist/runtime/platform-config.d.ts +21 -0
- package/dist/runtime/platform-config.d.ts.map +1 -0
- package/dist/runtime/platform-config.js +71 -0
- package/dist/runtime/platform-config.js.map +1 -0
- package/dist/tools/browser-tools.js.map +1 -1
- package/dist/tools/clipboard-tools.js +1 -1
- package/dist/tools/clipboard-tools.js.map +1 -1
- package/dist/tools/context/hints.d.ts +1 -1
- package/dist/tools/context/hints.d.ts.map +1 -1
- package/dist/tools/context/hints.js +1 -1
- package/dist/tools/context/hints.js.map +1 -1
- package/dist/tools/context/ios-helpers.d.ts +1 -1
- package/dist/tools/context/ios-helpers.d.ts.map +1 -1
- package/dist/tools/context/shared-state-class.d.ts +1 -1
- package/dist/tools/context/shared-state-class.d.ts.map +1 -1
- package/dist/tools/context/shared-state.d.ts +1 -1
- package/dist/tools/context/shared-state.d.ts.map +1 -1
- package/dist/tools/context.d.ts +2 -1
- package/dist/tools/context.d.ts.map +1 -1
- package/dist/tools/context.js +17 -9
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/desktop-tools.d.ts.map +1 -1
- package/dist/tools/desktop-tools.js.map +1 -1
- package/dist/tools/flow/common.js +1 -1
- package/dist/tools/flow/common.js.map +1 -1
- package/dist/tools/flow/run.js +1 -1
- package/dist/tools/flow/run.js.map +1 -1
- package/dist/tools/helpers/get-elements.d.ts +1 -1
- package/dist/tools/helpers/get-elements.d.ts.map +1 -1
- package/dist/tools/helpers/get-elements.js +1 -1
- package/dist/tools/helpers/get-elements.js.map +1 -1
- package/dist/tools/helpers/resolve-element.js +1 -1
- package/dist/tools/helpers/resolve-element.js.map +1 -1
- package/dist/tools/screenshot-tools.js +1 -1
- package/dist/tools/screenshot-tools.js.map +1 -1
- package/dist/tools/ui/analyze.js +1 -1
- package/dist/tools/ui/analyze.js.map +1 -1
- package/dist/tools/ui/assert.js +1 -1
- package/dist/tools/ui/assert.js.map +1 -1
- package/dist/tools/ui/find.js +1 -1
- package/dist/tools/ui/find.js.map +1 -1
- package/dist/tools/ui/tree.js +1 -1
- package/dist/tools/ui/tree.js.map +1 -1
- package/dist/tools/ui/wait.js +1 -1
- package/dist/tools/ui/wait.js.map +1 -1
- package/dist/ui-tree/ui-parser/diff-engine.d.ts.map +1 -0
- package/dist/ui-tree/ui-parser/diff-engine.js.map +1 -0
- package/dist/ui-tree/ui-parser/element-builder.d.ts.map +1 -0
- package/dist/ui-tree/ui-parser/element-builder.js.map +1 -0
- package/dist/ui-tree/ui-parser/element-finders.d.ts.map +1 -0
- package/dist/ui-tree/ui-parser/element-finders.js.map +1 -0
- package/dist/ui-tree/ui-parser/formatters/compact.d.ts.map +1 -0
- package/dist/ui-tree/ui-parser/formatters/compact.js.map +1 -0
- package/dist/ui-tree/ui-parser/formatters/full.d.ts.map +1 -0
- package/dist/ui-tree/ui-parser/formatters/full.js.map +1 -0
- package/dist/ui-tree/ui-parser/formatters/index.d.ts.map +1 -0
- package/dist/ui-tree/ui-parser/formatters/index.js.map +1 -0
- package/dist/ui-tree/ui-parser/formatters/semantic.d.ts.map +1 -0
- package/dist/ui-tree/ui-parser/formatters/semantic.js.map +1 -0
- package/dist/ui-tree/ui-parser/node-parser.d.ts.map +1 -0
- package/dist/ui-tree/ui-parser/node-parser.js.map +1 -0
- package/dist/ui-tree/ui-parser/screen-analyzer.d.ts.map +1 -0
- package/dist/ui-tree/ui-parser/screen-analyzer.js.map +1 -0
- package/dist/ui-tree/ui-parser/types.d.ts.map +1 -0
- package/dist/ui-tree/ui-parser/types.js.map +1 -0
- package/dist/ui-tree/ui-parser.d.ts.map +1 -0
- package/dist/ui-tree/ui-parser.js.map +1 -0
- package/dist/ui-tree/ui-scoring.d.ts.map +1 -0
- package/dist/ui-tree/ui-scoring.js.map +1 -0
- package/dist/ui-tree/ui-tree-cache.d.ts.map +1 -0
- package/dist/ui-tree/ui-tree-cache.js.map +1 -0
- package/dist/utils/image/annotate.d.ts +1 -1
- package/dist/utils/image/annotate.d.ts.map +1 -1
- package/package.json +11 -6
- package/dist/adapters/android-adapter.d.ts +0 -64
- package/dist/adapters/android-adapter.d.ts.map +0 -1
- package/dist/adapters/android-adapter.js +0 -164
- package/dist/adapters/android-adapter.js.map +0 -1
- package/dist/adapters/aurora-adapter.d.ts +0 -56
- package/dist/adapters/aurora-adapter.d.ts.map +0 -1
- package/dist/adapters/aurora-adapter.js +0 -118
- package/dist/adapters/aurora-adapter.js.map +0 -1
- package/dist/adapters/browser-adapter.d.ts +0 -51
- package/dist/adapters/browser-adapter.d.ts.map +0 -1
- package/dist/adapters/browser-adapter.js +0 -223
- package/dist/adapters/browser-adapter.js.map +0 -1
- package/dist/adapters/desktop-adapter.d.ts +0 -64
- package/dist/adapters/desktop-adapter.d.ts.map +0 -1
- package/dist/adapters/desktop-adapter.js +0 -202
- package/dist/adapters/desktop-adapter.js.map +0 -1
- package/dist/adapters/ios-adapter.d.ts +0 -60
- package/dist/adapters/ios-adapter.d.ts.map +0 -1
- package/dist/adapters/ios-adapter.js +0 -146
- package/dist/adapters/ios-adapter.js.map +0 -1
- package/dist/adb/client.d.ts +0 -238
- package/dist/adb/client.d.ts.map +0 -1
- package/dist/adb/client.js +0 -462
- package/dist/adb/client.js.map +0 -1
- package/dist/adb/exec.d.ts +0 -23
- package/dist/adb/exec.d.ts.map +0 -1
- package/dist/adb/exec.js +0 -98
- package/dist/adb/exec.js.map +0 -1
- package/dist/adb/index.d.ts +0 -5
- package/dist/adb/index.d.ts.map +0 -1
- package/dist/adb/index.js +0 -3
- package/dist/adb/index.js.map +0 -1
- package/dist/adb/keycodes.d.ts +0 -22
- package/dist/adb/keycodes.d.ts.map +0 -1
- package/dist/adb/keycodes.js +0 -69
- package/dist/adb/keycodes.js.map +0 -1
- package/dist/adb/logcat.d.ts +0 -23
- package/dist/adb/logcat.d.ts.map +0 -1
- package/dist/adb/logcat.js +0 -40
- package/dist/adb/logcat.js.map +0 -1
- package/dist/adb/parsers.d.ts +0 -60
- package/dist/adb/parsers.d.ts.map +0 -1
- package/dist/adb/parsers.js +0 -118
- package/dist/adb/parsers.js.map +0 -1
- package/dist/adb/resolver.d.ts +0 -24
- package/dist/adb/resolver.d.ts.map +0 -1
- package/dist/adb/resolver.js +0 -130
- package/dist/adb/resolver.js.map +0 -1
- package/dist/adb/text-escape.d.ts +0 -23
- package/dist/adb/text-escape.d.ts.map +0 -1
- package/dist/adb/text-escape.js +0 -41
- package/dist/adb/text-escape.js.map +0 -1
- package/dist/adb/ui-parser/diff-engine.d.ts.map +0 -1
- package/dist/adb/ui-parser/diff-engine.js.map +0 -1
- package/dist/adb/ui-parser/element-builder.d.ts.map +0 -1
- package/dist/adb/ui-parser/element-builder.js.map +0 -1
- package/dist/adb/ui-parser/element-finders.d.ts.map +0 -1
- package/dist/adb/ui-parser/element-finders.js.map +0 -1
- package/dist/adb/ui-parser/formatters/compact.d.ts.map +0 -1
- package/dist/adb/ui-parser/formatters/compact.js.map +0 -1
- package/dist/adb/ui-parser/formatters/full.d.ts.map +0 -1
- package/dist/adb/ui-parser/formatters/full.js.map +0 -1
- package/dist/adb/ui-parser/formatters/index.d.ts.map +0 -1
- package/dist/adb/ui-parser/formatters/index.js.map +0 -1
- package/dist/adb/ui-parser/formatters/semantic.d.ts.map +0 -1
- package/dist/adb/ui-parser/formatters/semantic.js.map +0 -1
- package/dist/adb/ui-parser/node-parser.d.ts.map +0 -1
- package/dist/adb/ui-parser/node-parser.js.map +0 -1
- package/dist/adb/ui-parser/screen-analyzer.d.ts.map +0 -1
- package/dist/adb/ui-parser/screen-analyzer.js.map +0 -1
- package/dist/adb/ui-parser/types.d.ts.map +0 -1
- package/dist/adb/ui-parser/types.js.map +0 -1
- package/dist/adb/ui-parser.d.ts.map +0 -1
- package/dist/adb/ui-parser.js.map +0 -1
- package/dist/adb/ui-scoring.d.ts.map +0 -1
- package/dist/adb/ui-scoring.js.map +0 -1
- package/dist/adb/ui-tree-cache.d.ts.map +0 -1
- package/dist/adb/ui-tree-cache.js.map +0 -1
- package/dist/adb/webview.d.ts +0 -59
- package/dist/adb/webview.d.ts.map +0 -1
- package/dist/adb/webview.js +0 -169
- package/dist/adb/webview.js.map +0 -1
- package/dist/aurora/client.d.ts +0 -180
- package/dist/aurora/client.d.ts.map +0 -1
- package/dist/aurora/client.js +0 -324
- package/dist/aurora/client.js.map +0 -1
- package/dist/aurora/index.d.ts +0 -2
- package/dist/aurora/index.d.ts.map +0 -1
- package/dist/aurora/index.js +0 -2
- package/dist/aurora/index.js.map +0 -1
- package/dist/browser/cdp-helpers.d.ts +0 -17
- package/dist/browser/cdp-helpers.d.ts.map +0 -1
- package/dist/browser/cdp-helpers.js +0 -79
- package/dist/browser/cdp-helpers.js.map +0 -1
- package/dist/browser/cdp-types.d.ts +0 -167
- package/dist/browser/cdp-types.d.ts.map +0 -1
- package/dist/browser/cdp-types.js +0 -9
- package/dist/browser/cdp-types.js.map +0 -1
- package/dist/browser/client.d.ts +0 -29
- package/dist/browser/client.d.ts.map +0 -1
- package/dist/browser/client.js +0 -391
- package/dist/browser/client.js.map +0 -1
- package/dist/browser/index.d.ts +0 -5
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/browser/index.js +0 -4
- package/dist/browser/index.js.map +0 -1
- package/dist/browser/key-map.d.ts +0 -16
- package/dist/browser/key-map.d.ts.map +0 -1
- package/dist/browser/key-map.js +0 -35
- package/dist/browser/key-map.js.map +0 -1
- package/dist/browser/session-manager.d.ts +0 -21
- package/dist/browser/session-manager.d.ts.map +0 -1
- package/dist/browser/session-manager.js +0 -109
- package/dist/browser/session-manager.js.map +0 -1
- package/dist/browser/snapshot-builder.d.ts +0 -4
- package/dist/browser/snapshot-builder.d.ts.map +0 -1
- package/dist/browser/snapshot-builder.js +0 -76
- package/dist/browser/snapshot-builder.js.map +0 -1
- package/dist/browser/types.d.ts +0 -75
- package/dist/browser/types.d.ts.map +0 -1
- package/dist/browser/types.js +0 -11
- package/dist/browser/types.js.map +0 -1
- package/dist/desktop/client.d.ts +0 -196
- package/dist/desktop/client.d.ts.map +0 -1
- package/dist/desktop/client.js +0 -540
- package/dist/desktop/client.js.map +0 -1
- package/dist/desktop/gradle.d.ts +0 -45
- package/dist/desktop/gradle.d.ts.map +0 -1
- package/dist/desktop/gradle.js +0 -234
- package/dist/desktop/gradle.js.map +0 -1
- package/dist/desktop/index.d.ts +0 -7
- package/dist/desktop/index.d.ts.map +0 -1
- package/dist/desktop/index.js +0 -7
- package/dist/desktop/index.js.map +0 -1
- package/dist/desktop/launch-options.d.ts +0 -13
- package/dist/desktop/launch-options.d.ts.map +0 -1
- package/dist/desktop/launch-options.js +0 -54
- package/dist/desktop/launch-options.js.map +0 -1
- package/dist/desktop/launchers.d.ts +0 -52
- package/dist/desktop/launchers.d.ts.map +0 -1
- package/dist/desktop/launchers.js +0 -125
- package/dist/desktop/launchers.js.map +0 -1
- package/dist/desktop/log-ring.d.ts +0 -21
- package/dist/desktop/log-ring.d.ts.map +0 -1
- package/dist/desktop/log-ring.js +0 -45
- package/dist/desktop/log-ring.js.map +0 -1
- package/dist/desktop/permission-allowlist.d.ts +0 -47
- package/dist/desktop/permission-allowlist.d.ts.map +0 -1
- package/dist/desktop/permission-allowlist.js +0 -148
- package/dist/desktop/permission-allowlist.js.map +0 -1
- package/dist/desktop/types.d.ts +0 -177
- package/dist/desktop/types.d.ts.map +0 -1
- package/dist/desktop/types.js +0 -5
- package/dist/desktop/types.js.map +0 -1
- package/dist/ios/client.d.ts +0 -204
- package/dist/ios/client.d.ts.map +0 -1
- package/dist/ios/client.js +0 -483
- package/dist/ios/client.js.map +0 -1
- package/dist/ios/go-ios/client.d.ts +0 -23
- package/dist/ios/go-ios/client.d.ts.map +0 -1
- package/dist/ios/go-ios/client.js +0 -51
- package/dist/ios/go-ios/client.js.map +0 -1
- package/dist/ios/go-ios/index.d.ts +0 -4
- package/dist/ios/go-ios/index.d.ts.map +0 -1
- package/dist/ios/go-ios/index.js +0 -3
- package/dist/ios/go-ios/index.js.map +0 -1
- package/dist/ios/go-ios/parsers.d.ts +0 -28
- package/dist/ios/go-ios/parsers.d.ts.map +0 -1
- package/dist/ios/go-ios/parsers.js +0 -71
- package/dist/ios/go-ios/parsers.js.map +0 -1
- package/dist/ios/index.d.ts +0 -2
- package/dist/ios/index.d.ts.map +0 -1
- package/dist/ios/index.js +0 -2
- package/dist/ios/index.js.map +0 -1
- package/dist/ios/keymap.d.ts +0 -20
- package/dist/ios/keymap.d.ts.map +0 -1
- package/dist/ios/keymap.js +0 -33
- package/dist/ios/keymap.js.map +0 -1
- package/dist/ios/simctl-commands.d.ts +0 -35
- package/dist/ios/simctl-commands.d.ts.map +0 -1
- package/dist/ios/simctl-commands.js +0 -60
- package/dist/ios/simctl-commands.js.map +0 -1
- package/dist/ios/simctl-exec.d.ts +0 -19
- package/dist/ios/simctl-exec.d.ts.map +0 -1
- package/dist/ios/simctl-exec.js +0 -55
- package/dist/ios/simctl-exec.js.map +0 -1
- package/dist/ios/simctl-parsers.d.ts +0 -10
- package/dist/ios/simctl-parsers.d.ts.map +0 -1
- package/dist/ios/simctl-parsers.js +0 -29
- package/dist/ios/simctl-parsers.js.map +0 -1
- package/dist/ios/types.d.ts +0 -8
- package/dist/ios/types.d.ts.map +0 -1
- package/dist/ios/types.js +0 -2
- package/dist/ios/types.js.map +0 -1
- package/dist/ios/wda/index.d.ts +0 -4
- package/dist/ios/wda/index.d.ts.map +0 -1
- package/dist/ios/wda/index.js +0 -4
- package/dist/ios/wda/index.js.map +0 -1
- package/dist/ios/wda/wda-client.d.ts +0 -33
- package/dist/ios/wda/wda-client.d.ts.map +0 -1
- package/dist/ios/wda/wda-client.js +0 -250
- package/dist/ios/wda/wda-client.js.map +0 -1
- package/dist/ios/wda/wda-manager.d.ts +0 -34
- package/dist/ios/wda/wda-manager.d.ts.map +0 -1
- package/dist/ios/wda/wda-manager.js +0 -392
- package/dist/ios/wda/wda-manager.js.map +0 -1
- package/dist/ios/wda/wda-types.d.ts +0 -39
- package/dist/ios/wda/wda-types.d.ts.map +0 -1
- package/dist/ios/wda/wda-types.js +0 -2
- package/dist/ios/wda/wda-types.js.map +0 -1
- package/dist/ios/wda-errors.d.ts +0 -8
- package/dist/ios/wda-errors.d.ts.map +0 -1
- package/dist/ios/wda-errors.js +0 -13
- package/dist/ios/wda-errors.js.map +0 -1
- package/dist/ios/wda-payloads.d.ts +0 -32
- package/dist/ios/wda-payloads.d.ts.map +0 -1
- package/dist/ios/wda-payloads.js +0 -31
- package/dist/ios/wda-payloads.js.map +0 -1
- package/dist/plugins/android/index.d.ts +0 -23
- package/dist/plugins/android/index.d.ts.map +0 -1
- package/dist/plugins/android/index.js +0 -45
- package/dist/plugins/android/index.js.map +0 -1
- package/dist/plugins/aurora/index.d.ts +0 -17
- package/dist/plugins/aurora/index.d.ts.map +0 -1
- package/dist/plugins/aurora/index.js +0 -27
- package/dist/plugins/aurora/index.js.map +0 -1
- package/dist/plugins/desktop/index.d.ts +0 -18
- package/dist/plugins/desktop/index.d.ts.map +0 -1
- package/dist/plugins/desktop/index.js +0 -28
- package/dist/plugins/desktop/index.js.map +0 -1
- package/dist/plugins/ios/index.d.ts +0 -17
- package/dist/plugins/ios/index.d.ts.map +0 -1
- package/dist/plugins/ios/index.js +0 -36
- package/dist/plugins/ios/index.js.map +0 -1
- package/dist/plugins/web/index.d.ts +0 -17
- package/dist/plugins/web/index.d.ts.map +0 -1
- package/dist/plugins/web/index.js +0 -27
- package/dist/plugins/web/index.js.map +0 -1
- /package/dist/{adb → ui-tree}/ui-parser/diff-engine.d.ts +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/diff-engine.js +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/element-builder.d.ts +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/element-builder.js +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/element-finders.d.ts +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/element-finders.js +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/formatters/compact.d.ts +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/formatters/compact.js +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/formatters/full.d.ts +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/formatters/full.js +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/formatters/index.d.ts +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/formatters/index.js +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/formatters/semantic.d.ts +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/formatters/semantic.js +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/node-parser.d.ts +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/node-parser.js +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/screen-analyzer.d.ts +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/screen-analyzer.js +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/types.d.ts +0 -0
- /package/dist/{adb → ui-tree}/ui-parser/types.js +0 -0
- /package/dist/{adb → ui-tree}/ui-parser.d.ts +0 -0
- /package/dist/{adb → ui-tree}/ui-parser.js +0 -0
- /package/dist/{adb → ui-tree}/ui-scoring.d.ts +0 -0
- /package/dist/{adb → ui-tree}/ui-scoring.js +0 -0
- /package/dist/{adb → ui-tree}/ui-tree-cache.d.ts +0 -0
- /package/dist/{adb → ui-tree}/ui-tree-cache.js +0 -0
|
@@ -1,392 +0,0 @@
|
|
|
1
|
-
import { execSync, spawn } from "child_process";
|
|
2
|
-
import * as fs from "fs";
|
|
3
|
-
import * as path from "path";
|
|
4
|
-
import * as os from "os";
|
|
5
|
-
import { WDAClient } from "./wda-client.js";
|
|
6
|
-
/** Port WDA listens on inside a physical device; the local end is forwarded. */
|
|
7
|
-
const DEVICE_WDA_PORT = 8100;
|
|
8
|
-
/** go-ios binary (overridable, mirrors src/ios/go-ios/client.ts). */
|
|
9
|
-
const GO_IOS_BIN = process.env.GO_IOS_BIN ?? "ios";
|
|
10
|
-
export class WDAManager {
|
|
11
|
-
instances = new Map();
|
|
12
|
-
clients = new Map();
|
|
13
|
-
/** Deduplicates parallel launches for the same device */
|
|
14
|
-
launchPromises = new Map();
|
|
15
|
-
/** Long-lived `ios forward` processes for physical devices, by udid. */
|
|
16
|
-
forwards = new Map();
|
|
17
|
-
startupTimeout = 30000;
|
|
18
|
-
/** Physical first-run does a full device build+sign+install — much slower. */
|
|
19
|
-
deviceStartupTimeout = 300000;
|
|
20
|
-
buildTimeout = 120000;
|
|
21
|
-
async ensureWDAReady(deviceId, isSimulator = true) {
|
|
22
|
-
// Check existing client
|
|
23
|
-
if (this.clients.has(deviceId)) {
|
|
24
|
-
const client = this.clients.get(deviceId);
|
|
25
|
-
try {
|
|
26
|
-
await client.ensureSession(deviceId);
|
|
27
|
-
return client;
|
|
28
|
-
}
|
|
29
|
-
catch (error) {
|
|
30
|
-
const msg = error instanceof Error ? error.message : String(error);
|
|
31
|
-
console.error("WDA client failed, relaunching:", msg);
|
|
32
|
-
// Clean up failed instance
|
|
33
|
-
const instance = this.instances.get(deviceId);
|
|
34
|
-
if (instance) {
|
|
35
|
-
try {
|
|
36
|
-
process.kill(instance.pid);
|
|
37
|
-
}
|
|
38
|
-
catch { }
|
|
39
|
-
}
|
|
40
|
-
this.clients.delete(deviceId);
|
|
41
|
-
this.instances.delete(deviceId);
|
|
42
|
-
// Fall through to relaunch
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
// Deduplicate parallel launches — if another call is already launching
|
|
46
|
-
// WDA for this device, reuse its promise instead of spawning a second xcodebuild
|
|
47
|
-
if (this.launchPromises.has(deviceId)) {
|
|
48
|
-
return this.launchPromises.get(deviceId);
|
|
49
|
-
}
|
|
50
|
-
const launchPromise = this.doLaunch(deviceId, isSimulator);
|
|
51
|
-
this.launchPromises.set(deviceId, launchPromise);
|
|
52
|
-
try {
|
|
53
|
-
return await launchPromise;
|
|
54
|
-
}
|
|
55
|
-
finally {
|
|
56
|
-
this.launchPromises.delete(deviceId);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
async doLaunch(deviceId, isSimulator) {
|
|
60
|
-
const wdaPath = await this.discoverWDA();
|
|
61
|
-
const port = await this.findFreePort();
|
|
62
|
-
if (isSimulator) {
|
|
63
|
-
await this.buildWDAIfNeeded(wdaPath);
|
|
64
|
-
await this.launchWDA(wdaPath, deviceId, port);
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
await this.launchWDADevice(wdaPath, deviceId, port);
|
|
68
|
-
}
|
|
69
|
-
const client = new WDAClient(port);
|
|
70
|
-
await client.ensureSession(deviceId);
|
|
71
|
-
this.clients.set(deviceId, client);
|
|
72
|
-
return client;
|
|
73
|
-
}
|
|
74
|
-
async discoverWDA() {
|
|
75
|
-
const searchPaths = [
|
|
76
|
-
process.env.WDA_PATH,
|
|
77
|
-
path.join(os.homedir(), ".appium/node_modules/appium-xcuitest-driver/node_modules/appium-webdriveragent"),
|
|
78
|
-
"/opt/homebrew/lib/node_modules/appium/node_modules/appium-xcuitest-driver/node_modules/appium-webdriveragent",
|
|
79
|
-
"/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/node_modules/appium-webdriveragent",
|
|
80
|
-
].filter(Boolean);
|
|
81
|
-
for (const searchPath of searchPaths) {
|
|
82
|
-
if (fs.existsSync(searchPath)) {
|
|
83
|
-
const projectPath = path.join(searchPath, "WebDriverAgent.xcodeproj");
|
|
84
|
-
if (fs.existsSync(projectPath)) {
|
|
85
|
-
return searchPath;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
throw new Error("WebDriverAgent not found.\n\n" +
|
|
90
|
-
"Install Appium with XCUITest driver:\n" +
|
|
91
|
-
" npm install -g appium\n" +
|
|
92
|
-
" appium driver install xcuitest\n\n" +
|
|
93
|
-
"Or set WDA_PATH environment variable:\n" +
|
|
94
|
-
" export WDA_PATH=/path/to/WebDriverAgent\n\n" +
|
|
95
|
-
"Search paths checked:\n" +
|
|
96
|
-
searchPaths.map((p) => ` - ${p}`).join("\n"));
|
|
97
|
-
}
|
|
98
|
-
async buildWDAIfNeeded(wdaPath) {
|
|
99
|
-
const buildDir = path.join(wdaPath, "build");
|
|
100
|
-
if (fs.existsSync(buildDir)) {
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
console.error("Building WebDriverAgent for first use...");
|
|
104
|
-
try {
|
|
105
|
-
execSync("xcodebuild build-for-testing " +
|
|
106
|
-
"-project WebDriverAgent.xcodeproj " +
|
|
107
|
-
"-scheme WebDriverAgentRunner " +
|
|
108
|
-
"-destination 'platform=iOS Simulator,name=iPhone 14'", {
|
|
109
|
-
cwd: wdaPath,
|
|
110
|
-
timeout: this.buildTimeout,
|
|
111
|
-
stdio: "pipe",
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
catch (error) {
|
|
115
|
-
const e = error;
|
|
116
|
-
const detail = e.stderr?.toString() || e.stdout?.toString() || e.message || String(error);
|
|
117
|
-
throw new Error("Failed to build WebDriverAgent.\n\n" +
|
|
118
|
-
`${detail}\n\n` +
|
|
119
|
-
"Troubleshooting:\n" +
|
|
120
|
-
"1. Install Xcode: https://apps.apple.com/app/xcode/id497799835\n" +
|
|
121
|
-
"2. Install command line tools: xcode-select --install\n" +
|
|
122
|
-
"3. Accept license: sudo xcodebuild -license accept\n" +
|
|
123
|
-
"4. Set Xcode path: sudo xcode-select -s /Applications/Xcode.app");
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
async launchWDA(wdaPath, deviceId, port) {
|
|
127
|
-
const existingInstance = this.instances.get(deviceId);
|
|
128
|
-
if (existingInstance) {
|
|
129
|
-
try {
|
|
130
|
-
process.kill(existingInstance.pid, 0);
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
catch {
|
|
134
|
-
this.instances.delete(deviceId);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
const wdaProcess = spawn("xcodebuild", [
|
|
138
|
-
"test-without-building",
|
|
139
|
-
"-project",
|
|
140
|
-
"WebDriverAgent.xcodeproj",
|
|
141
|
-
"-scheme",
|
|
142
|
-
"WebDriverAgentRunner",
|
|
143
|
-
"-destination",
|
|
144
|
-
`platform=iOS Simulator,id=${deviceId}`,
|
|
145
|
-
], {
|
|
146
|
-
cwd: wdaPath,
|
|
147
|
-
env: {
|
|
148
|
-
...process.env,
|
|
149
|
-
USE_PORT: port.toString(),
|
|
150
|
-
},
|
|
151
|
-
stdio: "pipe",
|
|
152
|
-
});
|
|
153
|
-
this.instances.set(deviceId, {
|
|
154
|
-
pid: wdaProcess.pid,
|
|
155
|
-
port,
|
|
156
|
-
deviceId,
|
|
157
|
-
});
|
|
158
|
-
const MAX_OUTPUT_CHARS = 50_000;
|
|
159
|
-
let output = "";
|
|
160
|
-
const appendOutput = (data) => {
|
|
161
|
-
output += data.toString();
|
|
162
|
-
if (output.length > MAX_OUTPUT_CHARS) {
|
|
163
|
-
output = output.slice(output.length - MAX_OUTPUT_CHARS);
|
|
164
|
-
}
|
|
165
|
-
};
|
|
166
|
-
wdaProcess.stdout?.on("data", appendOutput);
|
|
167
|
-
wdaProcess.stderr?.on("data", appendOutput);
|
|
168
|
-
wdaProcess.on("exit", (code) => {
|
|
169
|
-
this.instances.delete(deviceId);
|
|
170
|
-
this.clients.delete(deviceId);
|
|
171
|
-
});
|
|
172
|
-
const startTime = Date.now();
|
|
173
|
-
while (Date.now() - startTime < this.startupTimeout) {
|
|
174
|
-
try {
|
|
175
|
-
const health = await this.checkHealth(port);
|
|
176
|
-
if (health) {
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
catch {
|
|
181
|
-
// Continue waiting
|
|
182
|
-
}
|
|
183
|
-
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
184
|
-
}
|
|
185
|
-
try {
|
|
186
|
-
process.kill(wdaProcess.pid);
|
|
187
|
-
}
|
|
188
|
-
catch { }
|
|
189
|
-
throw new Error("WebDriverAgent failed to start within 30s.\n\n" +
|
|
190
|
-
"Troubleshooting:\n" +
|
|
191
|
-
"1. Check simulator is running: xcrun simctl list | grep Booted\n" +
|
|
192
|
-
"2. Check logs: ~/Library/Logs/CoreSimulator/" +
|
|
193
|
-
deviceId +
|
|
194
|
-
"/system.log\n" +
|
|
195
|
-
"3. Try manual launch to see errors:\n" +
|
|
196
|
-
` cd ${wdaPath}\n` +
|
|
197
|
-
" xcodebuild test -project WebDriverAgent.xcodeproj \\\n" +
|
|
198
|
-
" -scheme WebDriverAgentRunner \\\n" +
|
|
199
|
-
` -destination 'platform=iOS Simulator,id=${deviceId}'\n\n` +
|
|
200
|
-
`Last output:\n${output.slice(-500)}`);
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Launch WDA on a PHYSICAL device. Unlike the simulator path we use
|
|
204
|
-
* `xcodebuild test` (build+sign+install+run in one shot, automatic
|
|
205
|
-
* provisioning) targeting the device destination, then forward the device's
|
|
206
|
-
* WDA port to a local port via go-ios so the localhost WDAClient is unchanged.
|
|
207
|
-
*/
|
|
208
|
-
async launchWDADevice(wdaPath, udid, localPort) {
|
|
209
|
-
const existingInstance = this.instances.get(udid);
|
|
210
|
-
if (existingInstance) {
|
|
211
|
-
try {
|
|
212
|
-
process.kill(existingInstance.pid, 0);
|
|
213
|
-
this.ensureForward(udid, localPort);
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
catch {
|
|
217
|
-
this.instances.delete(udid);
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
const teamId = this.resolveTeamId();
|
|
221
|
-
if (!teamId) {
|
|
222
|
-
throw new Error("No Apple Development team found for signing WebDriverAgent on a " +
|
|
223
|
-
"physical device. Set IOS_TEAM_ID, or sign in to Xcode with an " +
|
|
224
|
-
"Apple ID that has a development certificate.");
|
|
225
|
-
}
|
|
226
|
-
// The stock runner bundle id `com.facebook.WebDriverAgentRunner` belongs to
|
|
227
|
-
// Facebook and cannot be provisioned under another team. Override it with a
|
|
228
|
-
// team-unique id for physical signing (WDA_BUNDLE_ID), defaulting to one
|
|
229
|
-
// derived from the team so automatic provisioning can register it.
|
|
230
|
-
const bundleId = process.env.WDA_BUNDLE_ID ?? `com.${teamId}.WebDriverAgentRunner`;
|
|
231
|
-
const wdaProcess = spawn("xcodebuild", [
|
|
232
|
-
"test",
|
|
233
|
-
"-project",
|
|
234
|
-
"WebDriverAgent.xcodeproj",
|
|
235
|
-
"-scheme",
|
|
236
|
-
"WebDriverAgentRunner",
|
|
237
|
-
"-destination",
|
|
238
|
-
`platform=iOS,id=${udid}`,
|
|
239
|
-
"-allowProvisioningUpdates",
|
|
240
|
-
`DEVELOPMENT_TEAM=${teamId}`,
|
|
241
|
-
"CODE_SIGN_STYLE=Automatic",
|
|
242
|
-
`PRODUCT_BUNDLE_IDENTIFIER=${bundleId}`,
|
|
243
|
-
], {
|
|
244
|
-
cwd: wdaPath,
|
|
245
|
-
env: { ...process.env, USE_PORT: DEVICE_WDA_PORT.toString() },
|
|
246
|
-
stdio: "pipe",
|
|
247
|
-
});
|
|
248
|
-
this.instances.set(udid, { pid: wdaProcess.pid, port: localPort, deviceId: udid });
|
|
249
|
-
const MAX_OUTPUT_CHARS = 50_000;
|
|
250
|
-
let output = "";
|
|
251
|
-
const appendOutput = (data) => {
|
|
252
|
-
output += data.toString();
|
|
253
|
-
if (output.length > MAX_OUTPUT_CHARS) {
|
|
254
|
-
output = output.slice(output.length - MAX_OUTPUT_CHARS);
|
|
255
|
-
}
|
|
256
|
-
};
|
|
257
|
-
let buildExited = false;
|
|
258
|
-
wdaProcess.stdout?.on("data", appendOutput);
|
|
259
|
-
wdaProcess.stderr?.on("data", appendOutput);
|
|
260
|
-
wdaProcess.on("exit", () => {
|
|
261
|
-
buildExited = true;
|
|
262
|
-
this.instances.delete(udid);
|
|
263
|
-
this.clients.delete(udid);
|
|
264
|
-
this.stopForward(udid);
|
|
265
|
-
});
|
|
266
|
-
// Forward device WDA port -> local port so localhost WDAClient works.
|
|
267
|
-
this.ensureForward(udid, localPort);
|
|
268
|
-
const startTime = Date.now();
|
|
269
|
-
while (Date.now() - startTime < this.deviceStartupTimeout) {
|
|
270
|
-
try {
|
|
271
|
-
if (await this.checkHealth(localPort))
|
|
272
|
-
return;
|
|
273
|
-
}
|
|
274
|
-
catch {
|
|
275
|
-
// keep waiting through the build
|
|
276
|
-
}
|
|
277
|
-
// Fail fast: if xcodebuild died (e.g. a signing error) there is nothing
|
|
278
|
-
// left to wait for — don't burn the full device timeout.
|
|
279
|
-
if (buildExited)
|
|
280
|
-
break;
|
|
281
|
-
await new Promise((resolve) => setTimeout(resolve, 1500));
|
|
282
|
-
}
|
|
283
|
-
try {
|
|
284
|
-
process.kill(wdaProcess.pid);
|
|
285
|
-
}
|
|
286
|
-
catch { }
|
|
287
|
-
this.stopForward(udid);
|
|
288
|
-
const reason = buildExited
|
|
289
|
-
? "the xcodebuild test process exited before WebDriverAgent came up"
|
|
290
|
-
: `WebDriverAgent did not come up within ${this.deviceStartupTimeout / 1000}s`;
|
|
291
|
-
throw new Error(`Failed to start WebDriverAgent on the physical device: ${reason}.\n\n` +
|
|
292
|
-
"Troubleshooting:\n" +
|
|
293
|
-
"1. Sign in to Xcode with the Apple ID for your team in Xcode > " +
|
|
294
|
-
"Settings > Accounts (automatic provisioning needs an account, not " +
|
|
295
|
-
"just a keychain certificate).\n" +
|
|
296
|
-
"2. Set a team-unique WDA bundle id if signing the stock one fails: " +
|
|
297
|
-
"export WDA_BUNDLE_ID=com.<you>.WebDriverAgentRunner\n" +
|
|
298
|
-
"3. Enable Developer Mode on the device (Settings > Privacy & " +
|
|
299
|
-
"Security > Developer Mode) and trust this Mac.\n" +
|
|
300
|
-
"4. On iOS 17+, port-forward may need the go-ios tunnel: " +
|
|
301
|
-
"`sudo ios tunnel start` (or ENABLE_GO_IOS_AGENT=user).\n\n" +
|
|
302
|
-
`Last output:\n${output.slice(-800)}`);
|
|
303
|
-
}
|
|
304
|
-
/** Start (idempotently) an `ios forward localPort -> DEVICE_WDA_PORT`. */
|
|
305
|
-
ensureForward(udid, localPort) {
|
|
306
|
-
if (this.forwards.has(udid))
|
|
307
|
-
return;
|
|
308
|
-
const fwd = spawn(GO_IOS_BIN, ["forward", "--udid", udid, localPort.toString(), DEVICE_WDA_PORT.toString()], { stdio: ["ignore", "ignore", "ignore"] });
|
|
309
|
-
fwd.on("exit", () => this.forwards.delete(udid));
|
|
310
|
-
this.forwards.set(udid, fwd);
|
|
311
|
-
}
|
|
312
|
-
stopForward(udid) {
|
|
313
|
-
const fwd = this.forwards.get(udid);
|
|
314
|
-
if (fwd) {
|
|
315
|
-
try {
|
|
316
|
-
fwd.kill();
|
|
317
|
-
}
|
|
318
|
-
catch { }
|
|
319
|
-
this.forwards.delete(udid);
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
/** Team ID for signing: explicit env wins, else first codesigning identity. */
|
|
323
|
-
resolveTeamId() {
|
|
324
|
-
if (process.env.IOS_TEAM_ID)
|
|
325
|
-
return process.env.IOS_TEAM_ID;
|
|
326
|
-
if (process.env.WDA_TEAM_ID)
|
|
327
|
-
return process.env.WDA_TEAM_ID;
|
|
328
|
-
try {
|
|
329
|
-
const out = execSync("security find-identity -v -p codesigning", {
|
|
330
|
-
encoding: "utf-8",
|
|
331
|
-
timeout: 5000,
|
|
332
|
-
});
|
|
333
|
-
const match = out.match(/\(([A-Z0-9]{10})\)/);
|
|
334
|
-
return match?.[1];
|
|
335
|
-
}
|
|
336
|
-
catch {
|
|
337
|
-
return undefined;
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
async checkHealth(port) {
|
|
341
|
-
try {
|
|
342
|
-
const controller = new AbortController();
|
|
343
|
-
const timeout = setTimeout(() => controller.abort(), 2000);
|
|
344
|
-
const response = await fetch(`http://localhost:${port}/status`, {
|
|
345
|
-
signal: controller.signal,
|
|
346
|
-
});
|
|
347
|
-
clearTimeout(timeout);
|
|
348
|
-
return response.ok;
|
|
349
|
-
}
|
|
350
|
-
catch {
|
|
351
|
-
return false;
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
async findFreePort() {
|
|
355
|
-
const { createServer } = await import("net");
|
|
356
|
-
for (let port = 8100; port < 8200; port++) {
|
|
357
|
-
try {
|
|
358
|
-
await new Promise((resolve, reject) => {
|
|
359
|
-
const server = createServer();
|
|
360
|
-
server.once("error", reject);
|
|
361
|
-
server.once("listening", () => {
|
|
362
|
-
server.close(() => resolve());
|
|
363
|
-
});
|
|
364
|
-
server.listen(port);
|
|
365
|
-
});
|
|
366
|
-
return port;
|
|
367
|
-
}
|
|
368
|
-
catch {
|
|
369
|
-
continue;
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
throw new Error("No free ports available in range 8100-8200");
|
|
373
|
-
}
|
|
374
|
-
cleanup() {
|
|
375
|
-
for (const [deviceId, instance] of this.instances) {
|
|
376
|
-
try {
|
|
377
|
-
process.kill(instance.pid);
|
|
378
|
-
}
|
|
379
|
-
catch { }
|
|
380
|
-
const client = this.clients.get(deviceId);
|
|
381
|
-
if (client) {
|
|
382
|
-
client.deleteSession().catch(() => { });
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
for (const udid of [...this.forwards.keys()]) {
|
|
386
|
-
this.stopForward(udid);
|
|
387
|
-
}
|
|
388
|
-
this.instances.clear();
|
|
389
|
-
this.clients.clear();
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
//# sourceMappingURL=wda-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wda-manager.js","sourceRoot":"","sources":["../../../src/ios/wda/wda-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
export interface WDASession {
|
|
2
|
-
sessionId: string;
|
|
3
|
-
capabilities: Record<string, any>;
|
|
4
|
-
}
|
|
5
|
-
export interface WDAElement {
|
|
6
|
-
ELEMENT: string;
|
|
7
|
-
"element-6066-11e4-a52e-4f735466cecf"?: string;
|
|
8
|
-
}
|
|
9
|
-
export interface WDARect {
|
|
10
|
-
x: number;
|
|
11
|
-
y: number;
|
|
12
|
-
width: number;
|
|
13
|
-
height: number;
|
|
14
|
-
}
|
|
15
|
-
export interface UITreeNode {
|
|
16
|
-
type: string;
|
|
17
|
-
label?: string;
|
|
18
|
-
value?: string;
|
|
19
|
-
enabled?: boolean;
|
|
20
|
-
visible?: boolean;
|
|
21
|
-
rect?: WDARect;
|
|
22
|
-
children?: UITreeNode[];
|
|
23
|
-
}
|
|
24
|
-
export type LocatorStrategy = "name" | "accessibility id" | "class name" | "xpath" | "predicate string";
|
|
25
|
-
export interface TouchAction {
|
|
26
|
-
action: "tap" | "press" | "moveTo" | "wait" | "release";
|
|
27
|
-
options?: {
|
|
28
|
-
x?: number;
|
|
29
|
-
y?: number;
|
|
30
|
-
element?: string;
|
|
31
|
-
ms?: number;
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
export interface WDAInstanceInfo {
|
|
35
|
-
pid: number;
|
|
36
|
-
port: number;
|
|
37
|
-
deviceId: string;
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=wda-types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wda-types.d.ts","sourceRoot":"","sources":["../../../src/ios/wda/wda-types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC,CAAC,EAAE,MAAM,CAAC;CAChD;AAED,MAAM,WAAW,OAAO;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;CACzB;AAED,MAAM,MAAM,eAAe,GACvB,MAAM,GACN,kBAAkB,GAClB,YAAY,GACZ,OAAO,GACP,kBAAkB,CAAC;AAEvB,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IACxD,OAAO,CAAC,EAAE;QACR,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,EAAE,CAAC,EAAE,MAAM,CAAC;KACb,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wda-types.js","sourceRoot":"","sources":["../../../src/ios/wda/wda-types.ts"],"names":[],"mappings":""}
|
package/dist/ios/wda-errors.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pure error-message builders for WDA failures. No I/O.
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* Build the standard "WDA required" error message used by tap/swipe/longPress/inputText.
|
|
6
|
-
*/
|
|
7
|
-
export declare function wdaRequiredError(operation: string, cause: unknown): Error;
|
|
8
|
-
//# sourceMappingURL=wda-errors.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wda-errors.d.ts","sourceRoot":"","sources":["../../src/ios/wda-errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,CAKzE"}
|
package/dist/ios/wda-errors.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pure error-message builders for WDA failures. No I/O.
|
|
3
|
-
*/
|
|
4
|
-
const INSTALL_HINT = "Install: npm install -g appium && appium driver install xcuitest\n" +
|
|
5
|
-
"Or set WDA_PATH environment variable.";
|
|
6
|
-
/**
|
|
7
|
-
* Build the standard "WDA required" error message used by tap/swipe/longPress/inputText.
|
|
8
|
-
*/
|
|
9
|
-
export function wdaRequiredError(operation, cause) {
|
|
10
|
-
const msg = cause instanceof Error ? cause.message : String(cause);
|
|
11
|
-
return new Error(`${operation} requires WebDriverAgent.\n\n${INSTALL_HINT}\n\nError: ${msg}`);
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=wda-errors.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wda-errors.js","sourceRoot":"","sources":["../../src/ios/wda-errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,YAAY,GAChB,oEAAoE;IACpE,uCAAuC,CAAC;AAE1C;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAiB,EAAE,KAAc;IAChE,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnE,OAAO,IAAI,KAAK,CACd,GAAG,SAAS,gCAAgC,YAAY,cAAc,GAAG,EAAE,CAC5E,CAAC;AACJ,CAAC"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pure WDA-side payload/coordinate builders. No I/O.
|
|
3
|
-
*/
|
|
4
|
-
import type { LocatorStrategy } from "./wda/wda-types.js";
|
|
5
|
-
export type SwipeDirection = "up" | "down" | "left" | "right";
|
|
6
|
-
export interface SwipeCoords {
|
|
7
|
-
x1: number;
|
|
8
|
-
y1: number;
|
|
9
|
-
x2: number;
|
|
10
|
-
y2: number;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Build start/end coordinates for a directional swipe centred at (cx, cy)
|
|
14
|
-
* with the given pixel distance.
|
|
15
|
-
*/
|
|
16
|
-
export declare function buildSwipeCoords(direction: SwipeDirection, cx: number, cy: number, distance: number): SwipeCoords;
|
|
17
|
-
/**
|
|
18
|
-
* Map a high-level find-elements criteria object into the list of
|
|
19
|
-
* (using, value) WDA selector tuples used to query the agent.
|
|
20
|
-
*/
|
|
21
|
-
export interface FindElementsCriteria {
|
|
22
|
-
text?: string;
|
|
23
|
-
label?: string;
|
|
24
|
-
type?: string;
|
|
25
|
-
visible?: boolean;
|
|
26
|
-
}
|
|
27
|
-
export interface WdaSelector {
|
|
28
|
-
using: LocatorStrategy;
|
|
29
|
-
value: string;
|
|
30
|
-
}
|
|
31
|
-
export declare function buildFindElementsSelectors(criteria: FindElementsCriteria): WdaSelector[];
|
|
32
|
-
//# sourceMappingURL=wda-payloads.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wda-payloads.d.ts","sourceRoot":"","sources":["../../src/ios/wda-payloads.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE9D,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,cAAc,EACzB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,GACf,WAAW,CAYb;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,oBAAoB,GAAG,WAAW,EAAE,CAMxF"}
|
package/dist/ios/wda-payloads.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pure WDA-side payload/coordinate builders. No I/O.
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* Build start/end coordinates for a directional swipe centred at (cx, cy)
|
|
6
|
-
* with the given pixel distance.
|
|
7
|
-
*/
|
|
8
|
-
export function buildSwipeCoords(direction, cx, cy, distance) {
|
|
9
|
-
const half = distance / 2;
|
|
10
|
-
switch (direction) {
|
|
11
|
-
case "up":
|
|
12
|
-
return { x1: cx, y1: cy + half, x2: cx, y2: cy - half };
|
|
13
|
-
case "down":
|
|
14
|
-
return { x1: cx, y1: cy - half, x2: cx, y2: cy + half };
|
|
15
|
-
case "left":
|
|
16
|
-
return { x1: cx + half, y1: cy, x2: cx - half, y2: cy };
|
|
17
|
-
case "right":
|
|
18
|
-
return { x1: cx - half, y1: cy, x2: cx + half, y2: cy };
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
export function buildFindElementsSelectors(criteria) {
|
|
22
|
-
const selectors = [];
|
|
23
|
-
if (criteria.text)
|
|
24
|
-
selectors.push({ using: "name", value: criteria.text });
|
|
25
|
-
if (criteria.label)
|
|
26
|
-
selectors.push({ using: "accessibility id", value: criteria.label });
|
|
27
|
-
if (criteria.type)
|
|
28
|
-
selectors.push({ using: "class name", value: criteria.type });
|
|
29
|
-
return selectors;
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=wda-payloads.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wda-payloads.js","sourceRoot":"","sources":["../../src/ios/wda-payloads.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAyB,EACzB,EAAU,EACV,EAAU,EACV,QAAgB;IAEhB,MAAM,IAAI,GAAG,QAAQ,GAAG,CAAC,CAAC;IAC1B,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,IAAI;YACP,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC;QAC1D,KAAK,MAAM;YACT,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC;QAC1D,KAAK,MAAM;YACT,OAAO,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QAC1D,KAAK,OAAO;YACV,OAAO,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAC5D,CAAC;AACH,CAAC;AAkBD,MAAM,UAAU,0BAA0B,CAAC,QAA8B;IACvE,MAAM,SAAS,GAAkB,EAAE,CAAC;IACpC,IAAI,QAAQ,CAAC,IAAI;QAAE,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3E,IAAI,QAAQ,CAAC,KAAK;QAAE,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IACzF,IAAI,QAAQ,CAAC,IAAI;QAAE,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjF,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Built-in Android plugin.
|
|
3
|
-
*
|
|
4
|
-
* Wraps the existing AndroidAdapter without modifying its behavior. The
|
|
5
|
-
* adapter remains the implementation; the plugin layer adds the kernel
|
|
6
|
-
* contract (manifest, lifecycle, capabilities) on top.
|
|
7
|
-
*
|
|
8
|
-
* Phase 2 migration: AndroidAdapter is kept intact and accessed through
|
|
9
|
-
* `plugin.adapter`. DeviceManager continues to route through the adapter
|
|
10
|
-
* directly for backward compatibility until Phase 5 turns it into a facade
|
|
11
|
-
* over the plugin registry.
|
|
12
|
-
*/
|
|
13
|
-
import type { PluginContext, PluginManifest, SourcePlugin } from "@claude-in-mobile/plugin-api";
|
|
14
|
-
import { AndroidAdapter } from "../../adapters/android-adapter.js";
|
|
15
|
-
export declare const ANDROID_PLUGIN_MANIFEST: PluginManifest;
|
|
16
|
-
export declare class AndroidPlugin implements SourcePlugin {
|
|
17
|
-
readonly manifest: PluginManifest;
|
|
18
|
-
readonly adapter: AndroidAdapter;
|
|
19
|
-
constructor(adapter?: AndroidAdapter);
|
|
20
|
-
init(_ctx: PluginContext): void;
|
|
21
|
-
}
|
|
22
|
-
export declare function createAndroidPlugin(): SourcePlugin;
|
|
23
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/android/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,YAAY,EACb,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEnE,eAAO,MAAM,uBAAuB,EAAE,cAgBrC,CAAC;AAEF,qBAAa,aAAc,YAAW,YAAY;IAChD,QAAQ,CAAC,QAAQ,iBAA2B;IAC5C,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;gBAErB,OAAO,GAAE,cAAqC;IAI1D,IAAI,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;CAIhC;AAED,wBAAgB,mBAAmB,IAAI,YAAY,CAElD"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Built-in Android plugin.
|
|
3
|
-
*
|
|
4
|
-
* Wraps the existing AndroidAdapter without modifying its behavior. The
|
|
5
|
-
* adapter remains the implementation; the plugin layer adds the kernel
|
|
6
|
-
* contract (manifest, lifecycle, capabilities) on top.
|
|
7
|
-
*
|
|
8
|
-
* Phase 2 migration: AndroidAdapter is kept intact and accessed through
|
|
9
|
-
* `plugin.adapter`. DeviceManager continues to route through the adapter
|
|
10
|
-
* directly for backward compatibility until Phase 5 turns it into a facade
|
|
11
|
-
* over the plugin registry.
|
|
12
|
-
*/
|
|
13
|
-
import { AndroidAdapter } from "../../adapters/android-adapter.js";
|
|
14
|
-
export const ANDROID_PLUGIN_MANIFEST = {
|
|
15
|
-
id: "android",
|
|
16
|
-
name: "Android",
|
|
17
|
-
version: "3.11.0",
|
|
18
|
-
apiVersion: "1",
|
|
19
|
-
capabilities: [
|
|
20
|
-
"screen",
|
|
21
|
-
"input",
|
|
22
|
-
"ui",
|
|
23
|
-
"shell",
|
|
24
|
-
"appLifecycle",
|
|
25
|
-
"permissions",
|
|
26
|
-
"logs",
|
|
27
|
-
"deviceMgmt",
|
|
28
|
-
],
|
|
29
|
-
description: "Android automation via ADB (screen, input, app lifecycle, shell, logs)",
|
|
30
|
-
};
|
|
31
|
-
export class AndroidPlugin {
|
|
32
|
-
manifest = ANDROID_PLUGIN_MANIFEST;
|
|
33
|
-
adapter;
|
|
34
|
-
constructor(adapter = new AndroidAdapter()) {
|
|
35
|
-
this.adapter = adapter;
|
|
36
|
-
}
|
|
37
|
-
init(_ctx) {
|
|
38
|
-
// No tool registration in Phase 2 — existing MCP tools still wire through
|
|
39
|
-
// device-manager. Phase 5 will move tool registration here.
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
export function createAndroidPlugin() {
|
|
43
|
-
return new AndroidPlugin();
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/android/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEnE,MAAM,CAAC,MAAM,uBAAuB,GAAmB;IACrD,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,QAAQ;IACjB,UAAU,EAAE,GAAG;IACf,YAAY,EAAE;QACZ,QAAQ;QACR,OAAO;QACP,IAAI;QACJ,OAAO;QACP,cAAc;QACd,aAAa;QACb,MAAM;QACN,YAAY;KACb;IACD,WAAW,EAAE,wEAAwE;CACtF,CAAC;AAEF,MAAM,OAAO,aAAa;IACf,QAAQ,GAAG,uBAAuB,CAAC;IACnC,OAAO,CAAiB;IAEjC,YAAY,UAA0B,IAAI,cAAc,EAAE;QACxD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,IAAmB;QACtB,0EAA0E;QAC1E,4DAA4D;IAC9D,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,aAAa,EAAE,CAAC;AAC7B,CAAC"}
|